diff --git a/.travis.yml b/.travis.yml index 2b9f998904827fd0ba1a91a6532789baa96c5ba4..94b130fdd75b1b14198e44a98c229e672b6f788a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -51,7 +51,8 @@ env: - RTT_BSP='taihu' RTT_TOOL_CHAIN='sourcery-ppc' # - RTT_BSP='upd70f3454' # iar # - RTT_BSP='x86' # x86 - - RTT_BSP='xplorer4330/m4' RTT_TOOL_CHAIN='sourcery-arm' + - RTT_BSP='xplorer4330/M4' RTT_TOOL_CHAIN='sourcery-arm' + - RTT_BSP='lpc43xx/M4' RTT_TOOL_CHAIN='sourcery-arm' - RTT_BSP='lpc408x' RTT_TOOL_CHAIN='sourcery-arm' - RTT_BSP='beaglebone' RTT_TOOL_CHAIN='sourcery-arm' - RTT_BSP='zynq7000' RTT_TOOL_CHAIN='sourcery-arm' diff --git a/bsp/at91sam9260/applications/application.c b/bsp/at91sam9260/applications/application.c index fa2f06377b8dacdab6882f7cd4e6f861dbcfbe3a..1fd9324cd2123a9ef62c395aba8611a49d657c76 100644 --- a/bsp/at91sam9260/applications/application.c +++ b/bsp/at91sam9260/applications/application.c @@ -138,8 +138,6 @@ void rt_init_thread_entry(void* parameter) /* register ethernetif device */ eth_system_device_init(); rt_hw_macb_init(); - /* re-init device driver */ - rt_device_init_all(); /* init lwip system */ lwip_sys_init(); } diff --git a/bsp/at91sam9260/drivers/usart.c b/bsp/at91sam9260/drivers/usart.c index 7b95ca0e4d79698c65dd7682f99ddc40eb32750d..c47d378cb8c6dad38e3cbd6396ca37601ebab270 100644 --- a/bsp/at91sam9260/drivers/usart.c +++ b/bsp/at91sam9260/drivers/usart.c @@ -95,7 +95,7 @@ void rt_at91_usart_handler(int vector, void *param) return; } rt_interrupt_enter(); - rt_hw_serial_isr(dev); + rt_hw_serial_isr((struct rt_serial_device *)dev, RT_SERIAL_EVENT_RX_IND); rt_interrupt_leave(); } @@ -231,7 +231,6 @@ static const struct rt_uart_ops at91_usart_ops = #if defined(RT_USING_DBGU) static struct rt_serial_device serial_dbgu; -static struct serial_ringbuffer dbgu_int_rx; struct at91_uart dbgu = { DBGU, AT91_ID_SYS @@ -241,7 +240,6 @@ struct at91_uart dbgu = { #if defined(RT_USING_UART0) static struct rt_serial_device serial0; -static struct serial_ringbuffer uart0_int_rx; struct at91_uart uart0 = { UART0, AT91SAM9260_ID_US0 @@ -250,7 +248,6 @@ struct at91_uart uart0 = { #if defined(RT_USING_UART1) static struct rt_serial_device serial1; -static struct serial_ringbuffer uart1_int_rx; struct at91_uart uart1 = { UART1, AT91SAM9260_ID_US1 @@ -259,7 +256,6 @@ struct at91_uart uart1 = { #if defined(RT_USING_UART2) static struct rt_serial_device serial2; -static struct serial_ringbuffer uart2_int_rx; struct at91_uart uart2 = { UART2, AT91SAM9260_ID_US2 @@ -268,7 +264,6 @@ struct at91_uart uart2 = { #if defined(RT_USING_UART3) static struct rt_serial_device serial3; -static struct serial_ringbuffer uart3_int_rx; struct at91_uart uart3 = { UART3, AT91SAM9260_ID_US3 @@ -337,29 +332,29 @@ void rt_hw_uart_init(void) #if defined(RT_USING_DBGU) serial_dbgu.ops = &at91_usart_ops; - serial_dbgu.int_rx = &dbgu_int_rx; serial_dbgu.config.baud_rate = BAUD_RATE_115200; serial_dbgu.config.bit_order = BIT_ORDER_LSB; serial_dbgu.config.data_bits = DATA_BITS_8; serial_dbgu.config.parity = PARITY_NONE; serial_dbgu.config.stop_bits = STOP_BITS_1; serial_dbgu.config.invert = NRZ_NORMAL; + serial_dbgu.config.bufsz = RT_SERIAL_RB_BUFSZ; /* register vcom device */ rt_hw_serial_register(&serial_dbgu, "dbgu", - RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, &dbgu); #endif #if defined(RT_USING_UART0) serial0.ops = &at91_usart_ops; - serial0.int_rx = &uart0_int_rx; serial0.config.baud_rate = BAUD_RATE_115200; serial0.config.bit_order = BIT_ORDER_LSB; serial0.config.data_bits = DATA_BITS_8; serial0.config.parity = PARITY_NONE; serial0.config.stop_bits = STOP_BITS_1; serial0.config.invert = NRZ_NORMAL; + serial0.config.bufsz = RT_SERIAL_RB_BUFSZ; /* register vcom device */ rt_hw_serial_register(&serial0, "uart0", @@ -379,10 +374,11 @@ void rt_hw_uart_init(void) serial1.config.parity = PARITY_NONE; serial1.config.stop_bits = STOP_BITS_1; serial1.config.invert = NRZ_NORMAL; + serial1.config.bufsz = RT_SERIAL_RB_BUFSZ; /* register vcom device */ rt_hw_serial_register(&serial1, "uart1", - RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, &uart1); rt_hw_interrupt_install(uart1.irq, rt_at91_usart_handler, (void *)&(serial1.parent), "UART1"); @@ -391,17 +387,17 @@ void rt_hw_uart_init(void) #if defined(RT_USING_UART2) serial2.ops = &at91_usart_ops; - serial2.int_rx = &uart2_int_rx; serial2.config.baud_rate = BAUD_RATE_115200; serial2.config.bit_order = BIT_ORDER_LSB; serial2.config.data_bits = DATA_BITS_8; serial2.config.parity = PARITY_NONE; serial2.config.stop_bits = STOP_BITS_1; serial2.config.invert = NRZ_NORMAL; + serial2.config.bufsz = RT_SERIAL_RB_BUFSZ; /* register vcom device */ rt_hw_serial_register(&serial2, "uart2", - RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, &uart2); rt_hw_interrupt_install(uart2.irq, rt_at91_usart_handler, (void *)&(serial2.parent), "UART2"); @@ -410,17 +406,17 @@ void rt_hw_uart_init(void) #if defined(RT_USING_UART3) serial3.ops = &at91_usart_ops; - serial3.int_rx = &uart3_int_rx; serial3.config.baud_rate = BAUD_RATE_115200; serial3.config.bit_order = BIT_ORDER_LSB; serial3.config.data_bits = DATA_BITS_8; serial3.config.parity = PARITY_NONE; serial3.config.stop_bits = STOP_BITS_1; serial3.config.invert = NRZ_NORMAL; + serial3.config.bufsz = RT_SERIAL_RB_BUFSZ; /* register vcom device */ rt_hw_serial_register(&serial3, "uart3", - RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, &uart3); rt_hw_interrupt_install(uart3.irq, rt_at91_usart_handler, (void *)&(serial3.parent), "UART3"); diff --git a/bsp/avr32uc3b0/startup.c b/bsp/avr32uc3b0/startup.c index 79098bd311e494c3a12158035b51c16bbba71fdb..481ff1448ad0f85555f16d76dce7e918c42bd120 100644 --- a/bsp/avr32uc3b0/startup.c +++ b/bsp/avr32uc3b0/startup.c @@ -39,7 +39,6 @@ int main(void) #endif rt_system_scheduler_init(); - rt_device_init_all(); rt_application_init(); #ifdef RT_USING_FINSH diff --git a/bsp/beaglebone/drivers/serial.c b/bsp/beaglebone/drivers/serial.c index d07621080b44fac0379e67ef1faf5da8ba84a5b1..8dcd3891238a3ca8f1f98d51dcf80337d1c29597 100644 --- a/bsp/beaglebone/drivers/serial.c +++ b/bsp/beaglebone/drivers/serial.c @@ -41,7 +41,7 @@ static void am33xx_uart_isr(int irqno, void* param) if ((iir & (0x02 << 1)) || (iir & (0x6 << 1))) { - rt_hw_serial_isr(serial); + rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND); } } @@ -165,7 +165,6 @@ static const struct rt_uart_ops am33xx_uart_ops = /* UART device driver structure */ #ifdef RT_USING_UART0 -struct serial_ringbuffer uart0_int_rx; struct am33xx_uart uart0 = { UART0_BASE, @@ -175,7 +174,6 @@ struct rt_serial_device serial0; #endif #ifdef RT_USING_UART1 -struct serial_ringbuffer uart1_int_rx; struct am33xx_uart uart1 = { UART1_BASE, @@ -185,7 +183,6 @@ struct rt_serial_device serial1; #endif #ifdef RT_USING_UART2 -struct serial_ringbuffer uart2_int_rx; struct am33xx_uart uart2 = { UART2_BASE, @@ -195,7 +192,6 @@ struct rt_serial_device serial2; #endif #ifdef RT_USING_UART3 -struct serial_ringbuffer uart3_int_rx; struct am33xx_uart uart3 = { UART3_BASE, @@ -205,7 +201,6 @@ struct rt_serial_device serial3; #endif #ifdef RT_USING_UART4 -struct serial_ringbuffer uart4_int_rx; struct am33xx_uart uart4 = { UART4_BASE, @@ -215,7 +210,6 @@ struct rt_serial_device serial4; #endif #ifdef RT_USING_UART5 -struct serial_ringbuffer uart5_int_rx; struct am33xx_uart uart5 = { UART5_BASE, @@ -359,8 +353,9 @@ int rt_hw_serial_init(void) config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; + config.bufsz = RT_SERIAL_RB_BUFSZ; + serial0.ops = &am33xx_uart_ops; - serial0.int_rx = &uart0_int_rx; serial0.config = config; /* enable RX interrupt */ UART_IER_REG(uart0.base) = 0x01; @@ -370,7 +365,7 @@ int rt_hw_serial_init(void) rt_hw_interrupt_mask(uart0.irq); /* register UART0 device */ rt_hw_serial_register(&serial0, "uart0", - RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, &uart0); #endif @@ -381,8 +376,9 @@ int rt_hw_serial_init(void) config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; + config.bufsz = RT_SERIAL_RB_BUFSZ; + serial1.ops = &am33xx_uart_ops; - serial1.int_rx = &uart1_int_rx; serial1.config = config; /* enable RX interrupt */ UART_IER_REG(uart1.base) = 0x01; @@ -392,7 +388,7 @@ int rt_hw_serial_init(void) rt_hw_interrupt_mask(uart1.irq); /* register UART0 device */ rt_hw_serial_register(&serial1, "uart1", - RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, &uart1); #endif @@ -403,8 +399,9 @@ int rt_hw_serial_init(void) config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; + config.bufsz = RT_SERIAL_RB_BUFSZ; + serial2.ops = &am33xx_uart_ops; - serial2.int_rx = &uart2_int_rx; serial2.config = config; /* enable RX interrupt */ UART_IER_REG(uart2.base) = 0x01; @@ -414,7 +411,7 @@ int rt_hw_serial_init(void) rt_hw_interrupt_mask(uart2.irq); /* register UART2 device */ rt_hw_serial_register(&serial2, "uart2", - RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, &uart2); #endif @@ -425,8 +422,9 @@ int rt_hw_serial_init(void) config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; + config.bufsz = RT_SERIAL_RB_BUFSZ; + serial3.ops = &am33xx_uart_ops; - serial3.int_rx = &uart_3_int_rx; serial3.config = config; /* enable RX interrupt */ UART_IER_REG(uart3.base) = 0x01; @@ -436,7 +434,7 @@ int rt_hw_serial_init(void) rt_hw_interrupt_mask(uart3.irq); /* register UART3 device */ rt_hw_serial_register(&serial3, "uart3", - RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, &uart3); #endif @@ -447,9 +445,9 @@ int rt_hw_serial_init(void) config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; + config.bufsz = RT_SERIAL_RB_BUFSZ; serial4.ops = &am33xx_uart_ops; - serial4.int_rx = &uart4_int_rx; serial4.config = config; /* enable RX interrupt */ UART_IER_REG(uart4.base) = 0x01; @@ -459,7 +457,7 @@ int rt_hw_serial_init(void) rt_hw_interrupt_mask(uart4.irq); /* register UART4 device */ rt_hw_serial_register(&serial4, "uart4", - RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, &uart4); #endif @@ -470,9 +468,9 @@ int rt_hw_serial_init(void) config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; + config.bufsz = RT_SERIAL_RB_BUFSZ; serial5.ops = &am33xx_uart_ops; - serial5.int_rx = &uart5_int_rx; serial5.config = config; /* enable RX interrupt */ UART_IER_REG(uart5.base) = 0x01; @@ -482,7 +480,7 @@ int rt_hw_serial_init(void) rt_hw_interrupt_mask(uart5.irq); /* register UART4 device */ rt_hw_serial_register(&serial5, "uart5", - RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, &uart5); #endif diff --git a/bsp/bf533/startup.c b/bsp/bf533/startup.c index a3cd60dd618e43eb2f8691663276c01ce1d012bf..b1bf9884c2624d97d7110d4be16373ffcad1a547 100644 --- a/bsp/bf533/startup.c +++ b/bsp/bf533/startup.c @@ -62,9 +62,6 @@ void rtthread_startup(void) RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, &uart0); - /* init all device */ - rt_device_init_all(); - rt_console_set_device("uart0"); #endif diff --git a/bsp/efm32/startup.c b/bsp/efm32/startup.c index 3e95603be3b0009b042ac51dc3c8cb18d5a4bef9..f997c6aadd1f4df72f1b46a1d995df7f34116db7 100644 --- a/bsp/efm32/startup.c +++ b/bsp/efm32/startup.c @@ -114,9 +114,6 @@ void rtthread_startup(void) /* init scheduler system */ rt_system_scheduler_init(); - /* init all devices */ - rt_device_init_all(); - /* init finsh */ #ifdef RT_USING_FINSH finsh_system_init(); diff --git a/bsp/frdm-k64f/board/drv_uart.c b/bsp/frdm-k64f/board/drv_uart.c index 7813b21ad7904a84681f13f87088bbac4dfccee1..ac9ef8d51af927515e5c1e8cc16952192eeaeca5 100644 --- a/bsp/frdm-k64f/board/drv_uart.c +++ b/bsp/frdm-k64f/board/drv_uart.c @@ -16,7 +16,6 @@ #include "drv_uart.h" static struct rt_serial_device _k64_serial; //abstracted serial for RTT -static struct serial_ringbuffer _k64_int_rx; //UART send buffer area struct k64_serial_device { @@ -231,7 +230,7 @@ static const struct rt_uart_ops _k64_ops = void UART0_RX_TX_IRQHandler(void) { rt_interrupt_enter(); - rt_hw_serial_isr((struct rt_serial_device*)&_k64_serial); + rt_hw_serial_isr((struct rt_serial_device*)&_k64_serial, RT_SERIAL_EVENT_RX_IND); rt_interrupt_leave(); } @@ -247,9 +246,9 @@ void rt_hw_uart_init(void) config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; + config.bufsz = RT_SERIAL_RB_BUFSZ; _k64_serial.ops = &_k64_ops; - _k64_serial.int_rx = &_k64_int_rx; _k64_serial.config = config; rt_hw_serial_register(&_k64_serial, "uart0", diff --git a/bsp/lm3s8962/applications/startup.c b/bsp/lm3s8962/applications/startup.c index a38733494f0a59ef82df25fae24e19dd273aba83..7f34aeef9589cfaf055a5f3002caf3443994b400 100644 --- a/bsp/lm3s8962/applications/startup.c +++ b/bsp/lm3s8962/applications/startup.c @@ -118,8 +118,6 @@ void rtthread_startup(void) /* init sd card device */ rt_hw_sdcard_init(); #endif - /* init all device */ - rt_device_init_all(); /* init application */ rt_application_init(); diff --git a/bsp/lm3s9b9x/applications/startup.c b/bsp/lm3s9b9x/applications/startup.c index 9f72d9c8df53333d85543fd4efc5b154500bd8fc..c13e80da50f6aa86af53bbd2b85fdc5420f24d3b 100644 --- a/bsp/lm3s9b9x/applications/startup.c +++ b/bsp/lm3s9b9x/applications/startup.c @@ -118,8 +118,6 @@ void rtthread_startup(void) /* init sd card device */ rt_hw_sdcard_init(); #endif - /* init all device */ - rt_device_init_all(); /* init application */ rt_application_init(); diff --git a/bsp/lm4f232/applications/startup.c b/bsp/lm4f232/applications/startup.c index 4572ab350d66f79b02cdb5fac8c9dbd0dec3baf9..b22095f06ed87bb452518b346315f36713259874 100644 --- a/bsp/lm4f232/applications/startup.c +++ b/bsp/lm4f232/applications/startup.c @@ -118,8 +118,6 @@ void rtthread_startup(void) /* init sd card device */ rt_hw_sdcard_init(); #endif - /* init all device */ - rt_device_init_all(); /* init application */ rt_application_init(); diff --git a/bsp/lpc176x/applications/application.c b/bsp/lpc176x/applications/application.c index 3ea7c29034893b04d665f7df7da635ab5eb3f6d6..1fda158cb129f7f9e4e4ba40372648a61186fb79 100644 --- a/bsp/lpc176x/applications/application.c +++ b/bsp/lpc176x/applications/application.c @@ -19,14 +19,20 @@ #include #include "platform.h" -#ifdef RT_USING_COMPONENTS_INIT -#include -#endif #ifdef RT_USING_LWIP #include +#include +extern int lwip_system_init(void); #endif + #ifdef RT_USING_DFS #include +#include +#endif + +#ifdef RT_USING_FINSH +#include +#include #endif /* thread phase init */ @@ -38,21 +44,39 @@ void rt_init_thread_entry(void *parameter) #ifdef RT_USING_LWIP /* register Ethernet interface device */ lpc17xx_emac_hw_init(); -#endif -#ifdef RT_USING_COMPONENTS_INIT - /* initialization RT-Thread Components */ - rt_components_init(); + /* initialize lwip stack */ + /* register ethernetif device */ + eth_system_device_init(); + + /* initialize lwip system */ + lwip_system_init(); + rt_kprintf("TCP/IP initialized!\n"); #endif /* Filesystem Initialization */ #ifdef RT_USING_DFS + rt_hw_sdcard_init(); + + /* initialize the device file system */ + dfs_init(); + +#ifdef RT_USING_DFS_ELMFAT + /* initialize the elm chan FatFS file system*/ + elm_init(); +#endif + /* mount sd card fat partition 1 as root directory */ if (dfs_mount("sd0", "/", "elm", 0, 0) == 0) rt_kprintf("File System initialized!\n"); else rt_kprintf("File System init failed!\n"); #endif + +#ifdef RT_USING_FINSH + /* initialize finsh */ + finsh_system_init(); +#endif } int rt_application_init() diff --git a/bsp/lpc176x/applications/startup.c b/bsp/lpc176x/applications/startup.c index f332155b17dfad52d7b6843a6dec070a87c23ecc..9c08294569b00203c780c31f98490cc0e6cddd10 100644 --- a/bsp/lpc176x/applications/startup.c +++ b/bsp/lpc176x/applications/startup.c @@ -16,20 +16,13 @@ #include #include -#include "LPC17xx.h" -#include "board.h" - -#ifdef RT_USING_DFS -#include "sd.h" -#endif - /** - * @addtogroup LPC17 + * @addtogroup LPC176x */ /*@{*/ - -extern int rt_application_init(void); +#include +extern int rt_application_init(void); #ifdef __CC_ARM extern int Image$$RW_IRAM1$$ZI$$Limit; @@ -84,14 +77,6 @@ void rtthread_startup(void) /* initialize scheduler system */ rt_system_scheduler_init(); -#ifdef RT_USING_DEVICE -#ifdef RT_USING_DFS - rt_hw_sdcard_init(); -#endif - /* initialize all device */ - rt_device_init_all(); -#endif - /* initialize application */ rt_application_init(); diff --git a/bsp/lpc176x/rtconfig.h b/bsp/lpc176x/rtconfig.h index 8aefe475d37e84243270898531ac6fc4c499a2cd..07553e2470fb8abe14aa2de43cc18c2b52e0a208 100644 --- a/bsp/lpc176x/rtconfig.h +++ b/bsp/lpc176x/rtconfig.h @@ -78,7 +78,7 @@ // // -#define RT_USING_COMPONENTS_INIT +// #define RT_USING_COMPONENTS_INIT //
#define RT_USING_FINSH // diff --git a/bsp/lpc178x/applications/application.c b/bsp/lpc178x/applications/application.c index c5ab98da32a29bc24d290c56e3aec28478d35fb1..e2086fb4001f8b097e04a2d941762cacef0fe0fe 100644 --- a/bsp/lpc178x/applications/application.c +++ b/bsp/lpc178x/applications/application.c @@ -65,8 +65,6 @@ void rt_init_thread_entry(void *parameter) /* register ethernetif device */ lpc17xx_emac_hw_init(); - /* init all device */ - rt_device_init_all(); /* init lwip system */ lwip_sys_init(); @@ -78,13 +76,11 @@ void rt_init_thread_entry(void *parameter) { extern void rtgui_system_server_init(void); extern void application_init(void); - + rt_device_t lcd; /* init lcd */ rt_hw_lcd_init(); - /* re-init device driver */ - rt_device_init_all(); /* find lcd device */ lcd = rt_device_find("lcd"); diff --git a/bsp/lpc2148/applications/startup.c b/bsp/lpc2148/applications/startup.c index b0f72afd42f8cd275692808ed5087bbd85acdafe..5efc41fd80b71e7edfd7a1be32aa7878ba2a431e 100644 --- a/bsp/lpc2148/applications/startup.c +++ b/bsp/lpc2148/applications/startup.c @@ -100,9 +100,6 @@ void rtthread_startup(void) /* init hardware serial device */ rt_hw_serial_init(); - - /*init all registed devices*/ - rt_device_init_all(); #endif /* init application */ diff --git a/bsp/lpc408x/drivers/drv_uart.c b/bsp/lpc408x/drivers/drv_uart.c index 37213c0474a635eff539c809686a1e77c973c381..0b3756a5b93ec28e9201b252e61ed8b383974b3e 100644 --- a/bsp/lpc408x/drivers/drv_uart.c +++ b/bsp/lpc408x/drivers/drv_uart.c @@ -118,7 +118,6 @@ static const struct rt_uart_ops lpc_uart_ops = #if defined(RT_USING_UART0) /* UART0 device driver structure */ -struct serial_ringbuffer uart0_int_rx; struct lpc_uart uart0 = { UART_0, @@ -158,7 +157,7 @@ void UART0_IRQHandler(void) // Receive Data Available or Character time-out if ((tmp == UART_IIR_INTID_RDA) || (tmp == UART_IIR_INTID_CTI)) { - rt_hw_serial_isr(&serial0); + rt_hw_serial_isr(&serial0, RT_SERIAL_EVENT_RX_IND); } /* leave interrupt */ @@ -167,7 +166,6 @@ void UART0_IRQHandler(void) #endif #if defined(RT_USING_UART2) /* UART2 device driver structure */ -struct serial_ringbuffer uart2_int_rx; struct lpc_uart uart2 = { UART_2, @@ -207,7 +205,7 @@ void UART2_IRQHandler(void) // Receive Data Available or Character time-out if ((tmp == UART_IIR_INTID_RDA) || (tmp == UART_IIR_INTID_CTI)) { - rt_hw_serial_isr(&serial2); + rt_hw_serial_isr(&serial2, RT_SERIAL_EVENT_RX_IND); } /* leave interrupt */ @@ -227,9 +225,9 @@ void rt_hw_uart_init(void) config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; + config.bufsz = RT_SERIAL_RB_BUFSZ; serial0.ops = &lpc_uart_ops; - serial0.int_rx = &uart0_int_rx; serial0.config = config; /* @@ -259,9 +257,9 @@ void rt_hw_uart_init(void) config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; + config.bufsz = RT_SERIAL_RB_BUFSZ; serial2.ops = &lpc_uart_ops; - serial2.int_rx = &uart2_int_rx; serial2.config = config; /* diff --git a/bsp/lpc43xx/drivers/drv_uart.c b/bsp/lpc43xx/drivers/drv_uart.c index 867ee32bd57493066d52736b015aa9610eb257c9..58a385b8b1c56aeb6cf80be6ca0fddcace37fab9 100644 --- a/bsp/lpc43xx/drivers/drv_uart.c +++ b/bsp/lpc43xx/drivers/drv_uart.c @@ -97,7 +97,6 @@ static const struct rt_uart_ops lpc_uart_ops = #if defined(RT_USING_UART0) /* UART0 device driver structure */ -struct serial_ringbuffer uart0_int_rx; struct lpc_uart uart0 = { LPC_USART0, @@ -136,7 +135,7 @@ void UART0_IRQHandler(void) /* read the data to buffer */ while (uart->USART->LSR & UART_LSR_RDR) { - rt_hw_serial_isr(&serial0); + rt_hw_serial_isr(&serial0, RT_SERIAL_EVENT_RX_IND); } break; @@ -150,7 +149,6 @@ void UART0_IRQHandler(void) #endif #if defined(RT_USING_UART2) /* UART2 device driver structure */ -struct serial_ringbuffer uart2_int_rx; struct lpc_uart uart2 = { LPC_USART2, @@ -189,7 +187,7 @@ void UART2_IRQHandler(void) /* read the data to buffer */ while (uart->USART->LSR & UART_LSR_RDR) { - rt_hw_serial_isr(&serial0); + rt_hw_serial_isr(&serial0, RT_SERIAL_EVENT_RX_IND); } break; @@ -214,9 +212,9 @@ void rt_hw_uart_init(void) config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; + config.bufsz = RT_SERIAL_RB_BUFSZ; serial0.ops = &lpc_uart_ops; - serial0.int_rx = &uart0_int_rx; serial0.config = config; /* Enable GPIO register interface clock */ @@ -256,7 +254,7 @@ void rt_hw_uart_init(void) /* register UART1 device */ rt_hw_serial_register(&serial0, "uart0", - RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, uart); #endif #ifdef RT_USING_UART2 @@ -267,9 +265,9 @@ void rt_hw_uart_init(void) config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; + config.bufsz = RT_SERIAL_RB_BUFSZ; serial2.ops = &lpc_uart_ops; - serial2.int_rx = &uart2_int_rx; serial2.config = config; /* Enable GPIO register interface clock */ @@ -309,7 +307,7 @@ void rt_hw_uart_init(void) /* register UART1 device */ rt_hw_serial_register(&serial2, "uart2", - RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, uart); #endif } diff --git a/bsp/ls1bdev/applications/application.c b/bsp/ls1bdev/applications/application.c index d010f0f220714b7f8aa94820d3183f8dd7d0f2ce..db345a1bb6c853695aff41d1848ff06017738b9f 100644 --- a/bsp/ls1bdev/applications/application.c +++ b/bsp/ls1bdev/applications/application.c @@ -33,14 +33,11 @@ void rt_init_thread_entry(void *parameter) /* init Display Controller */ rt_hw_dc_init(); - - /* re-init device driver */ - rt_device_init_all(); - + /* find Display Controller device */ dc = rt_device_find("dc"); - - /* set Display Controller device as rtgui graphic driver */ + + /* set Display Controller device as rtgui graphic driver */ rtgui_graphic_set_device(dc); } #endif @@ -59,7 +56,7 @@ int rt_application_init(void) tid = rt_thread_create("init", rt_init_thread_entry, RT_NULL, 4096, 8, 20); - if (tid != RT_NULL) + if (tid != RT_NULL) rt_thread_startup(tid); return 0; diff --git a/bsp/ls1bdev/applications/startup.c b/bsp/ls1bdev/applications/startup.c index 36ec17e46c7a38942d86cb88ab5d6ad2f7b089a3..befa929d30bd5ec812e6fd88166119f2eb0dd0d1 100644 --- a/bsp/ls1bdev/applications/startup.c +++ b/bsp/ls1bdev/applications/startup.c @@ -64,11 +64,6 @@ void rtthread_startup(void) /* init scheduler system */ rt_system_scheduler_init(); -#ifdef RT_USING_DEVICE - /* init all device */ - rt_device_init_all(); -#endif - /* init application */ rt_application_init(); @@ -85,7 +80,7 @@ void rtthread_startup(void) rt_system_scheduler_start(); /* never reach here */ - return; + return ; } /*@}*/ diff --git a/bsp/ls1bdev/ls1b_ram.lds b/bsp/ls1bdev/ls1b_ram.lds index 28a6cef00651b2762a768e153f16ad0f88334e18..95fb2496f814210761e169d8e0c368bba04967b3 100644 --- a/bsp/ls1bdev/ls1b_ram.lds +++ b/bsp/ls1bdev/ls1b_ram.lds @@ -50,7 +50,7 @@ SECTIONS . = ALIGN(4); __rt_init_start = .; KEEP(*(SORT(.rti_fn*))) - __rt_init_end = .; + __rt_init_end = .; . = ALIGN(4); } diff --git a/bsp/m16c62p/applications/startup.c b/bsp/m16c62p/applications/startup.c index 3857b6cdad4dc78dfecc4b5c40363519d71b3bdb..a73fcd90ea3b0ad871f0ee950986b2918aece479 100644 --- a/bsp/m16c62p/applications/startup.c +++ b/bsp/m16c62p/applications/startup.c @@ -68,11 +68,6 @@ void rtthread_startup(void) /* init scheduler system */ rt_system_scheduler_init(); - -#ifdef RT_USING_DEVICE - /* init all device */ - rt_device_init_all(); -#endif /* init application */ rt_application_init(); diff --git a/bsp/mb9bf500r/application.c b/bsp/mb9bf500r/application.c index fe17f240ca0ce7fec48f2fd8ea03258c8ad09482..ff22c008b1de176ab043c621835a240f0f233c7b 100644 --- a/bsp/mb9bf500r/application.c +++ b/bsp/mb9bf500r/application.c @@ -44,10 +44,7 @@ void rt_init_thread_entry(void *parameter) rt_hw_adc_init(); rt_hw_lcd_init(); rt_hw_cpu_init(); - - /* re-init device driver */ - rt_device_init_all(); - + #ifdef RT_USING_RTGUI extern void rtgui_system_server_init(void); diff --git a/bsp/mb9bf506r/applications/startup.c b/bsp/mb9bf506r/applications/startup.c index ab838c4fe3805efafab453fe7e779f7750dcf3fa..9076d572d6a76ef00a383cfd9c703a1b88136990 100644 --- a/bsp/mb9bf506r/applications/startup.c +++ b/bsp/mb9bf506r/applications/startup.c @@ -59,13 +59,9 @@ void rtthread_startup(void) rt_system_scheduler_init(); #ifdef RT_USING_DEVICE -#ifdef RT_USING_DFS -#ifdef RT_USING_DFS_UFFS +#if defined(RT_USING_DFS) && defined(RT_USING_DFS_UFFS) rt_hw_nand_init(); #endif -#endif - /* initialize all device */ - rt_device_init_all(); #endif /* initialize application */ @@ -91,7 +87,7 @@ int main(void) { /* disable interrupt first */ rt_hw_interrupt_disable(); - + /* startup RT-Thread RTOS */ rtthread_startup(); diff --git a/bsp/mb9bf506r/drivers/fm3_uart.c b/bsp/mb9bf506r/drivers/fm3_uart.c index 51fb820ed8acdbcf342a82f570cbff50a0575b53..2c82afd288ca9e0d11c9dbc481b9e42a1de8792a 100644 --- a/bsp/mb9bf506r/drivers/fm3_uart.c +++ b/bsp/mb9bf506r/drivers/fm3_uart.c @@ -20,7 +20,6 @@ #if (defined(RT_USING_UART0_0) || defined(RT_USING_UART0_1)) /* UART0 device driver structure */ -struct serial_ringbuffer uart0_int_rx; struct uart03_device uart0 = { FM3_MFS0_UART, @@ -33,7 +32,7 @@ void MFS0RX_IRQHandler(void) { /* enter interrupt */ rt_interrupt_enter(); - rt_hw_serial_isr(&serial0); + rt_hw_serial_isr(&serial0, RT_SERIAL_EVENT_RX_IND); /* leave interrupt */ rt_interrupt_leave(); } @@ -41,7 +40,6 @@ void MFS0RX_IRQHandler(void) #if (defined(RT_USING_UART1_0) || defined(RT_USING_UART1_1)) /* UART1 device driver structure */ -struct serial_ringbuffer uart1_int_rx; struct uart03_device uart1 = { FM3_MFS1_UART, @@ -54,7 +52,7 @@ void MFS1RX_IRQHandler(void) { /* enter interrupt */ rt_interrupt_enter(); - rt_hw_serial_isr(&serial1); + rt_hw_serial_isr(&serial1, RT_SERIAL_EVENT_RX_IND); /* leave interrupt */ rt_interrupt_leave(); } @@ -62,7 +60,6 @@ void MFS1RX_IRQHandler(void) #if (defined(RT_USING_UART2_0) || defined(RT_USING_UART2_1) || defined(RT_USING_UART2_2)) /* UART2 device driver structure */ -struct serial_ringbuffer uart2_int_rx; struct uart03_device uart2 = { FM3_MFS2_UART, @@ -75,7 +72,7 @@ void MFS2RX_IRQHandler(void) { /* enter interrupt */ rt_interrupt_enter(); - rt_hw_serial_isr(&serial2); + rt_hw_serial_isr(&serial2, RT_SERIAL_EVENT_RX_IND); /* leave interrupt */ rt_interrupt_leave(); } @@ -83,7 +80,6 @@ void MFS2RX_IRQHandler(void) #if (defined(RT_USING_UART3_0) || defined(RT_USING_UART3_1) || defined(RT_USING_UART3_2)) /* UART3 device driver structure */ -struct serial_ringbuffer uart3_int_rx; struct uart03_device uart3 = { FM3_MFS3_UART, @@ -96,7 +92,7 @@ void MFS3RX_IRQHandler(void) { /* enter interrupt */ rt_interrupt_enter(); - rt_hw_serial_isr(&serial3); + rt_hw_serial_isr(&serial3, RT_SERIAL_EVENT_RX_IND); /* leave interrupt */ rt_interrupt_leave(); } @@ -104,7 +100,6 @@ void MFS3RX_IRQHandler(void) #if (defined(RT_USING_UART4_0) || defined(RT_USING_UART4_1) || defined(RT_USING_UART4_2)) /* UART4 device driver structure */ -struct serial_ringbuffer uart4_int_rx; struct uart47_device uart4 = { FM3_MFS4_UART, @@ -118,7 +113,7 @@ void MFS4RX_IRQHandler(void) { /* enter interrupt */ rt_interrupt_enter(); - rt_hw_serial_isr(&serial4); + rt_hw_serial_isr(&serial4, RT_SERIAL_EVENT_RX_IND); /* leave interrupt */ rt_interrupt_leave(); } @@ -126,7 +121,6 @@ void MFS4RX_IRQHandler(void) #if (defined(RT_USING_UART5_0) || defined(RT_USING_UART5_1) || defined(RT_USING_UART5_2)) /* UART5 device driver structure */ -struct serial_ringbuffer uart5_int_rx; struct uart47_device uart5 = { FM3_MFS5_UART, @@ -140,7 +134,7 @@ void MFS5RX_IRQHandler(void) { /* enter interrupt */ rt_interrupt_enter(); - rt_hw_serial_isr(&serial5); + rt_hw_serial_isr(&serial5, RT_SERIAL_EVENT_RX_IND); /* leave interrupt */ rt_interrupt_leave(); } @@ -148,7 +142,6 @@ void MFS5RX_IRQHandler(void) #if (defined(RT_USING_UART6_0) || defined(RT_USING_UART6_1)) /* UART6 device driver structure */ -struct serial_ringbuffer uart6_int_rx; struct uart47_device uart6 = { FM3_MFS6_UART, @@ -162,7 +155,7 @@ void MFS6RX_IRQHandler(void) { /* enter interrupt */ rt_interrupt_enter(); - rt_hw_serial_isr(&serial6); + rt_hw_serial_isr(&serial6, RT_SERIAL_EVENT_RX_IND); /* leave interrupt */ rt_interrupt_leave(); } @@ -170,7 +163,6 @@ void MFS6RX_IRQHandler(void) #if (defined(RT_USING_UART7_0) || defined(RT_USING_UART7_1)) /* UART7 device driver structure */ -struct serial_ringbuffer uart7_int_rx; struct uart47_device uart7 = { FM3_MFS7_UART, @@ -184,7 +176,7 @@ void MFS7RX_IRQHandler(void) { /* enter interrupt */ rt_interrupt_enter(); - rt_hw_serial_isr(&serial7); + rt_hw_serial_isr(&serial7, RT_SERIAL_EVENT_RX_IND); /* leave interrupt */ rt_interrupt_leave(); } @@ -796,9 +788,9 @@ void rt_hw_serial_init(void) config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; + config.bufsz = RT_SERIAL_RB_BUFSZ; serial0.ops = &uart03_ops; - serial0.int_rx = &uart0_int_rx; serial0.config = config; /* register UART0 device */ @@ -814,9 +806,9 @@ void rt_hw_serial_init(void) config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; + config.bufsz = RT_SERIAL_RB_BUFSZ; serial1.ops = &uart03_ops; - serial1.int_rx = &uart1_int_rx; serial1.config = config; /* register UART1 device */ @@ -833,9 +825,9 @@ void rt_hw_serial_init(void) config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; + config.bufsz = RT_SERIAL_RB_BUFSZ; serial2.ops = &uart03_ops; - serial2.int_rx = &uart2_int_rx; serial2.config = config; /* register UART2 device */ @@ -852,9 +844,9 @@ void rt_hw_serial_init(void) config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; + config.bufsz = RT_SERIAL_RB_BUFSZ; serial3.ops = &uart03_ops; - serial3.int_rx = &uart3_int_rx; serial3.config = config; /* register UART3 device */ @@ -871,9 +863,9 @@ void rt_hw_serial_init(void) config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; + config.bufsz = RT_SERIAL_RB_BUFSZ; serial4.ops = &uart47_ops; - serial4.int_rx = &uart4_int_rx; serial4.config = config; /* register UART4 device */ @@ -890,9 +882,9 @@ void rt_hw_serial_init(void) config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; + config.bufsz = RT_SERIAL_RB_BUFSZ; serial5.ops = &uart47_ops; - serial5.int_rx = &uart5_int_rx; serial5.config = config; /* register UART5 device */ @@ -909,9 +901,9 @@ void rt_hw_serial_init(void) config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; + config.bufsz = RT_SERIAL_RB_BUFSZ; serial6.ops = &uart47_ops; - serial6.int_rx = &uart6_int_rx; serial6.config = config; /* register UART6 device */ @@ -928,9 +920,9 @@ void rt_hw_serial_init(void) config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; + config.bufsz = RT_SERIAL_RB_BUFSZ; serial7.ops = &uart47_ops; - serial7.int_rx = &uart7_int_rx; serial7.config = config; /* register UART7 device */ diff --git a/bsp/microblaze/startup.c b/bsp/microblaze/startup.c index c98098c03e02732cc6fe407491fc735a2798116c..fdcf5a17135284b860508fe53b7bffcfd9c9e8c8 100755 --- a/bsp/microblaze/startup.c +++ b/bsp/microblaze/startup.c @@ -86,8 +86,6 @@ void rtthread_startup(void) #ifdef RT_USING_DEVICE /* init hardware serial device */ rt_hw_serial_init(); - /* init all device */ - rt_device_init_all(); #endif /* init application */ diff --git a/bsp/mini2440/application.c b/bsp/mini2440/application.c index 4f911980a5de427ff821128745ee39b3e120d42b..fe2626a827df3cb508e7b716b8c815faf1afecbf 100644 --- a/bsp/mini2440/application.c +++ b/bsp/mini2440/application.c @@ -151,9 +151,6 @@ void rt_init_thread_entry(void *parameter) /* init keypad */ rt_hw_key_init(); - - /* re-init device driver */ - rt_device_init_all(); /* find lcd device */ lcd = rt_device_find("lcd"); @@ -175,9 +172,6 @@ void rt_init_thread_entry(void *parameter) /* register ethernetif device */ rt_hw_dm9000_init(); - /* re-init device driver */ - rt_device_init_all(); - /* init lwip system */ lwip_sys_init(); rt_kprintf("TCP/IP initialized!\n"); @@ -197,9 +191,6 @@ void rt_init_thread_entry(void *parameter) /* init keypad */ rt_hw_key_init(); - /* re-init device driver */ - rt_device_init_all(); - /* create ftk thread */ ftk_thread = rt_thread_create("ftk", rt_ftk_thread_entry, RT_NULL, diff --git a/bsp/mini2440/startup.c b/bsp/mini2440/startup.c index cf8ff261c256ed03a527170c1f1827227735abfd..349d5f68f0affbbb33e83820d037034b66683418 100644 --- a/bsp/mini2440/startup.c +++ b/bsp/mini2440/startup.c @@ -126,9 +126,6 @@ void rtthread_startup(void) /* rtc init */ rt_hw_rtc_init(); - - /*init all registed devices */ - rt_device_init_all(); #endif /* init application */ diff --git a/bsp/mini4020/applications/startup.c b/bsp/mini4020/applications/startup.c index 852b9dc89785a44e410a501e0c32a88c93ec0f87..bb43044a3990a2b87e5734bec23f039552340162 100644 --- a/bsp/mini4020/applications/startup.c +++ b/bsp/mini4020/applications/startup.c @@ -79,9 +79,6 @@ void rtthread_startup() eth_system_device_init(); rt_hw_dm9161_init(); #endif - - /*init all registed devices */ - rt_device_init_all(); #endif /* init application */ @@ -108,10 +105,8 @@ void rtthread_startup() int main() { - rt_uint32_t UNUSED level; - /* disable interrupt first */ - level = rt_hw_interrupt_disable(); + rt_hw_interrupt_disable(); /* startup RT-Thread RTOS */ rtthread_startup(); diff --git a/bsp/realview-a8/drivers/serial.c b/bsp/realview-a8/drivers/serial.c index 0af03b2759fe64c1045ac1681b40cd0b4adce6f0..011d10fb99bfe6765cb3226e7b15026b830ad0e5 100644 --- a/bsp/realview-a8/drivers/serial.c +++ b/bsp/realview-a8/drivers/serial.c @@ -58,7 +58,7 @@ static void rt_hw_uart_isr(int irqno, void *param) { struct rt_serial_device *serial = (struct rt_serial_device *)param; - rt_hw_serial_isr(serial); + rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND); } static rt_err_t uart_configure(struct rt_serial_device *serial, struct serial_configure *cfg) @@ -131,7 +131,6 @@ static const struct rt_uart_ops _uart_ops = #ifdef RT_USING_UART0 /* UART device driver structure */ -static struct serial_ringbuffer _uart0_int_rx; static struct hw_uart_device _uart0_device = { REALVIEW_UART0_BASE, @@ -142,7 +141,6 @@ static struct rt_serial_device _serial0; #ifdef RT_USING_UART1 /* UART1 device driver structure */ -static struct serial_ringbuffer _uart1_int_rx; static struct hw_uart_device _uart1_device = { REALVIEW_UART1_BASE, @@ -167,7 +165,8 @@ int rt_hw_uart_init(void) config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; - + config.bufsz = RT_SERIAL_RB_BUFSZ; + #ifdef RT_USING_UART0 uart = &_uart0_device; #ifdef RT_USING_VMM @@ -175,12 +174,11 @@ int rt_hw_uart_init(void) #endif _serial0.ops = &_uart_ops; - _serial0.int_rx = &_uart0_int_rx; _serial0.config = config; /* register UART1 device */ rt_hw_serial_register(&_serial0, "uart0", - RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, uart); /* enable Rx and Tx of UART */ UART_CR(uart->hw_base) = (1 << 0) | (1 << 8) | (1 << 9); @@ -192,12 +190,11 @@ int rt_hw_uart_init(void) uart->hw_base = vmm_find_iomap("UART1"); #endif _serial1.ops = &_uart_ops; - _serial1.int_rx = &_uart1_int_rx; _serial1.config = config; /* register UART1 device */ rt_hw_serial_register(&_serial1, "uart1", - RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, uart); + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, uart); /* enable Rx and Tx of UART */ UART_CR(uart->hw_base) = (1 << 0) | (1 << 8) | (1 << 9); #endif diff --git a/bsp/rm48x50/drivers/drv_uart.c b/bsp/rm48x50/drivers/drv_uart.c index 3f0237e64851b2335e489c2c7f0b87ea937e747d..d42a52bc6b6ef402daf23c7cb8283aa2bd6c55f0 100644 --- a/bsp/rm48x50/drivers/drv_uart.c +++ b/bsp/rm48x50/drivers/drv_uart.c @@ -178,11 +178,10 @@ static const struct rt_uart_ops _sci_ops = static void _irq_wrapper(int vector, void *param) { - rt_hw_serial_isr((struct rt_serial_device*)param); + rt_hw_serial_isr((struct rt_serial_device*)param, RT_SERIAL_EVENT_RX_IND); } static struct rt_serial_device _sci2_serial; -static struct serial_ringbuffer _sci2_int_rx; void rt_hw_uart_init(void) { @@ -195,9 +194,9 @@ void rt_hw_uart_init(void) config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; + config.bufsz = RT_SERIAL_RB_BUFSZ; _sci2_serial.ops = &_sci_ops; - _sci2_serial.int_rx = &_sci2_int_rx; _sci2_serial.config = config; rt_hw_serial_register(&_sci2_serial, "sci2", @@ -208,3 +207,4 @@ void rt_hw_uart_init(void) rt_hw_interrupt_install(SCI_INT_VEC, _irq_wrapper, &_sci2_serial, "sci2"); rt_hw_interrupt_umask(SCI_INT_VEC); } + diff --git a/bsp/sam7x/applications/startup.c b/bsp/sam7x/applications/startup.c index 770573910ff58c80e1f76ae15f54a827c962b62f..441f41385fcf9159f52dc57d68eb58131f8ead0c 100644 --- a/bsp/sam7x/applications/startup.c +++ b/bsp/sam7x/applications/startup.c @@ -116,9 +116,6 @@ void rtthread_startup(void) #ifdef RT_USING_DFS rt_hw_sdcard_init(); #endif - - /*init all registed devices*/ - rt_device_init_all(); #endif /* init application */ diff --git a/bsp/sep6200/application/startup.c b/bsp/sep6200/application/startup.c index 6c9d390fa2956ed0a4d856e2b8dd1153425d12e4..1514b1114bd7b62080f69dc2ad5b72e9e77e359d 100644 --- a/bsp/sep6200/application/startup.c +++ b/bsp/sep6200/application/startup.c @@ -78,20 +78,6 @@ void rtthread_startup() /* init scheduler system */ rt_system_scheduler_init(); -#ifdef RT_USING_DEVICE - -#ifdef RT_USING_DFS - /* Not implemented */ -#endif - -#ifdef RT_USING_LWIP - /* Not implemented */ -#endif - - /*init all registed devices */ - rt_device_init_all(); -#endif - /* init application */ rt_application_init(); diff --git a/bsp/simulator/applications/startup.c b/bsp/simulator/applications/startup.c index 2b21c69016648c2af0d99267c042a6c0e4d70f18..bd6502da6e5c0dcdbed87eee72c95392acffd977 100644 --- a/bsp/simulator/applications/startup.c +++ b/bsp/simulator/applications/startup.c @@ -58,10 +58,6 @@ void rtthread_startup(void) /* init scheduler system */ rt_system_scheduler_init(); - /* init all device */ -#ifdef RT_USING_DEVICE - rt_device_init_all(); -#endif /* init application */ rt_application_init(); diff --git a/bsp/stm32f0x/applications/startup.c b/bsp/stm32f0x/applications/startup.c index 52d473b8bcbe3014f087bde9549d407d0bf7a1df..b3ace8038cb45eee20ea17f59eb07414c9196daa 100644 --- a/bsp/stm32f0x/applications/startup.c +++ b/bsp/stm32f0x/applications/startup.c @@ -86,11 +86,6 @@ void rtthread_startup(void) /* init scheduler system */ rt_system_scheduler_init(); -#ifdef RT_USING_DEVICE - /* init all device */ - rt_device_init_all(); -#endif - /* init application */ rt_application_init(); diff --git a/bsp/stm32f0x/drivers/usart.c b/bsp/stm32f0x/drivers/usart.c index f7784ce5566a71dc0903852fb6f2f9e0e339d3fc..7a7d3a82308b157ee1b5f73fcec39d9bce2cd368 100644 --- a/bsp/stm32f0x/drivers/usart.c +++ b/bsp/stm32f0x/drivers/usart.c @@ -134,7 +134,6 @@ static const struct rt_uart_ops stm32_uart_ops = #if defined(RT_USING_UART1) /* UART1 device driver structure */ -struct serial_ringbuffer uart1_int_rx; struct stm32_uart uart1 = { USART1, @@ -152,7 +151,7 @@ void USART1_IRQHandler(void) rt_interrupt_enter(); if(USART_GetITStatus(uart->uart_device, USART_IT_RXNE) != RESET) { - rt_hw_serial_isr(&serial1); + rt_hw_serial_isr(&serial1, RT_SERIAL_EVENT_RX_IND); /* clear interrupt */ USART_ClearITPendingBit(uart->uart_device, USART_IT_RXNE); } @@ -169,7 +168,6 @@ void USART1_IRQHandler(void) #if defined(RT_USING_UART2) /* UART2 device driver structure */ -struct serial_ringbuffer uart2_int_rx; struct stm32_uart uart2 = { USART2, @@ -187,7 +185,7 @@ void USART2_IRQHandler(void) rt_interrupt_enter(); if(USART_GetITStatus(uart->uart_device, USART_IT_RXNE) != RESET) { - rt_hw_serial_isr(&serial2); + rt_hw_serial_isr(&serial2, RT_SERIAL_EVENT_RX_IND); /* clear interrupt */ USART_ClearITPendingBit(uart->uart_device, USART_IT_RXNE); } @@ -281,14 +279,13 @@ void rt_hw_usart_init(void) config.baud_rate = BAUD_RATE_115200; serial1.ops = &stm32_uart_ops; - serial1.int_rx = &uart1_int_rx; serial1.config = config; NVIC_Configuration(&uart1); /* register UART1 device */ rt_hw_serial_register(&serial1, "uart1", - RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, uart); #endif /* RT_USING_UART1 */ @@ -297,7 +294,6 @@ void rt_hw_usart_init(void) config.baud_rate = BAUD_RATE_115200; serial2.ops = &stm32_uart_ops; - serial2.int_rx = &uart2_int_rx; serial2.config = config; NVIC_Configuration(&uart2); diff --git a/bsp/stm32f107/applications/application.c b/bsp/stm32f107/applications/application.c index 025451d32e64556d2f8f83499da37906ec4453bc..ef28641004f7d766acb4aa3ff36832e94aa8db2b 100644 --- a/bsp/stm32f107/applications/application.c +++ b/bsp/stm32f107/applications/application.c @@ -22,11 +22,20 @@ #ifdef RT_USING_DFS #include +#include +#include #endif -#ifdef RT_USING_COMPONENTS_INIT -#include -#endif /* RT_USING_COMPONENTS_INIT */ +#ifdef RT_USING_LWIP +#include +#include +extern int lwip_system_init(void); +#endif + +#ifdef RT_USING_FINSH +#include +#include +#endif void rt_init_thread_entry(void* parameter) { @@ -35,45 +44,50 @@ void rt_init_thread_entry(void* parameter) rt_platform_init(); } -#ifdef RT_USING_COMPONENTS_INIT - /* initialization RT-Thread Components */ - rt_components_init(); -#endif - /* Filesystem Initialization */ #if defined(RT_USING_DFS) && defined(RT_USING_DFS_ELMFAT) + /* initialize the device file system */ + dfs_init(); + + /* initialize the elm chan FatFS file system*/ + elm_init(); + + /* mount sd card fat partition 1 as root directory */ + if (dfs_mount("sd0", "/", "elm", 0, 0) == 0) + { + rt_kprintf("File System initialized!\n"); + } + else { - /* mount sd card fat partition 1 as root directory */ - if (dfs_mount("sd0", "/", "elm", 0, 0) == 0) - { - rt_kprintf("File System initialized!\n"); - } - else - { - rt_kprintf("File System initialzation failed!\n"); - } + rt_kprintf("File System initialzation failed!\n"); } #endif /* RT_USING_DFS && RT_USING_DFS_ELMFAT */ + +#ifdef RT_USING_LWIP + /* initialize lwip stack */ + /* register ethernetif device */ + eth_system_device_init(); + + /* initialize lwip system */ + lwip_system_init(); + rt_kprintf("TCP/IP initialized!\n"); +#endif + +#ifdef RT_USING_FINSH + /* initialize finsh */ + finsh_system_init(); + finsh_set_device(RT_CONSOLE_DEVICE_NAME); +#endif } int rt_application_init(void) { - rt_thread_t init_thread; + rt_thread_t tid; -#if (RT_THREAD_PRIORITY_MAX == 32) - init_thread = rt_thread_create("init", - rt_init_thread_entry, RT_NULL, - 2048, 8, 20); -#else - init_thread = rt_thread_create("init", - rt_init_thread_entry, RT_NULL, - 2048, 80, 20); -#endif - - if (init_thread != RT_NULL) - { - rt_thread_startup(init_thread); - } + tid = rt_thread_create("init", + rt_init_thread_entry, RT_NULL, + 2048, RT_THREAD_PRIORITY_MAX/3, 20); + if (tid != RT_NULL) rt_thread_startup(tid); return 0; } diff --git a/bsp/stm32f107/applications/startup.c b/bsp/stm32f107/applications/startup.c index eae71a17e68b0c02266988f152e5eeb59c2093c4..9041d590022759b54b8c00b04740ad6e9ac3e011 100644 --- a/bsp/stm32f107/applications/startup.c +++ b/bsp/stm32f107/applications/startup.c @@ -81,9 +81,6 @@ void rtthread_startup(void) /* init scheduler system */ rt_system_scheduler_init(); - /* init all device */ - rt_device_init_all(); - /* init application */ rt_application_init(); diff --git a/bsp/stm32f107/rtconfig.h b/bsp/stm32f107/rtconfig.h index 7450367dbf5f48312484b15e45de0d5e2a31ed0c..7f308c103f99396c092dd5f69c0547fe9caf40c6 100644 --- a/bsp/stm32f107/rtconfig.h +++ b/bsp/stm32f107/rtconfig.h @@ -69,8 +69,8 @@ #define RT_CONSOLE_DEVICE_NAME "uart1" //
-//
-#define RT_USING_COMPONENTS_INIT +//
+// #define RT_USING_COMPONENTS_INIT //
/* SECTION: finsh, a C-Express shell */ diff --git a/bsp/stm32f10x/applications/application.c b/bsp/stm32f10x/applications/application.c index d57bb4e4c02c2ed8b0479692b198b84322d2ffdf..58720cf0f11ca1192ea02a699f103d5ae9c57454 100644 --- a/bsp/stm32f10x/applications/application.c +++ b/bsp/stm32f10x/applications/application.c @@ -122,9 +122,6 @@ void rt_init_thread_entry(void* parameter) /* init touch panel */ rtgui_touch_hw_init(); - /* re-init device driver */ - rt_device_init_all(); - /* find lcd device */ lcd = rt_device_find("lcd"); diff --git a/bsp/stm32f10x/drivers/usart.c b/bsp/stm32f10x/drivers/usart.c index ae47db3a14f1b6127a7dc788eaa44b00f33c6bed..bbaf4ec03274a9a2a867c160055a0f18319f015d 100644 --- a/bsp/stm32f10x/drivers/usart.c +++ b/bsp/stm32f10x/drivers/usart.c @@ -137,7 +137,6 @@ static const struct rt_uart_ops stm32_uart_ops = #if defined(RT_USING_UART1) /* UART1 device driver structure */ -struct serial_ringbuffer uart1_int_rx; struct stm32_uart uart1 = { USART1, @@ -155,7 +154,7 @@ void USART1_IRQHandler(void) rt_interrupt_enter(); if(USART_GetITStatus(uart->uart_device, USART_IT_RXNE) != RESET) { - rt_hw_serial_isr(&serial1); + rt_hw_serial_isr(&serial1, RT_SERIAL_EVENT_RX_IND); /* clear interrupt */ USART_ClearITPendingBit(uart->uart_device, USART_IT_RXNE); } @@ -172,7 +171,6 @@ void USART1_IRQHandler(void) #if defined(RT_USING_UART2) /* UART1 device driver structure */ -struct serial_ringbuffer uart2_int_rx; struct stm32_uart uart2 = { USART2, @@ -190,7 +188,7 @@ void USART2_IRQHandler(void) rt_interrupt_enter(); if(USART_GetITStatus(uart->uart_device, USART_IT_RXNE) != RESET) { - rt_hw_serial_isr(&serial2); + rt_hw_serial_isr(&serial2, RT_SERIAL_EVENT_RX_IND); /* clear interrupt */ USART_ClearITPendingBit(uart->uart_device, USART_IT_RXNE); } @@ -207,7 +205,6 @@ void USART2_IRQHandler(void) #if defined(RT_USING_UART3) /* UART1 device driver structure */ -struct serial_ringbuffer uart3_int_rx; struct stm32_uart uart3 = { USART3, @@ -225,7 +222,7 @@ void USART3_IRQHandler(void) rt_interrupt_enter(); if(USART_GetITStatus(uart->uart_device, USART_IT_RXNE) != RESET) { - rt_hw_serial_isr(&serial3); + rt_hw_serial_isr(&serial3, RT_SERIAL_EVENT_RX_IND); /* clear interrupt */ USART_ClearITPendingBit(uart->uart_device, USART_IT_RXNE); } @@ -329,14 +326,13 @@ void rt_hw_usart_init(void) config.baud_rate = BAUD_RATE_115200; serial1.ops = &stm32_uart_ops; - serial1.int_rx = &uart1_int_rx; serial1.config = config; NVIC_Configuration(&uart1); /* register UART1 device */ rt_hw_serial_register(&serial1, "uart1", - RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, uart); #endif /* RT_USING_UART1 */ @@ -345,7 +341,6 @@ void rt_hw_usart_init(void) config.baud_rate = BAUD_RATE_115200; serial2.ops = &stm32_uart_ops; - serial2.int_rx = &uart2_int_rx; serial2.config = config; NVIC_Configuration(&uart2); @@ -362,7 +357,6 @@ void rt_hw_usart_init(void) config.baud_rate = BAUD_RATE_115200; serial3.ops = &stm32_uart_ops; - serial3.int_rx = &uart3_int_rx; serial3.config = config; NVIC_Configuration(&uart3); diff --git a/bsp/stm32f20x/applications/application.c b/bsp/stm32f20x/applications/application.c index 23c2bb817fa841ad7de10602d4e23bfef20aea89..b288a26bbba78453f1a80512f0afc56b6265e990 100644 --- a/bsp/stm32f20x/applications/application.c +++ b/bsp/stm32f20x/applications/application.c @@ -66,12 +66,9 @@ void rt_init_thread_entry(void* parameter) /* register ethernetif device */ eth_system_device_init(); - + /* initialize eth interface */ rt_hw_stm32_eth_init(); - - /* re-init device driver */ - rt_device_init_all(); /* init lwip system */ lwip_sys_init(); diff --git a/bsp/stm32f20x/applications/startup.c b/bsp/stm32f20x/applications/startup.c index dd9969168d78a2cdfdd3d38b116ebbc33472a3fe..d07e4ad5a56614cce99bdf0246dca69de932915e 100644 --- a/bsp/stm32f20x/applications/startup.c +++ b/bsp/stm32f20x/applications/startup.c @@ -107,9 +107,6 @@ void rtthread_startup(void) rt_hw_rtc_init(); - /* init all device */ - rt_device_init_all(); - /* init application */ rt_application_init(); diff --git a/bsp/stm32f40x/applications/application.c b/bsp/stm32f40x/applications/application.c index d4ad72f64d95fd98d347ff23792661151b80d185..2a01107f6b24f555815c5e324d20256c1346b308 100644 --- a/bsp/stm32f40x/applications/application.c +++ b/bsp/stm32f40x/applications/application.c @@ -34,8 +34,6 @@ void rt_init_thread_entry(void* parameter) eth_system_device_init(); rt_hw_stm32_eth_init(); - /* re-init device driver */ - rt_device_init_all(); /* init lwip system */ lwip_sys_init(); diff --git a/bsp/stm32f40x/applications/startup.c b/bsp/stm32f40x/applications/startup.c index d5d31fa5e1700820e230a7cb8beb85c875cd7608..e0547efb7823e2a90c1a655334ef9ac775d9d725 100644 --- a/bsp/stm32f40x/applications/startup.c +++ b/bsp/stm32f40x/applications/startup.c @@ -85,9 +85,6 @@ void rtthread_startup(void) /* init scheduler system */ rt_system_scheduler_init(); - /* init all device */ - rt_device_init_all(); - /* init application */ rt_application_init(); diff --git a/bsp/upd70f3454/applications/startup.c b/bsp/upd70f3454/applications/startup.c index f609fc7cbb95d81a5109bf999328724839311216..1a06957b045995d12564a0e937bb18268788bf9c 100644 --- a/bsp/upd70f3454/applications/startup.c +++ b/bsp/upd70f3454/applications/startup.c @@ -68,11 +68,6 @@ void rtthread_startup(void) /* init scheduler system */ rt_system_scheduler_init(); -#ifdef RT_USING_DEVICE - /* init all device */ - rt_device_init_all(); -#endif - /* init application */ rt_application_init(); diff --git a/bsp/wh44b0/startup.c b/bsp/wh44b0/startup.c index 1acafba54dd0b2f65b25ac77c41a89ddfde8f90a..2f8b4b5bfafd060d82b38497ae991b492b0a0cad 100644 --- a/bsp/wh44b0/startup.c +++ b/bsp/wh44b0/startup.c @@ -84,10 +84,6 @@ void rtthread_startup(void) rt_thread_idle_sethook(rt_hw_led_flash); #endif -#ifdef RT_USING_DEVICE - rt_device_init_all(); -#endif - /* init application */ rt_application_init(); diff --git a/bsp/xplorer4330/drivers/drv_uart.c b/bsp/xplorer4330/drivers/drv_uart.c index c8242277b2bb53f4a15acb19783af02dbe52ef0a..4fa489ea060e20686d5004a80bdb3c3ecb533e16 100644 --- a/bsp/xplorer4330/drivers/drv_uart.c +++ b/bsp/xplorer4330/drivers/drv_uart.c @@ -97,7 +97,6 @@ static const struct rt_uart_ops lpc_uart_ops = #if defined(RT_USING_UART0) /* UART0 device driver structure */ -struct serial_ringbuffer uart0_int_rx; struct lpc_uart uart0 = { LPC_USART0, @@ -136,7 +135,7 @@ void UART0_IRQHandler(void) /* read the data to buffer */ while (uart->USART->LSR & UART_LSR_RDR) { - rt_hw_serial_isr(&serial0); + rt_hw_serial_isr(&serial0, RT_SERIAL_EVENT_RX_IND); } break; @@ -150,7 +149,6 @@ void UART0_IRQHandler(void) #endif #if defined(RT_USING_UART2) /* UART2 device driver structure */ -struct serial_ringbuffer uart2_int_rx; struct lpc_uart uart2 = { LPC_USART2, @@ -189,7 +187,7 @@ void UART2_IRQHandler(void) /* read the data to buffer */ while (uart->USART->LSR & UART_LSR_RDR) { - rt_hw_serial_isr(&serial0); + rt_hw_serial_isr(&serial0, RT_SERIAL_EVENT_RX_IND); } break; @@ -214,9 +212,9 @@ void rt_hw_uart_init(void) config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; - + config.bufsz = RT_SERIAL_RB_BUFSZ; + serial0.ops = &lpc_uart_ops; - serial0.int_rx = &uart0_int_rx; serial0.config = config; /* Enable GPIO register interface clock */ @@ -256,7 +254,7 @@ void rt_hw_uart_init(void) /* register UART1 device */ rt_hw_serial_register(&serial0, "uart0", - RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, uart); #endif #ifdef RT_USING_UART2 @@ -267,9 +265,9 @@ void rt_hw_uart_init(void) config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; + config.bufsz = RT_SERIAL_RB_BUFSZ; serial2.ops = &lpc_uart_ops; - serial2.int_rx = &uart2_int_rx; serial2.config = config; /* Enable GPIO register interface clock */ @@ -309,7 +307,7 @@ void rt_hw_uart_init(void) /* register UART1 device */ rt_hw_serial_register(&serial2, "uart2", - RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, uart); #endif } diff --git a/bsp/zynq7000/drivers/uart.c b/bsp/zynq7000/drivers/uart.c index f10c48d3300af0d32730beac9c35ea3b680803e0..df4250b39951f52a8d6dab9dfa5bddf73067a6b6 100644 --- a/bsp/zynq7000/drivers/uart.c +++ b/bsp/zynq7000/drivers/uart.c @@ -98,7 +98,7 @@ static void rt_hw_uart_isr(int irqno, void *param) { struct rt_serial_device *serial = (struct rt_serial_device *)param; - rt_hw_serial_isr(serial); + rt_hw_serial_isr(serial, RT_SERIAL_EVENT_RX_IND); } static rt_err_t uart_configure(struct rt_serial_device *serial, struct serial_configure *cfg) @@ -267,9 +267,7 @@ static struct hw_uart_device _uart_device1 = .txmio = (rt_uint32_t*)(Zynq7000_SLCR_BASE+0x07C0), /* MIO48 */ }; -static struct serial_ringbuffer _uart_int_rx0; static struct rt_serial_device _serial0; -static struct serial_ringbuffer _uart_int_rx1; static struct rt_serial_device _serial1; int rt_hw_uart_init(void) @@ -282,21 +280,20 @@ int rt_hw_uart_init(void) config.parity = PARITY_NONE; config.stop_bits = STOP_BITS_1; config.invert = NRZ_NORMAL; + config.bufsz = RT_SERIAL_RB_BUFSZ; _serial0.ops = &_uart_ops; - _serial0.int_rx = &_uart_int_rx0; _serial0.config = config; _serial1.ops = &_uart_ops; - _serial1.int_rx = &_uart_int_rx1; _serial1.config = config; /* register uart device */ rt_hw_serial_register(&_serial0, "uart0", - RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, &_uart_device0); rt_hw_serial_register(&_serial1, "uart1", - RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, &_uart_device1); return 0; } diff --git a/components/drivers/include/drivers/serial.h b/components/drivers/include/drivers/serial.h index 965582073684795e2281beb4ac0706254433bbbb..bf2a25ae1e8a007c0e3a431783429c421f72bb72 100644 --- a/components/drivers/include/drivers/serial.h +++ b/components/drivers/include/drivers/serial.h @@ -70,6 +70,15 @@ #define RT_DEVICE_CTRL_CLR_INT 0x11 /* disable receive irq */ #define RT_DEVICE_CTRL_GET_INT 0x12 +#define RT_SERIAL_EVENT_RX_IND 0x01 /* Rx indication */ +#define RT_SERIAL_EVENT_TX_DONE 0x02 /* Tx complete */ +#define RT_SERIAL_EVENT_RX_DMADONE 0x03 /* Rx DMA transfer done */ +#define RT_SERIAL_EVENT_TX_DMADONE 0x04 /* Tx DMA transfer done */ +#define RT_SERIAL_EVENT_RX_TIMEOUT 0x05 /* Rx timeout */ + +#define RT_SERIAL_DMA_RX 0x01 +#define RT_SERIAL_DMA_TX 0x02 + #define RT_SERIAL_RX_INT 0x01 #define RT_SERIAL_TX_INT 0x02 @@ -89,24 +98,51 @@ PARITY_NONE, /* No parity */ \ BIT_ORDER_LSB, /* LSB first sent */ \ NRZ_NORMAL, /* Normal mode */ \ + RT_SERIAL_RB_BUFSZ, /* Buffer size */ \ 0 \ } -struct serial_ringbuffer -{ - rt_uint8_t buffer[RT_SERIAL_RB_BUFSZ]; - rt_uint16_t put_index, get_index; -}; - struct serial_configure { rt_uint32_t baud_rate; + rt_uint32_t data_bits :4; rt_uint32_t stop_bits :2; rt_uint32_t parity :2; rt_uint32_t bit_order :1; rt_uint32_t invert :1; - rt_uint32_t reserved :20; + rt_uint32_t bufsz :16; + rt_uint32_t reserved :4; +}; + +/* + * Serial FIFO mode + */ +struct rt_serial_rx_fifo +{ + /* software fifo */ + rt_uint8_t *buffer; + + rt_uint16_t put_index, get_index; +}; + +struct rt_serial_tx_fifo +{ + struct rt_completion completion; +}; + +/* + * Serial DMA mode + */ +struct rt_serial_rx_dma +{ + rt_bool_t activated; +}; + +struct rt_serial_tx_dma +{ + rt_bool_t activated; + struct rt_data_queue data_queue; }; struct rt_serial_device @@ -116,14 +152,8 @@ struct rt_serial_device const struct rt_uart_ops *ops; struct serial_configure config; - /* rx structure */ - struct serial_ringbuffer *int_rx; - /* tx structure */ - struct serial_ringbuffer *int_tx; - - struct rt_data_queue tx_dq; /* tx dataqueue */ - - volatile rt_bool_t dma_flag; /* dma transfer flag */ + void *serial_rx; + void *serial_tx; }; typedef struct rt_serial_device rt_serial_t; @@ -138,14 +168,15 @@ struct rt_uart_ops int (*putc)(struct rt_serial_device *serial, char c); int (*getc)(struct rt_serial_device *serial); - rt_size_t (*dma_transmit)(struct rt_serial_device *serial, const char *buf, rt_size_t size); + rt_size_t (*dma_transmit)(struct rt_serial_device *serial, const rt_uint8_t *buf, rt_size_t size, int direction); }; -void rt_hw_serial_isr(struct rt_serial_device *serial); -void rt_hw_serial_dma_tx_isr(struct rt_serial_device *serial); +void rt_hw_serial_isr(struct rt_serial_device *serial, int event); + rt_err_t rt_hw_serial_register(struct rt_serial_device *serial, const char *name, rt_uint32_t flag, void *data); #endif + diff --git a/components/drivers/serial/serial.c b/components/drivers/serial/serial.c index 61c03fa9551e5979ae89a2c1e61baa3c16302454..776316baf5568fe77afef9d2692f105a578691f1 100644 --- a/components/drivers/serial/serial.c +++ b/components/drivers/serial/serial.c @@ -25,104 +25,197 @@ * 2012-11-23 bernard fix compiler warning. * 2013-02-20 bernard use RT_SERIAL_RB_BUFSZ to define * the size of ring buffer. + * 2014-07-10 bernard rewrite serial framework */ #include #include #include -rt_inline void serial_ringbuffer_init(struct serial_ringbuffer *rbuffer) +/* + * Serial poll routines + */ +rt_inline int _serial_poll_rx(struct rt_serial_device *serial, rt_uint8_t *data, int length) { - rt_memset(rbuffer->buffer, 0, sizeof(rbuffer->buffer)); - rbuffer->put_index = 0; - rbuffer->get_index = 0; + int ch; + int size; + + RT_ASSERT(serial != RT_NULL); + size = length; + + while (length) + { + ch = serial->ops->getc(serial); + *data = ch; + data ++; length --; + + if (ch == '\n') break; + } + + return size - length; } -rt_inline void serial_ringbuffer_putc(struct serial_ringbuffer *rbuffer, - char ch) +rt_inline int _serial_poll_tx(struct rt_serial_device *serial, const rt_uint8_t *data, int length) { - rt_base_t level; - - /* disable interrupt */ - level = rt_hw_interrupt_disable(); - - rbuffer->buffer[rbuffer->put_index] = ch; - rbuffer->put_index = (rbuffer->put_index + 1) & (RT_SERIAL_RB_BUFSZ - 1); - - /* if the next position is read index, discard this 'read char' */ - if (rbuffer->put_index == rbuffer->get_index) - { - rbuffer->get_index = (rbuffer->get_index + 1) & (RT_SERIAL_RB_BUFSZ - 1); - } - - /* enable interrupt */ - rt_hw_interrupt_enable(level); + int size; + RT_ASSERT(serial != RT_NULL); + + size = length; + while (length) + { + /* + * to be polite with serial console add a line feed + * to the carriage return character + */ + if (*data == '\n' && (serial->parent.flag & RT_DEVICE_FLAG_STREAM)) + { + serial->ops->putc(serial, '\r'); + } + + serial->ops->putc(serial, *data); + + ++ data; + -- length; + } + + return size - length; } -rt_inline int serial_ringbuffer_putchar(struct serial_ringbuffer *rbuffer, - char ch) +/* + * Serial interrupt routines + */ +rt_inline int _serial_int_rx(struct rt_serial_device *serial, rt_uint8_t *data, int length) { - rt_base_t level; - rt_uint16_t next_index; - - /* disable interrupt */ - level = rt_hw_interrupt_disable(); - - next_index = (rbuffer->put_index + 1) & (RT_SERIAL_RB_BUFSZ - 1); - if (next_index != rbuffer->get_index) - { - rbuffer->buffer[rbuffer->put_index] = ch; - rbuffer->put_index = next_index; - } - else - { - /* enable interrupt */ - rt_hw_interrupt_enable(level); - - return -1; - } - - /* enable interrupt */ - rt_hw_interrupt_enable(level); - - return 1; + int size; + struct rt_serial_rx_fifo* rx_fifo; + + RT_ASSERT(serial != RT_NULL); + size = length; + + rx_fifo = (struct rt_serial_rx_fifo*) serial->serial_rx; + RT_ASSERT(rx_fifo != RT_NULL); + + /* read from software FIFO */ + while (length) + { + int ch; + rt_base_t level; + + /* disable interrupt */ + level = rt_hw_interrupt_disable(); + if (rx_fifo->get_index != rx_fifo->put_index) + { + ch = rx_fifo->buffer[rx_fifo->get_index]; + rx_fifo->get_index += 1; + if (rx_fifo->get_index >= serial->config.bufsz) rx_fifo->get_index = 0; + } + else + { + /* no data, enable interrupt and break out */ + rt_hw_interrupt_enable(level); + break; + } + + /* enable interrupt */ + rt_hw_interrupt_enable(level); + + *data = ch & 0xff; + data ++; length --; + } + + return size - length; } -rt_inline int serial_ringbuffer_getc(struct serial_ringbuffer *rbuffer) +rt_inline int _serial_int_tx(struct rt_serial_device *serial, const rt_uint8_t *data, int length) { - int ch; - rt_base_t level; - - ch = -1; - /* disable interrupt */ - level = rt_hw_interrupt_disable(); - if (rbuffer->get_index != rbuffer->put_index) - { - ch = rbuffer->buffer[rbuffer->get_index]; - rbuffer->get_index = (rbuffer->get_index + 1) & (RT_SERIAL_RB_BUFSZ - 1); - } - /* enable interrupt */ - rt_hw_interrupt_enable(level); - - return ch; + int size; + struct rt_serial_tx_fifo *tx; + + RT_ASSERT(serial != RT_NULL); + + size = length; + tx = (struct rt_serial_tx_fifo*) serial->serial_tx; + RT_ASSERT(tx != RT_NULL); + + while (length) + { + if (serial->ops->putc(serial, *(char*)data) == -1) + { + rt_completion_wait(&(tx->completion), RT_WAITING_FOREVER); + continue; + } + + data ++; length --; + } + + return size - length; } -rt_inline rt_uint32_t serial_ringbuffer_size(struct serial_ringbuffer *rbuffer) +/* + * Serial DMA routines + */ +rt_inline int _serial_dma_rx(struct rt_serial_device *serial, rt_uint8_t *data, int length) { - rt_uint32_t size; - rt_base_t level; - - level = rt_hw_interrupt_disable(); - size = (rbuffer->put_index - rbuffer->get_index) & (RT_SERIAL_RB_BUFSZ - 1); - rt_hw_interrupt_enable(level); + rt_base_t level; + int result = RT_EOK; + struct rt_serial_rx_dma *rx_dma; + + RT_ASSERT((serial != RT_NULL) && (data != RT_NULL)); + rx_dma = (struct rt_serial_rx_dma*)serial->serial_rx; + RT_ASSERT(rx_dma != RT_NULL); + + level = rt_hw_interrupt_disable(); + if (rx_dma->activated != RT_TRUE) + { + rx_dma->activated = RT_TRUE; + serial->ops->dma_transmit(serial, data, length, RT_SERIAL_DMA_RX); + } + else result = -RT_EBUSY; + rt_hw_interrupt_enable(level); + + if (result == RT_EOK) return length; + + rt_set_errno(result); + return 0; +} - return size; +rt_inline int _serial_dma_tx(struct rt_serial_device *serial, const rt_uint8_t *data, int length) +{ + rt_base_t level; + rt_err_t result; + struct rt_serial_tx_dma *tx_dma; + + tx_dma = (struct rt_serial_tx_dma*)(serial->serial_tx); + + result = rt_data_queue_push(&(tx_dma->data_queue), data, length, RT_WAITING_FOREVER); + if (result == RT_EOK) + { + level = rt_hw_interrupt_disable(); + if (tx_dma->activated != RT_TRUE) + { + tx_dma->activated = RT_TRUE; + rt_hw_interrupt_enable(level); + + /* make a DMA transfer */ + serial->ops->dma_transmit(serial, data, length, RT_SERIAL_DMA_TX); + } + else + { + rt_hw_interrupt_enable(level); + } + + return length; + } + else + { + rt_set_errno(result); + return 0; + } } /* RT-Thread Device Interface */ - /* - * This function initializes serial + * This function initializes serial device. */ static rt_err_t rt_serial_init(struct rt_device *dev) { @@ -132,58 +225,107 @@ static rt_err_t rt_serial_init(struct rt_device *dev) RT_ASSERT(dev != RT_NULL); serial = (struct rt_serial_device *)dev; - if (!(dev->flag & RT_DEVICE_FLAG_ACTIVATED)) - { - /* apply configuration */ - if (serial->ops->configure) - result = serial->ops->configure(serial, &serial->config); - - if (result != RT_EOK) - return result; - - if (dev->flag & RT_DEVICE_FLAG_INT_RX) - serial_ringbuffer_init(serial->int_rx); - - if (dev->flag & RT_DEVICE_FLAG_INT_TX) - { - /* not supported yet */ - /* - serial->ops->control(serial, RT_DEVICE_CTRL_SET_INT, (void *)RT_NULL); - serial_ringbuffer_init(serial->int_tx); - serial->int_sending_flag = RT_FALSE; - */ - } - - if (dev->flag & RT_DEVICE_FLAG_DMA_TX) - { - serial->dma_flag = RT_FALSE; - - /* init data queue */ - rt_data_queue_init(&(serial->tx_dq), RT_SERIAL_TX_DATAQUEUE_SIZE, - RT_SERIAL_TX_DATAQUEUE_LWM, RT_NULL); - } - } + /* initialize rx/tx */ + serial->serial_rx = RT_NULL; + serial->serial_tx = RT_NULL; - return result; + /* apply configuration */ + if (serial->ops->configure) + result = serial->ops->configure(serial, &serial->config); + + return result; } static rt_err_t rt_serial_open(struct rt_device *dev, rt_uint16_t oflag) { struct rt_serial_device *serial; - rt_uint32_t int_flags = 0; RT_ASSERT(dev != RT_NULL); serial = (struct rt_serial_device *)dev; - if (dev->flag & RT_DEVICE_FLAG_INT_RX) - int_flags = RT_SERIAL_RX_INT; - if (dev->flag & RT_DEVICE_FLAG_INT_TX) - int_flags |= RT_SERIAL_TX_INT; - - if (int_flags) - { - serial->ops->control(serial, RT_DEVICE_CTRL_SET_INT, (void *)int_flags); - } + /* check device flag with the open flag */ + if ((oflag & RT_DEVICE_FLAG_DMA_RX) && !(dev->flag & RT_DEVICE_FLAG_DMA_RX)) + return -RT_EIO; + if ((oflag & RT_DEVICE_FLAG_DMA_TX) && !(dev->flag & RT_DEVICE_FLAG_DMA_TX)) + return -RT_EIO; + if ((oflag & RT_DEVICE_FLAG_INT_RX) && !(dev->flag & RT_DEVICE_FLAG_INT_RX)) + return -RT_EIO; + if ((oflag & RT_DEVICE_FLAG_INT_TX) && !(dev->flag & RT_DEVICE_FLAG_INT_TX)) + return -RT_EIO; + + /* get open flags */ + dev->open_flag = oflag & 0xff; + + /* initialize the Rx/Tx structure according to open flag */ + if (serial->serial_rx == RT_NULL) + { + if (oflag & RT_DEVICE_FLAG_DMA_RX) + { + struct rt_serial_rx_dma* rx_dma; + + rx_dma = (struct rt_serial_rx_dma*) rt_malloc (sizeof(struct rt_serial_rx_dma)); + RT_ASSERT(rx_dma != RT_NULL); + rx_dma->activated = RT_FALSE; + + serial->serial_rx = rx_dma; + dev->open_flag |= RT_DEVICE_FLAG_DMA_RX; + } + else if (oflag & RT_DEVICE_FLAG_INT_RX) + { + struct rt_serial_rx_fifo* rx_fifo; + + rx_fifo = (struct rt_serial_rx_fifo*) rt_malloc (sizeof(struct rt_serial_rx_fifo) + + serial->config.bufsz); + RT_ASSERT(rx_fifo != RT_NULL); + rx_fifo->buffer = (rt_uint8_t*) (rx_fifo + 1); + rt_memset(rx_fifo->buffer, 0, RT_SERIAL_RB_BUFSZ); + rx_fifo->put_index = 0; + rx_fifo->get_index = 0; + + serial->serial_rx = rx_fifo; + dev->open_flag |= RT_DEVICE_FLAG_INT_RX; + /* configure low level device */ + serial->ops->control(serial, RT_DEVICE_CTRL_SET_INT, (void *)RT_DEVICE_FLAG_INT_RX); + } + else + { + serial->serial_rx = RT_NULL; + } + } + + if (serial->serial_tx == RT_NULL) + { + if (oflag & RT_DEVICE_FLAG_DMA_TX) + { + struct rt_serial_tx_dma* tx_dma; + + tx_dma = (struct rt_serial_tx_dma*) rt_malloc (sizeof(struct rt_serial_tx_dma)); + RT_ASSERT(tx_dma != RT_NULL); + + rt_data_queue_init(&(tx_dma->data_queue), 8, 4, RT_NULL); + serial->serial_tx = tx_dma; + + dev->open_flag |= RT_DEVICE_FLAG_DMA_TX; + } + else if (oflag & RT_DEVICE_FLAG_INT_TX) + { + struct rt_serial_tx_fifo *tx_fifo; + + tx_fifo = (struct rt_serial_tx_fifo*) rt_malloc(sizeof(struct rt_serial_tx_fifo)); + RT_ASSERT(tx_fifo != RT_NULL); + + rt_completion_init(&(tx_fifo->completion)); + serial->serial_tx = tx_fifo; + + dev->open_flag |= RT_DEVICE_FLAG_INT_TX; + /* configure low level device */ + serial->ops->control(serial, RT_DEVICE_CTRL_SET_INT, (void *)RT_DEVICE_FLAG_INT_TX); + } + else + { + serial->serial_tx = RT_NULL; + } + } return RT_EOK; } @@ -191,20 +333,62 @@ static rt_err_t rt_serial_open(struct rt_device *dev, rt_uint16_t oflag) static rt_err_t rt_serial_close(struct rt_device *dev) { struct rt_serial_device *serial; - rt_uint32_t int_flags = 0; RT_ASSERT(dev != RT_NULL); serial = (struct rt_serial_device *)dev; - if (dev->flag & RT_DEVICE_FLAG_INT_RX) - int_flags = RT_SERIAL_RX_INT; - if (dev->flag & RT_DEVICE_FLAG_INT_TX) - int_flags |= RT_SERIAL_TX_INT; - - if (int_flags) - { - serial->ops->control(serial, RT_DEVICE_CTRL_CLR_INT, (void *)int_flags); - } + /* this device has more reference count */ + if (dev->ref_count > 1) return RT_EOK; + + if (dev->open_flag & RT_DEVICE_FLAG_INT_RX) + { + struct rt_serial_rx_fifo* rx_fifo; + + rx_fifo = (struct rt_serial_rx_fifo*)serial->serial_rx; + RT_ASSERT(rx_fifo != RT_NULL); + + rt_free(rx_fifo); + serial->serial_rx = RT_NULL; + dev->open_flag &= ~RT_DEVICE_FLAG_INT_RX; + /* configure low level device */ + serial->ops->control(serial, RT_DEVICE_CTRL_CLR_INT, (void*)RT_DEVICE_FLAG_INT_TX); + } + else if (dev->open_flag & RT_DEVICE_FLAG_DMA_RX) + { + struct rt_serial_rx_dma* rx_dma; + + rx_dma = (struct rt_serial_rx_dma*)serial->serial_tx; + RT_ASSERT(rx_dma != RT_NULL); + + rt_free(rx_dma); + serial->serial_rx = RT_NULL; + dev->open_flag &= ~RT_DEVICE_FLAG_DMA_RX; + } + + if (dev->open_flag & RT_DEVICE_FLAG_INT_TX) + { + struct rt_serial_tx_fifo* tx_fifo; + + tx_fifo = (struct rt_serial_tx_fifo*)serial->serial_rx; + RT_ASSERT(tx_fifo != RT_NULL); + + rt_free(tx_fifo); + serial->serial_tx = RT_NULL; + dev->open_flag &= ~RT_DEVICE_FLAG_INT_TX; + /* configure low level device */ + serial->ops->control(serial, RT_DEVICE_CTRL_CLR_INT, (void*)RT_DEVICE_FLAG_INT_TX); + } + else if (dev->open_flag & RT_DEVICE_FLAG_DMA_TX) + { + struct rt_serial_tx_dma* tx_dma; + + tx_dma = (struct rt_serial_tx_dma*)serial->serial_tx; + RT_ASSERT(tx_dma != RT_NULL); + + rt_free(tx_dma); + serial->serial_tx = RT_NULL; + dev->open_flag &= ~RT_DEVICE_FLAG_DMA_TX; + } return RT_EOK; } @@ -214,53 +398,23 @@ static rt_size_t rt_serial_read(struct rt_device *dev, void *buffer, rt_size_t size) { - rt_uint8_t *ptr; - rt_uint32_t read_nbytes; struct rt_serial_device *serial; RT_ASSERT(dev != RT_NULL); - - if (size == 0) - return 0; + if (size == 0) return 0; serial = (struct rt_serial_device *)dev; - ptr = (rt_uint8_t *)buffer; + if (dev->open_flag & RT_DEVICE_FLAG_INT_RX) + { + return _serial_int_rx(serial, buffer, size); + } + else if (dev->open_flag & RT_DEVICE_FLAG_DMA_RX) + { + return _serial_dma_rx(serial, buffer, size); + } - if (dev->flag & RT_DEVICE_FLAG_INT_RX) - { - /* interrupt mode Rx */ - while (size) - { - int ch; - - ch = serial_ringbuffer_getc(serial->int_rx); - if (ch == -1) - break; - - *ptr = ch & 0xff; - ptr ++; - size --; - } - } - else - { - /* polling mode */ - while ((rt_uint32_t)ptr - (rt_uint32_t)buffer < size) - { - *ptr = serial->ops->getc(serial); - ptr ++; - } - } - - read_nbytes = (rt_uint32_t)ptr - (rt_uint32_t)buffer; - /* set error code */ - if (read_nbytes == 0) - { - rt_set_errno(-RT_EEMPTY); - } - - return read_nbytes; + return _serial_poll_rx(serial, buffer, size); } static rt_size_t rt_serial_write(struct rt_device *dev, @@ -268,90 +422,23 @@ static rt_size_t rt_serial_write(struct rt_device *dev, const void *buffer, rt_size_t size) { - rt_uint8_t *ptr; - rt_size_t write_nbytes = 0; struct rt_serial_device *serial; RT_ASSERT(dev != RT_NULL); - - if (size == 0) - return 0; + if (size == 0) return 0; serial = (struct rt_serial_device *)dev; - ptr = (rt_uint8_t*)buffer; - - if (dev->flag & RT_DEVICE_FLAG_INT_TX) - { - /* warning: data will be discarded if buffer is full */ - while (size) - { - if (serial_ringbuffer_putchar(serial->int_tx, *ptr) != -1) - { - ptr ++; - size --; - } - else - break; - } - } - else if (dev->flag & RT_DEVICE_FLAG_DMA_TX) - { - rt_base_t level; - rt_err_t result; - - RT_ASSERT(0 == (dev->flag & RT_DEVICE_FLAG_STREAM)); - - result = rt_data_queue_push(&(serial->tx_dq), buffer, size, 20); - if (result == RT_EOK) - { - level = rt_hw_interrupt_disable(); - if (serial->dma_flag == RT_FALSE) - { - serial->dma_flag = RT_TRUE; - rt_hw_interrupt_enable(level); - serial->ops->dma_transmit(serial, buffer, size); - } - else - rt_hw_interrupt_enable(level); - - return size; - } - else - { - rt_set_errno(result); - - return 0; - } - } - else - { - /* polling mode */ - while (size) - { - /* - * to be polite with serial console add a line feed - * to the carriage return character - */ - if (*ptr == '\n' && (dev->flag & RT_DEVICE_FLAG_STREAM)) - { - serial->ops->putc(serial, '\r'); - } - - serial->ops->putc(serial, *ptr); - - ++ ptr; - -- size; - } - } - - write_nbytes = (rt_uint32_t)ptr - (rt_uint32_t)buffer; - if (write_nbytes == 0) - { - rt_set_errno(-RT_EFULL); - } + if (dev->open_flag & RT_DEVICE_FLAG_INT_TX) + { + _serial_int_tx(serial, buffer, size); + } + else if (dev->open_flag & RT_DEVICE_FLAG_DMA_TX) + { + _serial_dma_tx(serial, buffer, size); + } - return write_nbytes; + return _serial_poll_tx(serial, buffer, size); } static rt_err_t rt_serial_control(struct rt_device *dev, @@ -419,56 +506,108 @@ rt_err_t rt_hw_serial_register(struct rt_serial_device *serial, } /* ISR for serial interrupt */ -void rt_hw_serial_isr(struct rt_serial_device *serial) -{ - int ch = -1; - - /* interrupt mode receive */ - RT_ASSERT(serial->parent.flag & RT_DEVICE_FLAG_INT_RX); - - while (1) - { - ch = serial->ops->getc(serial); - if (ch == -1) - break; - - serial_ringbuffer_putc(serial->int_rx, ch); - } - - /* invoke callback */ - if (serial->parent.rx_indicate != RT_NULL) - { - rt_size_t rx_length; - - /* get rx length */ - rx_length = serial_ringbuffer_size(serial->int_rx); - serial->parent.rx_indicate(&serial->parent, rx_length); - } -} - -/* - * ISR for DMA mode Tx - */ -void rt_hw_serial_dma_tx_isr(struct rt_serial_device *serial) +void rt_hw_serial_isr(struct rt_serial_device *serial, int event) { - const void *data_ptr; - rt_size_t data_size; - const void *last_data_ptr; - - rt_data_queue_pop(&(serial->tx_dq), &last_data_ptr, &data_size, 0); - if (RT_EOK == rt_data_queue_peak(&(serial->tx_dq), &data_ptr, &data_size)) - { - /* transmit next data node */ - serial->ops->dma_transmit(serial, data_ptr, data_size); - } - else - { - serial->dma_flag = RT_FALSE; - } - - /* invoke callback */ - if (serial->parent.tx_complete != RT_NULL) - { - serial->parent.tx_complete(&serial->parent, (void*)last_data_ptr); - } + switch (event & 0xff) + { + case RT_SERIAL_EVENT_RX_IND: + { + int ch = -1; + rt_base_t level; + struct rt_serial_rx_fifo* rx_fifo; + + rx_fifo = (struct rt_serial_rx_fifo*)serial->serial_rx; + RT_ASSERT(rx_fifo != RT_NULL); + + /* interrupt mode receive */ + RT_ASSERT(serial->parent.open_flag & RT_DEVICE_FLAG_INT_RX); + + while (1) + { + ch = serial->ops->getc(serial); + if (ch == -1) break; + + + /* disable interrupt */ + level = rt_hw_interrupt_disable(); + + rx_fifo->buffer[rx_fifo->put_index] = ch; + rx_fifo->put_index += 1; + if (rx_fifo->put_index >= serial->config.bufsz) rx_fifo->put_index = 0; + + /* if the next position is read index, discard this 'read char' */ + if (rx_fifo->put_index == rx_fifo->get_index) + { + rx_fifo->get_index += 1; + if (rx_fifo->get_index >= serial->config.bufsz) rx_fifo->get_index = 0; + } + + /* enable interrupt */ + rt_hw_interrupt_enable(level); + } + + /* invoke callback */ + if (serial->parent.rx_indicate != RT_NULL) + { + rt_size_t rx_length; + + /* get rx length */ + level = rt_hw_interrupt_disable(); + rx_length = (rx_fifo->put_index >= rx_fifo->get_index)? (rx_fifo->put_index - rx_fifo->get_index): + (serial->config.bufsz - (rx_fifo->get_index - rx_fifo->put_index)); + rt_hw_interrupt_enable(level); + + serial->parent.rx_indicate(&serial->parent, rx_length); + } + break; + } + case RT_SERIAL_EVENT_TX_DONE: + { + struct rt_serial_tx_fifo* tx_fifo; + + tx_fifo = (struct rt_serial_tx_fifo*)serial->serial_tx; + rt_completion_done(&(tx_fifo->completion)); + break; + } + case RT_SERIAL_EVENT_TX_DMADONE: + { + const void *data_ptr; + rt_size_t data_size; + const void *last_data_ptr; + struct rt_serial_tx_dma* tx_dma; + + tx_dma = (struct rt_serial_tx_dma*) serial->serial_tx; + + rt_data_queue_pop(&(tx_dma->data_queue), &last_data_ptr, &data_size, 0); + if (rt_data_queue_peak(&(tx_dma->data_queue), &data_ptr, &data_size) == RT_EOK) + { + /* transmit next data node */ + tx_dma->activated = RT_TRUE; + serial->ops->dma_transmit(serial, data_ptr, data_size, RT_SERIAL_DMA_TX); + } + else + { + tx_dma->activated = RT_FALSE; + } + + /* invoke callback */ + if (serial->parent.tx_complete != RT_NULL) + { + serial->parent.tx_complete(&serial->parent, (void*)last_data_ptr); + } + break; + } + case RT_SERIAL_EVENT_RX_DMADONE: + { + int length; + struct rt_serial_rx_dma* rx_dma; + + rx_dma = (struct rt_serial_rx_dma*)serial->serial_rx; + /* get DMA rx length */ + length = (event & (~0xff)) >> 8; + serial->parent.rx_indicate(&(serial->parent), length); + rx_dma->activated = RT_FALSE; + break; + } + } } diff --git a/components/finsh/shell.c b/components/finsh/shell.c index ae099e7e7c3e9ce5915fd33d8577499e242627c3..5489cedf3d8b8d170b8043eb04617561b519ce4e 100644 --- a/components/finsh/shell.c +++ b/components/finsh/shell.c @@ -306,8 +306,8 @@ void finsh_thread_entry(void* parameter) #ifdef RT_USING_CONSOLE shell->device = rt_console_get_device(); RT_ASSERT(shell->device); - rt_device_open(shell->device, RT_DEVICE_OFLAG_RDWR); rt_device_set_rx_indicate(shell->device, finsh_rx_ind); + rt_device_open(shell->device, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX); #else RT_ASSERT(shell->device); #endif diff --git a/components/pthreads/mqueue.c b/components/pthreads/mqueue.c index c1303ae6b17afb841d02f67eb07121da3d142919..7b669dc3678093958fcb2b19fb4b35d478bdc6cb 100644 --- a/components/pthreads/mqueue.c +++ b/components/pthreads/mqueue.c @@ -119,6 +119,7 @@ mqd_t mq_open(const char *name, int oflag, ...) { mqd_t mqdes; va_list arg; + mode_t mode; struct mq_attr *attr = RT_NULL; /* lock posix mqueue list */ @@ -128,6 +129,8 @@ mqd_t mq_open(const char *name, int oflag, ...) if (oflag & O_CREAT) { va_start(arg, oflag); + mode = (mode_t)va_arg(arg, unsigned int); + mode = mode; attr = (struct mq_attr *)va_arg(arg, struct mq_attr *); va_end(arg); diff --git a/components/pthreads/semaphore.c b/components/pthreads/semaphore.c index 726246c95f077c18bf20e76948371f11a125fe03..ae69e0d1bc7547c7a9019710c2907e610fd71632 100644 --- a/components/pthreads/semaphore.c +++ b/components/pthreads/semaphore.c @@ -224,6 +224,7 @@ sem_t *sem_open(const char *name, int oflag, ...) { sem_t* sem; va_list arg; + mode_t mode; unsigned int value; sem = RT_NULL; @@ -233,6 +234,7 @@ sem_t *sem_open(const char *name, int oflag, ...) if (oflag & O_CREAT) { va_start(arg, oflag); + mode = (mode_t) va_arg( arg, unsigned int); mode = mode; value = va_arg( arg, unsigned int); va_end(arg);