mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-10-07 00:59:00 +08:00
Implement UART driver files for AT32UC3B: Working commit
This commit is contained in:
+23
-3
@@ -74,8 +74,8 @@ CONFIG_RT_USING_DEVICE=y
|
||||
# CONFIG_RT_USING_INTERRUPT_INFO is not set
|
||||
CONFIG_RT_USING_CONSOLE=y
|
||||
CONFIG_RT_CONSOLEBUF_SIZE=128
|
||||
CONFIG_RT_CONSOLE_DEVICE_NAME="uart"
|
||||
CONFIG_RT_VER_NUM=0x50002
|
||||
CONFIG_RT_CONSOLE_DEVICE_NAME="uart1"
|
||||
CONFIG_RT_VER_NUM=0x50100
|
||||
# CONFIG_RT_USING_STDC_ATOMIC is not set
|
||||
# CONFIG_RT_USING_CACHE is not set
|
||||
# CONFIG_RT_USING_HW_ATOMIC is not set
|
||||
@@ -121,7 +121,7 @@ CONFIG_RT_UNAMED_PIPE_NUMBER=64
|
||||
CONFIG_RT_USING_SERIAL=y
|
||||
CONFIG_RT_USING_SERIAL_V1=y
|
||||
# CONFIG_RT_USING_SERIAL_V2 is not set
|
||||
CONFIG_RT_SERIAL_USING_DMA=y
|
||||
# CONFIG_RT_SERIAL_USING_DMA is not set
|
||||
CONFIG_RT_SERIAL_RB_BUFSZ=64
|
||||
# CONFIG_RT_USING_CAN is not set
|
||||
# CONFIG_RT_USING_HWTIMER is not set
|
||||
@@ -984,3 +984,23 @@ CONFIG_RT_LIBC_TZ_DEFAULT_SEC=0
|
||||
#
|
||||
# Uncategorized
|
||||
#
|
||||
|
||||
#
|
||||
# On-chip Peripheral Drivers
|
||||
#
|
||||
CONFIG_BSP_USING_PIN=y
|
||||
CONFIG_BSP_USING_UART=y
|
||||
# CONFIG_BSP_USING_UART0 is not set
|
||||
# CONFIG_BSP_UART0_TX_PIN_19 is not set
|
||||
# CONFIG_BSP_UART0_TX_PIN_43 is not set
|
||||
# CONFIG_BSP_UART0_RX_PIN_18 is not set
|
||||
# CONFIG_BSP_UART0_RX_PIN_42 is not set
|
||||
CONFIG_BSP_USING_UART1=y
|
||||
CONFIG_BSP_UART1_TX_PIN_34=y
|
||||
# CONFIG_BSP_UART1_TX_PIN_23 is not set
|
||||
CONFIG_BSP_UART1_TX_PIN=34
|
||||
CONFIG_BSP_UART1_TX_PIN_FUNCTION=2
|
||||
CONFIG_BSP_UART1_RX_PIN_35=y
|
||||
# CONFIG_BSP_UART1_RX_PIN_24 is not set
|
||||
CONFIG_BSP_UART1_RX_PIN=35
|
||||
CONFIG_BSP_UART1_RX_PIN_FUNCTION=2
|
||||
|
||||
@@ -26,3 +26,96 @@ config ENV_DIR
|
||||
source "$RTT_DIR/Kconfig"
|
||||
source "$PKGS_DIR/Kconfig"
|
||||
|
||||
menu "On-chip Peripheral Drivers"
|
||||
|
||||
config BSP_USING_PIN
|
||||
bool "Enable GPIO"
|
||||
select RT_USING_PIN
|
||||
default y
|
||||
|
||||
menuconfig BSP_USING_UART
|
||||
bool "Enable UART"
|
||||
select RT_USING_SERIAL
|
||||
default y
|
||||
if BSP_USING_UART
|
||||
config BSP_USING_UART0
|
||||
bool "Enable UART0"
|
||||
default n
|
||||
if BSP_USING_UART0
|
||||
choice
|
||||
prompt "uart0 tx pin number (GP)"
|
||||
depends on BSP_USING_UART0
|
||||
default BSP_UART0_TX_PIN_43
|
||||
config BSP_UART0_TX_PIN_19
|
||||
bool "19"
|
||||
config BSP_UART0_TX_PIN_43
|
||||
bool "43"
|
||||
endchoice
|
||||
config BSP_UART0_TX_PIN
|
||||
int
|
||||
default 19 if BSP_UART0_TX_PIN_19
|
||||
default 43 if BSP_UART0_TX_PIN_43
|
||||
config BSP_UART0_TX_PIN_FUNCTION
|
||||
int
|
||||
default 0 if BSP_UART0_TX_PIN_19
|
||||
default 2 if BSP_UART0_TX_PIN_43
|
||||
choice
|
||||
prompt "uart0 rx pin number (GP)"
|
||||
depends on BSP_USING_UART0
|
||||
default BSP_UART0_RX_PIN_42
|
||||
config BSP_UART0_RX_PIN_18
|
||||
bool "18"
|
||||
config BSP_UART0_RX_PIN_42
|
||||
bool "42"
|
||||
endchoice
|
||||
config BSP_UART0_RX_PIN
|
||||
int
|
||||
default 18 if BSP_UART0_RX_PIN_18
|
||||
default 42 if BSP_UART0_RX_PIN_42
|
||||
config BSP_UART0_RX_PIN_FUNCTION
|
||||
int
|
||||
default 0 if BSP_UART0_RX_PIN_18
|
||||
default 2 if BSP_UART0_RX_PIN_42
|
||||
endif
|
||||
|
||||
config BSP_USING_UART1
|
||||
bool "Enable UART1"
|
||||
default y
|
||||
if BSP_USING_UART1
|
||||
choice
|
||||
prompt "uart1 tx pin number (GP)"
|
||||
depends on BSP_USING_UART1
|
||||
default BSP_UART1_TX_PIN_34
|
||||
config BSP_UART1_TX_PIN_34
|
||||
bool "34"
|
||||
config BSP_UART1_TX_PIN_23
|
||||
bool "23"
|
||||
endchoice
|
||||
config BSP_UART1_TX_PIN
|
||||
int
|
||||
default 34 if BSP_UART1_TX_PIN_34
|
||||
default 23 if BSP_UART1_TX_PIN_23
|
||||
config BSP_UART1_TX_PIN_FUNCTION
|
||||
int
|
||||
default 2 if BSP_UART1_TX_PIN_34
|
||||
default 0 if BSP_UART1_TX_PIN_23
|
||||
choice
|
||||
prompt "uart1 rx pin number (GP)"
|
||||
depends on BSP_USING_UART1
|
||||
default BSP_UART1_RX_PIN_35
|
||||
config BSP_UART1_RX_PIN_35
|
||||
bool "35"
|
||||
config BSP_UART1_RX_PIN_24
|
||||
bool "24"
|
||||
endchoice
|
||||
config BSP_UART1_RX_PIN
|
||||
int
|
||||
default 35 if BSP_UART1_RX_PIN_35
|
||||
default 24 if BSP_UART1_RX_PIN_24
|
||||
config BSP_UART1_RX_PIN_FUNCTION
|
||||
int
|
||||
default 2 if BSP_UART1_RX_PIN_35
|
||||
default 0 if BSP_UART1_RX_PIN_24
|
||||
endif
|
||||
endif
|
||||
endmenu
|
||||
|
||||
@@ -2,7 +2,7 @@ import rtconfig
|
||||
Import('RTT_ROOT')
|
||||
from building import *
|
||||
|
||||
src_bsp = ['application.c', 'startup.c', 'board.c']
|
||||
src_bsp = ['application.c', 'startup.c', 'board.c', 'drv_uart.c']
|
||||
|
||||
src = File(src_bsp)
|
||||
CPPPATH = [RTT_ROOT + '/bsp/avr32uc3b0']
|
||||
|
||||
@@ -10,7 +10,7 @@ else:
|
||||
sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')]
|
||||
from building import *
|
||||
|
||||
TARGET = 'rtthread-' + rtconfig.ARCH + '.' + rtconfig.TARGET_EXT
|
||||
TARGET = 'rtthread-' + rtconfig.PART + '.' + rtconfig.TARGET_EXT
|
||||
|
||||
DefaultEnvironment(tools=[])
|
||||
env = Environment(tools = ['mingw'],
|
||||
|
||||
@@ -19,12 +19,12 @@ static void rt_thread_entry_led1(void* parameter)
|
||||
while (1)
|
||||
{
|
||||
/* led on */
|
||||
rt_kprintf("LED1 on\r\n");
|
||||
//rt_kprintf("LED1 on\r\n");
|
||||
gpio_tgl_gpio_pin(AVR32_PIN_PA08);
|
||||
rt_thread_delay(RT_TICK_PER_SECOND / 2); /* sleep 0.5 second and switch to other thread */
|
||||
|
||||
/* led off */
|
||||
rt_kprintf("LED1 off\r\n");
|
||||
//rt_kprintf("LED1 off\r\n");
|
||||
gpio_tgl_gpio_pin(AVR32_PIN_PA08);
|
||||
rt_thread_delay(RT_TICK_PER_SECOND / 2);
|
||||
}
|
||||
@@ -37,12 +37,12 @@ void rt_thread_entry_led2(void* parameter)
|
||||
while (1)
|
||||
{
|
||||
/* led on */
|
||||
rt_kprintf("LED2 on");
|
||||
//rt_kprintf("LED2 on");
|
||||
gpio_tgl_gpio_pin(AVR32_PIN_PA07);
|
||||
rt_thread_delay(RT_TICK_PER_SECOND);
|
||||
|
||||
/* led off */
|
||||
rt_kprintf("LED2 off\r\n");
|
||||
//rt_kprintf("LED2 off\r\n");
|
||||
gpio_tgl_gpio_pin(AVR32_PIN_PA07);
|
||||
rt_thread_delay(RT_TICK_PER_SECOND);
|
||||
}
|
||||
|
||||
+16
-35
@@ -1,11 +1,12 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2021, RT-Thread Development Team
|
||||
* Copyright (c) 2006-2023, RT-Thread Development Team
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2010-03-30 Kyle First version
|
||||
* Date Author Notes
|
||||
* 2010-03-30 Kyle First version
|
||||
* 2023-10-13 Raman Gopalan Move UART specific code sections into the drv_uart files
|
||||
*/
|
||||
|
||||
#include <rtthread.h>
|
||||
@@ -14,16 +15,7 @@
|
||||
#include "gpio.h"
|
||||
#include "usart.h"
|
||||
#include "intc.h"
|
||||
#include "serial.h"
|
||||
|
||||
#define FOSC0 12000000
|
||||
#define FCPU 60000000
|
||||
#define FHSB FCPU
|
||||
#define FPBA FCPU
|
||||
#define FPBB FCPU
|
||||
|
||||
extern void rt_hw_serial_isr(void);
|
||||
extern void rt_hw_usart_init(void);
|
||||
#include "drv_uart.h"
|
||||
|
||||
/**
|
||||
* System tick interrupt handler.
|
||||
@@ -52,24 +44,7 @@ static void peripherals_init(void)
|
||||
.osc0_startup = AVR32_PM_OSCCTRL0_STARTUP_2048_RCOSC
|
||||
};
|
||||
pm_configure_clocks(&pm_freq_param);
|
||||
|
||||
/*
|
||||
* USART1 initialization
|
||||
*/
|
||||
gpio_enable_module_pin(AVR32_USART1_TXD_0_1_PIN, AVR32_USART1_TXD_0_1_FUNCTION);
|
||||
gpio_enable_module_pin(AVR32_USART1_RXD_0_1_PIN, AVR32_USART1_RXD_0_1_FUNCTION);
|
||||
static const usart_options_t usartOptions = {
|
||||
.baudrate = 115200,
|
||||
.charlength = 8,
|
||||
.paritytype = USART_NO_PARITY,
|
||||
.stopbits = USART_1_STOPBIT,
|
||||
.channelmode = USART_NORMAL_CHMODE
|
||||
};
|
||||
usart_init_rs232(&AVR32_USART1, &usartOptions, FCPU);
|
||||
|
||||
INTC_init_interrupts();
|
||||
INTC_register_interrupt(&rt_hw_serial_isr, AVR32_USART1_IRQ, AVR32_INTC_INT0);
|
||||
AVR32_USART1.ier = AVR32_USART_IER_RXRDY_MASK;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -84,14 +59,20 @@ static void cpu_counter_init(void)
|
||||
|
||||
void rt_hw_board_init(void)
|
||||
{
|
||||
extern struct rt_device _rt_usart_device;
|
||||
extern struct avr32_serial_device uart;
|
||||
|
||||
Disable_global_interrupt();
|
||||
|
||||
peripherals_init();
|
||||
cpu_counter_init();
|
||||
|
||||
rt_hw_serial_register(&_rt_usart_device, "uart1", RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, &uart);
|
||||
rt_console_set_device("uart1");
|
||||
#ifdef RT_USING_COMPONENTS_INIT
|
||||
rt_components_board_init();
|
||||
#endif
|
||||
|
||||
#ifdef RT_USING_SERIAL
|
||||
rt_hw_uart_init();
|
||||
#endif
|
||||
|
||||
#ifdef RT_USING_CONSOLE
|
||||
rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
|
||||
#endif
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2023, RT-Thread Development Team
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2009-01-05 Bernard first version
|
||||
* 2010-03-29 Bernard remove interrupt tx and DMA rx mode.
|
||||
* 2010-03-30 Kyle Ported from STM32 to AVR32.
|
||||
* 2023-10-13 Raman Gopalan UART driver for at32uc3b: Initial version
|
||||
*/
|
||||
|
||||
#ifndef __RT_HW_SERIAL_H__
|
||||
#define __RT_HW_SERIAL_H__
|
||||
|
||||
#include <rthw.h>
|
||||
#include <rtthread.h>
|
||||
#include "compiler.h"
|
||||
#include "usart.h"
|
||||
|
||||
#define FOSC0 12000000
|
||||
#define FCPU 60000000
|
||||
#define FHSB FCPU
|
||||
#define FPBA FCPU
|
||||
#define FPBB FCPU
|
||||
|
||||
#define UART_RX_BUFFER_SIZE 64
|
||||
#define UART_TX_DMA_NODE_SIZE 4
|
||||
|
||||
#ifdef RT_USING_SERIAL
|
||||
int rt_hw_uart_init(void);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -47,8 +47,8 @@
|
||||
#define RT_USING_DEVICE
|
||||
#define RT_USING_CONSOLE
|
||||
#define RT_CONSOLEBUF_SIZE 128
|
||||
#define RT_CONSOLE_DEVICE_NAME "uart"
|
||||
#define RT_VER_NUM 0x50002
|
||||
#define RT_CONSOLE_DEVICE_NAME "uart1"
|
||||
#define RT_VER_NUM 0x50100
|
||||
|
||||
/* RT-Thread Components */
|
||||
|
||||
@@ -76,7 +76,6 @@
|
||||
#define RT_UNAMED_PIPE_NUMBER 64
|
||||
#define RT_USING_SERIAL
|
||||
#define RT_USING_SERIAL_V1
|
||||
#define RT_SERIAL_USING_DMA
|
||||
#define RT_SERIAL_RB_BUFSZ 64
|
||||
#define RT_USING_PIN
|
||||
|
||||
@@ -225,5 +224,16 @@
|
||||
|
||||
/* Uncategorized */
|
||||
|
||||
/* On-chip Peripheral Drivers */
|
||||
|
||||
#define BSP_USING_PIN
|
||||
#define BSP_USING_UART
|
||||
#define BSP_USING_UART1
|
||||
#define BSP_UART1_TX_PIN_34
|
||||
#define BSP_UART1_TX_PIN 34
|
||||
#define BSP_UART1_TX_PIN_FUNCTION 2
|
||||
#define BSP_UART1_RX_PIN_35
|
||||
#define BSP_UART1_RX_PIN 35
|
||||
#define BSP_UART1_RX_PIN_FUNCTION 2
|
||||
|
||||
#endif
|
||||
|
||||
@@ -5,6 +5,7 @@ ARCH = 'avr32'
|
||||
CPU = 'uc3'
|
||||
PART = 'uc3b0256'
|
||||
BOARD = 'USERBOARD'
|
||||
ATOMICS = ' -D__STDC_NO_ATOMICS__'
|
||||
|
||||
CROSS_TOOL = 'gcc'
|
||||
|
||||
@@ -13,7 +14,7 @@ if os.getenv('RTT_CC'):
|
||||
|
||||
if CROSS_TOOL == 'gcc':
|
||||
PLATFORM = 'gcc'
|
||||
EXEC_PATH = 'C:/Program Files/Atmel/AVR Tools/AVR Toolchain/bin'
|
||||
EXEC_PATH = 'C:/Program Files (x86)/Atmel/AVR Tools/AVR Toolchain/bin'
|
||||
elif CROSS_TOOL == 'keil':
|
||||
print('================ERROR============================')
|
||||
print('Not support keil yet!')
|
||||
@@ -44,7 +45,7 @@ if PLATFORM == 'gcc':
|
||||
OBJCPY = PREFIX + 'objcopy'
|
||||
|
||||
DEVICE = ' -mpart=' + PART
|
||||
CFLAGS = DEVICE + ' -DBOARD=' + BOARD + ' -fmessage-length=0 -ffunction-sections -masm-addr-pseudos'
|
||||
CFLAGS = DEVICE + ' -DBOARD=' + BOARD + ATOMICS + ' -fmessage-length=0 -ffunction-sections -masm-addr-pseudos'
|
||||
AFLAGS = ' -c -x assembler-with-cpp' + DEVICE
|
||||
LFLAGS = DEVICE + ' -Wl,--gc-sections --rodata-writable -Wl,--direct-data -LSOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS -T avr32elf_uc3b0256.lds'
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ int main(void)
|
||||
/* init finsh */
|
||||
finsh_system_init();
|
||||
#if !defined(RT_USING_POSIX_STDIO) && defined(RT_USING_DEVICE)
|
||||
finsh_set_device(FINSH_DEVICE_NAME);
|
||||
finsh_set_device(RT_CONSOLE_DEVICE_NAME);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,50 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2022, RT-Thread Development Team
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2009-01-05 Bernard first version
|
||||
* 2010-03-29 Bernard remove interrupt tx and DMA rx mode.
|
||||
* 2010-03-30 Kyle Ported from STM32 to AVR32.
|
||||
*/
|
||||
|
||||
#ifndef __RT_HW_SERIAL_H__
|
||||
#define __RT_HW_SERIAL_H__
|
||||
|
||||
#include <rthw.h>
|
||||
#include <rtthread.h>
|
||||
#include "compiler.h"
|
||||
#include "usart.h"
|
||||
|
||||
#define UART_RX_BUFFER_SIZE 64
|
||||
#define UART_TX_DMA_NODE_SIZE 4
|
||||
|
||||
/* data node for Tx Mode */
|
||||
struct avr32_serial_data_node
|
||||
{
|
||||
rt_uint8_t *data_ptr;
|
||||
rt_size_t data_size;
|
||||
struct avr32_serial_data_node *next, *prev;
|
||||
};
|
||||
|
||||
struct avr32_serial_int_rx
|
||||
{
|
||||
rt_uint8_t rx_buffer[UART_RX_BUFFER_SIZE];
|
||||
rt_uint32_t read_index, save_index;
|
||||
};
|
||||
|
||||
struct avr32_serial_device
|
||||
{
|
||||
avr32_usart_t *uart_device;
|
||||
|
||||
/* rx structure */
|
||||
struct avr32_serial_int_rx* int_rx;
|
||||
};
|
||||
|
||||
rt_err_t rt_hw_serial_register(rt_device_t device, const char* name, rt_uint32_t flag, struct avr32_serial_device *serial);
|
||||
|
||||
void rt_hw_serial_isr();
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user