diff --git a/bsp/fm3/mb9b506r/application.c b/bsp/fm3/mb9b506r/application.c new file mode 100644 index 0000000000000000000000000000000000000000..a689dff6809158004e1582f07f33e5478f8183f5 --- /dev/null +++ b/bsp/fm3/mb9b506r/application.c @@ -0,0 +1,40 @@ +/* + * File : application.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2009 - 2011, RT-Thread Development Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rt-thread.org/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2011-02-24 Bernard the first version + */ + +/** + * @addtogroup FM3 + */ +/*@{*/ + +#include +#include "board.h" +#include "led.h" + +void rt_init_thread_entry(void *parameter) +{ + rt_hw_led_init(); +} + +int rt_application_init() +{ + rt_thread_t init_thread; + + init_thread = rt_thread_create("init", rt_init_thread_entry, RT_NULL, 1024, 21, 20); + if(init_thread != RT_NULL) + rt_thread_startup(init_thread); + + return 0; +} + +/*@}*/ diff --git a/bsp/fm3/mb9b506r/board.c b/bsp/fm3/mb9b506r/board.c new file mode 100644 index 0000000000000000000000000000000000000000..82c8d4c7866450ed0ce9196d9fa17ed3302ba4b1 --- /dev/null +++ b/bsp/fm3/mb9b506r/board.c @@ -0,0 +1,109 @@ +/* + * File : board.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2009 - 2011 RT-Thread Develop Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rt-thread.org/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2011-02-24 Bernard first implementation + */ + +#include +#include + +#include "board.h" +#include "mb9bf506r.h" +#include "core_cm3.h" + +extern const uint32_t SystemFrequency; + +#define UART0 FM3_MFS0_UART +struct serial_int_rx uart0_int_rx; +struct serial_device uart0 = +{ + UART0, + &uart0_int_rx, + RT_NULL +}; +struct rt_device uart0_device; + +#define UART2 FM3_MFS2_UART +struct serial_int_rx uart2_int_rx; +struct serial_device uart2 = +{ + UART2, + &uart2_int_rx, + RT_NULL +}; +struct rt_device uart2_device; + +/** + * @addtogroup FM3 + */ + +/*@{*/ + +/** + * This is the timer interrupt service routine. + * + */ +void rt_hw_timer_handler(void) +{ + /* enter interrupt */ + rt_interrupt_enter(); + + rt_tick_increase(); + + /* leave interrupt */ + rt_interrupt_leave(); +} + +void rt_hw_uart2_rx_handler(void) +{ +#ifdef RT_USING_UART2 + extern struct rt_device uart2_device; + extern void rt_hw_serial_isr(struct rt_device *device); + + /* enter interrupt */ + rt_interrupt_enter(); + + rt_hw_serial_isr(&uart2_device); + + /* leave interrupt */ + rt_interrupt_leave(); +#endif +} + +/** + * This function will handle init uart + */ +static void rt_hw_uart_init(void) +{ + /* Set Uart Ch2 Port, SIN2_1, SOT2_1 */ + FM3_GPIO->PFR2 = FM3_GPIO->PFR2 | 0x0030; + FM3_GPIO->EPFR07 = FM3_GPIO->EPFR07 | 0x000a0000; + +uart2.uart_device->SMR = SMR_MD_UART | SMR_SOE;; +uart2.uart_device->BGR = (40000000UL + (BPS/2))/BPS - 1; +uart2.uart_device->ESCR = ESCR_DATABITS_8; +uart2.uart_device->SCR = SCR_RXE | SCR_TXE | SCR_RIE; + +UART_ENABLE_IRQ(MFS2RX_IRQn); +UART_ENABLE_IRQ(MFS2TX_IRQn); +} + +/** +* This function will initial FM3 Easy Kit board. + */ +void rt_hw_board_init() +{ + /* init systick */ + SysTick_Config(SystemFrequency/RT_TICK_PER_SECOND - 1); + rt_hw_uart_init(); +} + +/*@}*/ diff --git a/bsp/fm3/mb9b506r/board.h b/bsp/fm3/mb9b506r/board.h new file mode 100644 index 0000000000000000000000000000000000000000..93c0bcb947d04582476f27489ec1c0acd51417a5 --- /dev/null +++ b/bsp/fm3/mb9b506r/board.h @@ -0,0 +1,31 @@ +/* + * File : board.h + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2009, RT-Thread Development Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rt-thread.org/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2009-09-22 Bernard add board.h to this bsp + * 2011-03-04 lgnq add board.h to FM3 bsp + */ + +#ifndef __BOARD_H__ +#define __BOARD_H__ + +#include "serial.h" + +//Internal SRAM memory size[Kbytes] <8-64> +//MB9BF500 : 32 +//MB9BF504 : 32 +//MB9BF505 : 48 +//MB9BF506 : 64 +#define FM3_SRAM_SIZE 64 +#define FM3_SRAM_END (0x1FFF8000 + FM3_SRAM_SIZE * 1024) + +void rt_hw_board_init(void); + +#endif diff --git a/bsp/fm3/mb9b506r/console.c b/bsp/fm3/mb9b506r/console.c new file mode 100644 index 0000000000000000000000000000000000000000..c96483c38ec3f21c2095bd40d0c1bedfb38e7272 --- /dev/null +++ b/bsp/fm3/mb9b506r/console.c @@ -0,0 +1,180 @@ +#include + +#include + +#define RT_CONSOLE_WIDTH 240 +#define RT_CONSOLE_HEIGHT 320 + +#define RT_CONSOLE_FONT_WIDTH 8 +#define RT_CONSOLE_FONT_HEIGHT 16 + +#define RT_CONSOLE_COL (RT_CONSOLE_WIDTH/RT_CONSOLE_FONT_WIDTH) +#define RT_CONSOLE_ROW (RT_CONSOLE_HEIGHT/RT_CONSOLE_FONT_HEIGHT) + +#define RT_CONSOLE_TAB 4 + +#define RT_CONSOLE_FOREPIXEL (0x001f) + +extern struct serial_device uart2; + +struct rt_console +{ + rt_uint8_t* video_ptr; + rt_uint8_t* font_ptr; + + /* bpp and pixel of width */ + rt_uint8_t bpp; + rt_uint32_t pitch; + + /* current cursor */ + rt_uint8_t current_col; + rt_uint8_t current_row; +}; +struct rt_console console; + +void rt_hw_console_init(rt_uint8_t* video_ptr, rt_uint8_t* font_ptr, rt_uint8_t bpp); +void rt_hw_console_newline(void); +void rt_hw_console_putc(char c); +void rt_hw_console_clear(void); + +void rt_hw_console_init(rt_uint8_t* video_ptr, rt_uint8_t* font_ptr, rt_uint8_t bpp) +{ + rt_memset(&console, 0, sizeof(struct rt_console)); + + console.video_ptr = video_ptr; + console.font_ptr = font_ptr; + console.bpp = bpp; + console.pitch = console.bpp * RT_CONSOLE_WIDTH; + + rt_hw_console_clear(); +} + +void rt_hw_console_putc(char c) +{ + switch (c) + { + case 10: + case 11: + case 12: + case 13: + /* to next line */ + rt_hw_console_newline(); + console.current_col = 0; + break; + + case 9: + console.current_col += RT_CONSOLE_TAB; + break; + + default: + { + rt_uint8_t* font_ptr; + register rt_uint32_t cursor; + register rt_uint32_t i, j; + + if (console.current_col == RT_CONSOLE_COL) + { + rt_hw_console_newline(); + console.current_col = 0; + + rt_hw_console_putc(c); + return; + } + + font_ptr = console.font_ptr + c * RT_CONSOLE_FONT_HEIGHT; + cursor = (console.current_row * RT_CONSOLE_FONT_HEIGHT) * console.pitch + + console.current_col * RT_CONSOLE_FONT_WIDTH * console.bpp; + + for (i = 0; i < RT_CONSOLE_FONT_HEIGHT; i ++ ) + { + for (j = 0; j < RT_CONSOLE_FONT_WIDTH; j ++) + { + if ( ((font_ptr[i] >> (7-j)) & 0x01) != 0 ) + { + /* draw a pixel */ + rt_uint8_t *ptr = &(console.video_ptr[cursor + i * console.pitch + j * console.bpp]); + switch(console.bpp) + { + case 1: + *ptr = RT_CONSOLE_FOREPIXEL; + break; + case 2: + *(rt_uint16_t*)ptr = RT_CONSOLE_FOREPIXEL; + break; + case 3: + ptr[0] = RT_CONSOLE_FOREPIXEL & 0xff; + ptr[1] = (RT_CONSOLE_FOREPIXEL >> 8) & 0xff; + ptr[2] = (RT_CONSOLE_FOREPIXEL >> 16) & 0xff; + break; + case 4: + *(rt_uint32_t*)ptr = RT_CONSOLE_FOREPIXEL; + break; + } + } + } + } + + console.current_col ++; + } + break; + } +} + +void rt_hw_console_newline() +{ + console.current_row ++; + if (console.current_row >= RT_CONSOLE_ROW) + { + rt_uint32_t i; + + /* scroll to next line */ + for (i = 0; i < RT_CONSOLE_ROW - 1; i ++) + { + rt_memcpy(console.video_ptr + i * RT_CONSOLE_FONT_HEIGHT * console.pitch, + console.video_ptr + (i + 1) * RT_CONSOLE_FONT_HEIGHT * console.pitch, + RT_CONSOLE_FONT_HEIGHT * console.pitch); + } + + /* clear last line */ + rt_memset(console.video_ptr + (RT_CONSOLE_ROW - 1) * RT_CONSOLE_FONT_HEIGHT * console.pitch, + 0, + RT_CONSOLE_FONT_HEIGHT * console.pitch); + + console.current_row = RT_CONSOLE_ROW - 1; + } +} + +void rt_hw_console_clear() +{ + console.current_col = 0; + console.current_row = 0; + + rt_memset(console.video_ptr, 0, RT_CONSOLE_HEIGHT * console.pitch); +} + +/* write one character to serial, must not trigger interrupt */ +void rt_hw_serial_putc(const char c) +{ + /* + to be polite with serial console add a line feed + to the carriage return character + */ + if (c=='\n')rt_hw_serial_putc('\r'); + + while (!(uart2.uart_device->SSR & SSR_TDRE)); + uart2.uart_device->TDR = (c & 0x1FF); +} + +/** + * This function is used by rt_kprintf to display a string on console. + * + * @param str the displayed string + */ +void rt_hw_console_output(const char* str) +{ + while (*str) + { + rt_hw_serial_putc(*str++); + } +} + diff --git a/bsp/fm3/mb9b506r/fm3_easy_kit.dep b/bsp/fm3/mb9b506r/fm3_easy_kit.dep new file mode 100644 index 0000000000000000000000000000000000000000..431785b8db17aaa15a4f2452cf406ea45739ffdf --- /dev/null +++ b/bsp/fm3/mb9b506r/fm3_easy_kit.dep @@ -0,0 +1,769 @@ + + + + 2 + 1392295362 + + Debug + + $PROJ_DIR$\..\..\..\include\rtthread.h + $PROJ_DIR$\..\CMSIS\system_mb9bf50x.h + $PROJ_DIR$\..\CMSIS\core_cmFunc.h + $PROJ_DIR$\..\CMSIS\core_cm3.h + $PROJ_DIR$\..\..\..\include\rtdef.h + $PROJ_DIR$\..\CMSIS\core_cmInstr.h + $PROJ_DIR$\..\CMSIS\mb9bf506r.h + $PROJ_DIR$\Debug\Obj\object.pbi + $PROJ_DIR$\Debug\Obj\application.pbi + $PROJ_DIR$\Debug\Obj\module.pbi + $PROJ_DIR$\Debug\Obj\ipc.pbi + $PROJ_DIR$\Debug\Obj\mem.o + $PROJ_DIR$\Debug\Obj\scheduler.o + $PROJ_DIR$\rtconfig.h + $PROJ_DIR$\Debug\Obj\mem.pbi + $TOOLKIT_DIR$\inc\c\wchar.h + $TOOLKIT_DIR$\inc\c\ycheck.h + $TOOLKIT_DIR$\inc\c\DLib_Threads.h + $TOOLKIT_DIR$\inc\c\xencoding_limits.h + $TOOLKIT_DIR$\inc\c\DLib_Product.h + $TOOLKIT_DIR$\inc\c\yvals.h + $TOOLKIT_DIR$\inc\c\DLib_Defaults.h + $TOOLKIT_DIR$\inc\c\stdint.h + $TOOLKIT_DIR$\inc\c\string.h + $PROJ_DIR$\Debug\Obj\board.pbi + $PROJ_DIR$\Debug\Obj\led.pbi + $TOOLKIT_DIR$\inc\c\ysizet.h + $PROJ_DIR$\Debug\Obj\cpuport.o + $PROJ_DIR$\Debug\Obj\finsh_init.o + $PROJ_DIR$\Debug\Obj\console.o + $PROJ_DIR$\Debug\Obj\finsh_var.o + $PROJ_DIR$\Debug\Obj\finsh_ops.o + $PROJ_DIR$\Debug\Obj\finsh_error.o + $PROJ_DIR$\Debug\Obj\finsh_vm.o + $PROJ_DIR$\Debug\Obj\cmd.pbi + $TOOLKIT_DIR$\inc\c\xtls.h + $TOOLKIT_DIR$\inc\c\ctype.h + $TOOLKIT_DIR$\inc\c\xlocale_c.h + $TOOLKIT_DIR$\inc\c\xmtx.h + $TOOLKIT_DIR$\inc\c\xlocaleuse.h + $PROJ_DIR$\Debug\Obj\thread.pbi + $PROJ_DIR$\Debug\Obj\kservice.o + $PROJ_DIR$\Debug\Obj\finsh_compiler.pbi + $PROJ_DIR$\Debug\Obj\finsh_node.o + $PROJ_DIR$\Debug\Obj\finsh_parser.o + $PROJ_DIR$\Debug\Obj\finsh_heap.pbi + $PROJ_DIR$\Debug\Obj\finsh_compiler.o + $PROJ_DIR$\Debug\Obj\symbol.o + $PROJ_DIR$\Debug\Obj\finsh_token.o + $PROJ_DIR$\Debug\Obj\finsh_heap.o + $PROJ_DIR$\Debug\Obj\cmd.o + $PROJ_DIR$\Debug\Obj\finsh_token.pbi + $PROJ_DIR$\Debug\Obj\shell.o + $PROJ_DIR$\..\..\..\libcpu\arm\fm3\fault_iar.S + $PROJ_DIR$\..\..\..\libcpu\arm\fm3\start_iar.S + $PROJ_DIR$\..\..\..\src\object.c + $PROJ_DIR$\..\..\..\libcpu\arm\fm3\context_iar.S + $PROJ_DIR$\..\..\..\src\scheduler.c + $PROJ_DIR$\..\..\..\libcpu\arm\fm3\cpuport.c + $PROJ_DIR$\..\..\..\src\slab.c + $PROJ_DIR$\..\..\..\src\rtm.c + $PROJ_DIR$\..\..\..\src\timer.c + $PROJ_DIR$\..\..\..\src\thread.c + $PROJ_DIR$\..\..\..\src\idle.c + $PROJ_DIR$\..\..\..\src\mempool.c + $PROJ_DIR$\..\..\..\src\module.c + $PROJ_DIR$\..\..\..\src\ipc.c + $PROJ_DIR$\..\..\..\src\kservice.c + $PROJ_DIR$\..\..\..\src\mem.c + $PROJ_DIR$\..\..\..\src\irq.c + $PROJ_DIR$\..\..\..\src\device.c + $PROJ_DIR$\..\..\..\src\clock.c + $PROJ_DIR$\Debug\Obj\finsh_var.pbi + $PROJ_DIR$\Debug\Obj\finsh_vm.pbi + $PROJ_DIR$\Debug\Obj\shell.pbi + $PROJ_DIR$\Debug\Obj\symbol.pbi + $PROJ_DIR$\Debug\Obj\thread.o + $PROJ_DIR$\Debug\Obj\finsh_parser.pbi + $PROJ_DIR$\Debug\Obj\finsh_init.pbi + $PROJ_DIR$\Debug\Obj\finsh_node.pbi + $PROJ_DIR$\Debug\Obj\finsh_ops.pbi + $PROJ_DIR$\Debug\Obj\serial.o + $PROJ_DIR$\Debug\Obj\clock.pbi + $PROJ_DIR$\Debug\Obj\scheduler.pbi + $PROJ_DIR$\Debug\Obj\serial.pbi + $PROJ_DIR$\Debug\Obj\console.pbi + $PROJ_DIR$\Debug\Obj\idle.o + $TOOLKIT_DIR$\inc\c\xlocale.h + $PROJ_DIR$\Debug\Obj\irq.o + $PROJ_DIR$\Debug\Obj\clock.o + $PROJ_DIR$\Debug\Obj\device.o + $PROJ_DIR$\Debug\Obj\slab.o + $PROJ_DIR$\Debug\Obj\start_iar.o + $PROJ_DIR$\Debug\Obj\core_cm3.o + $PROJ_DIR$\Debug\Obj\kservice.pbi + $PROJ_DIR$\Debug\Obj\object.o + $TOOLKIT_DIR$\inc\c\intrinsics.h + $PROJ_DIR$\Debug\Obj\system_mb9bf50x.o + $PROJ_DIR$\Debug\Obj\module.o + $PROJ_DIR$\Debug\Obj\application.o + $PROJ_DIR$\Debug\Obj\slab.pbi + $PROJ_DIR$\Debug\Obj\fault_iar.o + $PROJ_DIR$\Debug\Obj\mempool.pbi + $PROJ_DIR$\Debug\Obj\idle.pbi + $TOOLKIT_DIR$\inc\c\stdlib.h + $PROJ_DIR$\Debug\Obj\rtm.pbi + $PROJ_DIR$\Debug\Obj\rtm.o + $PROJ_DIR$\Debug\Obj\finsh_error.pbi + $PROJ_DIR$\Debug\Obj\mempool.o + $PROJ_DIR$\Debug\Obj\cpuport.pbi + $PROJ_DIR$\..\CMSIS\core_cm3.c + $PROJ_DIR$\..\CMSIS\system_mb9bf50x.c + $PROJ_DIR$\Debug\Obj\startup.o + $PROJ_DIR$\Debug\Obj\context_iar.o + $PROJ_DIR$\Debug\Obj\board.o + $PROJ_DIR$\Debug\Obj\timer.pbi + $PROJ_DIR$\Debug\Obj\core_cm3.pbi + $PROJ_DIR$\Debug\Obj\device.pbi + $PROJ_DIR$\Debug\Exe\fm3_easy_kit.out + $PROJ_DIR$\Debug\Obj\irq.pbi + $TOOLKIT_DIR$\inc\c\stdarg.h + $PROJ_DIR$\Debug\Obj\system_mb9bf50x.pbi + $PROJ_DIR$\Debug\Obj\timer.o + $TOOLKIT_DIR$\inc\c\DLib_Product_string.h + $PROJ_DIR$\Debug\Obj\startup.pbi + $PROJ_DIR$\application.c + $PROJ_DIR$\board.c + $PROJ_DIR$\console.c + $PROJ_DIR$\led.c + $PROJ_DIR$\serial.c + $PROJ_DIR$\startup.c + $PROJ_DIR$\Debug\Obj\led.o + $PROJ_DIR$\Debug\Obj\fm3_easy_kit.pbd + $PROJ_DIR$\Debug\Obj\ipc.o + $PROJ_DIR$\..\..\..\components\finsh\symbol.c + $PROJ_DIR$\..\..\..\components\finsh\shell.c + $PROJ_DIR$\..\..\..\components\finsh\finsh_vm.h + $PROJ_DIR$\..\..\..\components\finsh\finsh_vm.c + $PROJ_DIR$\..\..\..\components\finsh\finsh_var.h + $PROJ_DIR$\..\..\..\components\finsh\finsh_var.c + $PROJ_DIR$\..\..\..\components\finsh\finsh_token.h + $PROJ_DIR$\..\..\..\components\finsh\finsh_token.c + $PROJ_DIR$\..\..\..\components\finsh\finsh_parser.h + $PROJ_DIR$\..\..\..\components\finsh\finsh_parser.c + $PROJ_DIR$\..\..\..\components\finsh\finsh_ops.h + $PROJ_DIR$\..\..\..\components\finsh\finsh_ops.c + $PROJ_DIR$\..\..\..\components\finsh\finsh_node.h + $PROJ_DIR$\..\..\..\components\finsh\finsh_node.c + $PROJ_DIR$\..\..\..\components\finsh\finsh_init.c + $PROJ_DIR$\..\..\..\components\finsh\finsh_heap.h + $PROJ_DIR$\..\..\..\components\finsh\finsh_heap.c + $PROJ_DIR$\..\..\..\components\finsh\finsh.h + $PROJ_DIR$\..\..\..\components\finsh\cmd.c + $PROJ_DIR$\..\..\..\components\finsh\finsh_compiler.c + $PROJ_DIR$\..\..\..\components\finsh\finsh_error.h + $PROJ_DIR$\..\..\..\components\finsh\finsh_error.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\fm3\fault_iar.S + + + AARM + 101 + + + + + $PROJ_DIR$\..\..\..\libcpu\arm\fm3\start_iar.S + + + AARM + 92 + + + + + $PROJ_DIR$\..\..\..\src\object.c + + + BICOMP + 7 + + + ICCARM + 95 + + + + + $PROJ_DIR$\..\..\..\libcpu\arm\fm3\context_iar.S + + + AARM + 113 + + + + + $PROJ_DIR$\..\..\..\src\scheduler.c + + + BICOMP + 83 + + + ICCARM + 12 + + + + + $PROJ_DIR$\..\..\..\libcpu\arm\fm3\cpuport.c + + + BICOMP + 109 + + + ICCARM + 27 + + + + + $PROJ_DIR$\..\..\..\src\slab.c + + + BICOMP + 100 + + + ICCARM + 91 + + + + + $PROJ_DIR$\..\..\..\src\rtm.c + + + BICOMP + 105 + + + ICCARM + 106 + + + + + $PROJ_DIR$\..\..\..\src\timer.c + + + BICOMP + 115 + + + ICCARM + 122 + + + + + $PROJ_DIR$\..\..\..\src\thread.c + + + BICOMP + 40 + + + ICCARM + 76 + + + + + $PROJ_DIR$\..\..\..\src\idle.c + + + BICOMP + 103 + + + ICCARM + 86 + + + + + $PROJ_DIR$\..\..\..\src\mempool.c + + + BICOMP + 102 + + + ICCARM + 108 + + + + + $PROJ_DIR$\..\..\..\src\module.c + + + BICOMP + 9 + + + ICCARM + 98 + + + + + $PROJ_DIR$\..\..\..\src\ipc.c + + + BICOMP + 10 + + + ICCARM + 133 + + + + + $PROJ_DIR$\..\..\..\src\kservice.c + + + BICOMP + 94 + + + ICCARM + 41 + + + + + $PROJ_DIR$\..\..\..\src\mem.c + + + BICOMP + 14 + + + ICCARM + 11 + + + + + $PROJ_DIR$\..\..\..\src\irq.c + + + BICOMP + 119 + + + ICCARM + 88 + + + + + $PROJ_DIR$\..\..\..\src\device.c + + + BICOMP + 117 + + + ICCARM + 90 + + + + + $PROJ_DIR$\..\..\..\src\clock.c + + + BICOMP + 82 + + + ICCARM + 89 + + + + + $PROJ_DIR$\..\CMSIS\core_cm3.c + + + BICOMP + 116 + + + ICCARM + 93 + + + + + BICOMP + 22 16 20 21 19 18 17 + + + + + $PROJ_DIR$\..\CMSIS\system_mb9bf50x.c + + + BICOMP + 121 + + + ICCARM + 97 + + + + + BICOMP + 6 3 22 16 20 21 19 18 17 5 96 2 1 + + + + + $PROJ_DIR$\application.c + + + BICOMP + 8 + + + ICCARM + 99 + + + + + $PROJ_DIR$\board.c + + + BICOMP + 24 + + + ICCARM + 114 + + + + + $PROJ_DIR$\console.c + + + BICOMP + 85 + + + ICCARM + 29 + + + + + $PROJ_DIR$\led.c + + + BICOMP + 25 + + + ICCARM + 131 + + + + + $PROJ_DIR$\serial.c + + + BICOMP + 84 + + + ICCARM + 81 + + + + + $PROJ_DIR$\startup.c + + + BICOMP + 124 + + + ICCARM + 112 + + + + + [ROOT_NODE] + + + ILINK + 118 + + + + + $PROJ_DIR$\..\..\..\components\finsh\symbol.c + + + BICOMP + 75 + + + ICCARM + 47 + + + + + $PROJ_DIR$\..\..\..\components\finsh\shell.c + + + BICOMP + 74 + + + ICCARM + 52 + + + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_vm.c + + + BICOMP + 73 + + + ICCARM + 33 + + + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_var.c + + + BICOMP + 72 + + + ICCARM + 30 + + + + + BICOMP + 151 0 4 13 120 16 20 21 19 18 17 36 87 35 38 104 26 39 37 15 23 123 138 + + + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_token.c + + + BICOMP + 51 + + + ICCARM + 48 + + + + + BICOMP + 151 0 4 13 120 16 20 21 19 18 17 36 87 35 38 104 26 39 37 15 23 123 140 154 + + + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_parser.c + + + BICOMP + 77 + + + ICCARM + 44 + + + + + BICOMP + 151 0 4 13 120 16 20 21 19 18 17 36 87 35 38 104 26 39 37 15 23 123 140 146 154 142 138 + + + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_ops.c + + + BICOMP + 80 + + + ICCARM + 31 + + + + + BICOMP + 144 136 151 0 4 13 120 16 20 21 19 18 17 36 87 35 38 104 26 39 37 15 23 123 138 + + + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_node.c + + + BICOMP + 79 + + + ICCARM + 43 + + + + + BICOMP + 151 0 4 13 120 16 20 21 19 18 17 36 87 35 38 104 26 39 37 15 23 123 146 154 138 149 + + + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_init.c + + + BICOMP + 78 + + + ICCARM + 28 + + + + + BICOMP + 151 0 4 13 120 16 20 21 19 18 17 36 87 35 38 104 26 39 37 15 23 123 146 136 138 142 154 149 + + + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_heap.c + + + BICOMP + 45 + + + ICCARM + 49 + + + + + BICOMP + 151 0 4 13 120 16 20 21 19 18 17 36 87 35 38 104 26 39 37 15 23 123 138 + + + + + $PROJ_DIR$\..\..\..\components\finsh\cmd.c + + + BICOMP + 34 + + + ICCARM + 50 + + + + + BICOMP + 0 4 13 120 16 20 21 19 18 17 151 36 87 35 38 104 26 39 37 15 23 123 + + + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_compiler.c + + + BICOMP + 42 + + + ICCARM + 46 + + + + + BICOMP + 151 0 4 13 120 16 20 21 19 18 17 36 87 35 38 104 26 39 37 15 23 123 146 154 138 144 136 + + + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_error.c + + + BICOMP + 107 + + + ICCARM + 32 + + + + + BICOMP + 154 151 0 4 13 120 16 20 21 19 18 17 36 87 35 38 104 26 39 37 15 23 123 + + + + + + Release + + + [MULTI_TOOL] + ILINK + + + [REBUILD_ALL] + + + + + diff --git a/bsp/fm3/mb9b506r/fm3_easy_kit.ewd b/bsp/fm3/mb9b506r/fm3_easy_kit.ewd new file mode 100644 index 0000000000000000000000000000000000000000..1131d412f50a93b73ed4c052db0ae656ebc328e4 --- /dev/null +++ b/bsp/fm3/mb9b506r/fm3_easy_kit.ewd @@ -0,0 +1,1659 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + JLINK_ID + 2 + + 12 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 1 + 1 + 1 + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB6_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + JLINK_ID + 2 + + 12 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 1 + 1 + 0 + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB6_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\Stack\Stack.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + + + + diff --git a/bsp/fm3/mb9b506r/fm3_easy_kit.ewp b/bsp/fm3/mb9b506r/fm3_easy_kit.ewp new file mode 100644 index 0000000000000000000000000000000000000000..d68bf4b30bdff8afe1c6912f8629d035b6df7465 --- /dev/null +++ b/bsp/fm3/mb9b506r/fm3_easy_kit.ewp @@ -0,0 +1,1913 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 20 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 8 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 11 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 20 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 8 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 11 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + CMSIS + + $PROJ_DIR$\..\CMSIS\core_cm3.c + + + $PROJ_DIR$\..\CMSIS\system_mb9bf50x.c + + + + Finsh + + $PROJ_DIR$\..\..\..\components\finsh\cmd.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh.h + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_compiler.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_error.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_error.h + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_heap.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_heap.h + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_init.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_node.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_node.h + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_ops.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_ops.h + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_parser.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_parser.h + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_token.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_token.h + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_var.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_var.h + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_vm.c + + + $PROJ_DIR$\..\..\..\components\finsh\finsh_vm.h + + + $PROJ_DIR$\..\..\..\components\finsh\shell.c + + + $PROJ_DIR$\..\..\..\components\finsh\shell.h + + + $PROJ_DIR$\..\..\..\components\finsh\symbol.c + + + + FM3 + + $PROJ_DIR$\..\..\..\libcpu\arm\fm3\context_iar.S + + + $PROJ_DIR$\..\..\..\libcpu\arm\fm3\cpuport.c + + + $PROJ_DIR$\..\..\..\libcpu\arm\fm3\fault_iar.S + + + $PROJ_DIR$\..\..\..\libcpu\arm\fm3\start_iar.S + + + + Kernel + + $PROJ_DIR$\..\..\..\src\clock.c + + + $PROJ_DIR$\..\..\..\src\device.c + + + $PROJ_DIR$\..\..\..\src\idle.c + + + $PROJ_DIR$\..\..\..\src\ipc.c + + + $PROJ_DIR$\..\..\..\src\irq.c + + + $PROJ_DIR$\..\..\..\src\kservice.c + + + $PROJ_DIR$\..\..\..\src\kservice.h + + + $PROJ_DIR$\..\..\..\src\mem.c + + + $PROJ_DIR$\..\..\..\src\mempool.c + + + $PROJ_DIR$\..\..\..\src\module.c + + + $PROJ_DIR$\..\..\..\src\module.h + + + $PROJ_DIR$\..\..\..\src\object.c + + + $PROJ_DIR$\..\..\..\src\rtm.c + + + $PROJ_DIR$\..\..\..\src\scheduler.c + + + $PROJ_DIR$\..\..\..\src\slab.c + + + $PROJ_DIR$\..\..\..\src\thread.c + + + $PROJ_DIR$\..\..\..\src\timer.c + + + + Startup + + $PROJ_DIR$\application.c + + + $PROJ_DIR$\board.c + + + $PROJ_DIR$\console.c + + + $PROJ_DIR$\led.c + + + $PROJ_DIR$\serial.c + + + $PROJ_DIR$\startup.c + + + + + diff --git a/bsp/fm3/mb9b506r/fm3_easy_kit.eww b/bsp/fm3/mb9b506r/fm3_easy_kit.eww new file mode 100644 index 0000000000000000000000000000000000000000..bdaf802ebd518965e46ca31daf2bcbcd432056d5 --- /dev/null +++ b/bsp/fm3/mb9b506r/fm3_easy_kit.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\fm3_easy_kit.ewp + + + + + diff --git a/bsp/fm3/mb9b506r/led.c b/bsp/fm3/mb9b506r/led.c new file mode 100644 index 0000000000000000000000000000000000000000..b2a90cb9df437871116da3d1584c83387cda7dde --- /dev/null +++ b/bsp/fm3/mb9b506r/led.c @@ -0,0 +1,141 @@ +/* + * File : led.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2011, RT-Thread Develop Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rt-thread.org/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2011-03-03 lgnq + */ + +#include +#include + +#include "mb9bf506r.h" +#include "led.h" + +void rt_hw_led_on(rt_uint8_t num) +{ + RT_ASSERT(num < LEDS_MAX_NUMBER); + + switch (num) + { + case 1: + USER_LED_PDOR &= ~USER_LED1; + break; + case 2: + USER_LED_PDOR &= ~USER_LED2; + break; + case 3: + USER_LED_PDOR &= ~USER_LED3; + break; + default: + break; + } +} + +void rt_hw_led_off(rt_uint8_t num) +{ + RT_ASSERT(num < LEDS_MAX_NUMBER); + + switch (num) + { + case 1: + USER_LED_PDOR |= USER_LED1; + break; + case 2: + USER_LED_PDOR |= USER_LED2; + break; + case 3: + USER_LED_PDOR |= USER_LED3; + break; + default: + break; + } +} + +void rt_hw_led_toggle(rt_uint8_t num) +{ + RT_ASSERT(num < LEDS_MAX_NUMBER); + + switch (num) + { + case 1: + if (USER_LED_PDOR&USER_LED1) + USER_LED_PDOR &= ~USER_LED1; + else + USER_LED_PDOR |= USER_LED1; + break; + case 2: + if (USER_LED_PDOR&USER_LED2) + USER_LED_PDOR &= ~USER_LED2; + else + USER_LED_PDOR |= USER_LED2; + break; + case 3: + if (USER_LED_PDOR&USER_LED3) + USER_LED_PDOR &= ~USER_LED3; + else + USER_LED_PDOR |= USER_LED3; + break; + default: + break; + } +} + +void led_init(void) +{ + /*Select CPIO function*/ + USER_LED_PFR &= ~USER_LED_MASK; + /* disable analog input */ + FM3_GPIO->ADE &= ~USER_LED_MASK; + /*Set CPIO Pull-Up function*/ + USER_LED_PCR |= USER_LED_MASK; + /*Make led pins outputs*/ + USER_LED_DDR |= USER_LED_MASK; + USER_LED_PDOR |= USER_LED_MASK; +} + +void pwm_update(rt_uint16_t value) +{ + FM3_BT2_PWM->PDUT = value; +} + +static void led1_thread_entry(void *parameter) +{ + while (1) + { + rt_hw_led_toggle(1); + rt_thread_delay(RT_TICK_PER_SECOND); + } +} + +static void led2_thread_entry(void *parameter) +{ + while (1) + { + rt_hw_led_toggle(2); + rt_thread_delay(RT_TICK_PER_SECOND/2); + } +} + +static rt_thread_t led1_thread; +static rt_thread_t led2_thread; +void rt_hw_led_init(void) +{ + led_init(); + + led1_thread = rt_thread_create("led1", led1_thread_entry, RT_NULL, 384, 29, 5); + if (led1_thread != RT_NULL) + rt_thread_startup(led1_thread); + + led2_thread = rt_thread_create("led2", led2_thread_entry, RT_NULL, 384, 30, 5); + if (led2_thread != RT_NULL) + rt_thread_startup(led2_thread); +} + + diff --git a/bsp/fm3/mb9b506r/led.h b/bsp/fm3/mb9b506r/led.h new file mode 100644 index 0000000000000000000000000000000000000000..d7bbfc66461c3dd2e8363a7e58918026ac8247a9 --- /dev/null +++ b/bsp/fm3/mb9b506r/led.h @@ -0,0 +1,43 @@ +/* + * File : led.h + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2011, RT-Thread Develop Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rt-thread.org/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2011-03-03 lgnq + */ + +#ifndef __LED_H__ +#define __LED_H__ + +#include "mb9bf506r.h" + +#define LEDS_MAX_NUMBER 4 + +/* LED */ +#define USER_LED1 (1UL<<0x9) +#define USER_LED2 (1UL<<0xa) +#define USER_LED3 (1UL<<0xb) + +#define USER_LED_MASK (USER_LED1 | USER_LED2 | USER_LED3) +#define USER_LED_PFR FM3_GPIO->PFR1 +#define USER_LED_PCR FM3_GPIO->PCR1 +#define USER_LED_PDOR FM3_GPIO->PDOR1 +#define USER_LED_DDR FM3_GPIO->DDR1 + +#define RT_DEVICE_CTRL_LED_ON 0 +#define RT_DEVICE_CTRL_LED_OFF 1 +#define RT_DEVICE_CTRL_LED_TOGGLE 2 + +void rt_hw_led_init(void); +void rt_hw_led_on(rt_uint8_t num); +void rt_hw_led_off(rt_uint8_t num); +void rt_hw_led_toggle(rt_uint8_t num); +void pwm_update(rt_uint16_t value); + +#endif diff --git a/bsp/fm3/mb9b506r/mb9bf506.icf b/bsp/fm3/mb9b506r/mb9bf506.icf new file mode 100644 index 0000000000000000000000000000000000000000..63518e1ee9b327fbc38f2255aa5a801f87b95aac --- /dev/null +++ b/bsp/fm3/mb9b506r/mb9bf506.icf @@ -0,0 +1,33 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x1FFF8000; +define symbol __ICFEDIT_region_RAM_end__ = 0x20007FFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x400; +define symbol __ICFEDIT_size_heap__ = 0; +/**** End of ICF editor section. ###ICF###*/ + + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; + +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; + +keep { section FSymTab }; +keep { section VSymTab }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; + +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/fm3/mb9b506r/rtconfig.h b/bsp/fm3/mb9b506r/rtconfig.h new file mode 100644 index 0000000000000000000000000000000000000000..5aea77508dd3bd6141b04a8e368ca4cbb0641b35 --- /dev/null +++ b/bsp/fm3/mb9b506r/rtconfig.h @@ -0,0 +1,120 @@ +/* RT-Thread config file */ +#ifndef __RTTHREAD_CFG_H__ +#define __RTTHREAD_CFG_H__ + +/* RT_NAME_MAX*/ +#define RT_NAME_MAX 8 + +/* RT_ALIGN_SIZE*/ +#define RT_ALIGN_SIZE 4 + +/* PRIORITY_MAX */ +#define RT_THREAD_PRIORITY_MAX 32 + +/* Tick per Second */ +#define RT_TICK_PER_SECOND 100 + +/* SECTION: RT_DEBUG */ +/* Thread Debug */ +#define RT_DEBUG +#define RT_USING_OVERFLOW_CHECK + +/* Using Hook */ +#define RT_USING_HOOK + +/* SECTION: IPC */ +/* Using Semaphore */ +#define RT_USING_SEMAPHORE + +/* Using Mutex */ +#define RT_USING_MUTEX + +/* Using Event */ +#define RT_USING_EVENT + +/* Using MailBox */ +#define RT_USING_MAILBOX + +/* Using Message Queue */ +#define RT_USING_MESSAGEQUEUE + +/* SECTION: Memory Management */ +/* Using Memory Pool Management*/ +#define RT_USING_MEMPOOL + +/* Using Dynamic Heap Management */ +#define RT_USING_HEAP + +/* Using Small MM */ +#define RT_USING_SMALL_MEM + +/* SECTION: Device System */ +/* Using Device System */ +#define RT_USING_DEVICE +/* RT_USING_UART */ +#define RT_USING_UART2 +#define RT_UART_RX_BUFFER_SIZE 64 + +/* SECTION: Console options */ +//#define RT_TINY_SIZE +#define RT_USING_CONSOLE +/* the buffer size of console */ +#define RT_CONSOLEBUF_SIZE 128 + +/* SECTION: finsh, a C-Express shell */ +/* Using FinSH as Shell*/ +#define RT_USING_FINSH +/* Using symbol table */ +#define FINSH_USING_SYMTAB +#define FINSH_USING_DESCRIPTION +#define FINSH_THREAD_STACK_SIZE 4096 + +/* SECTION: Device filesystem support */ +/* using DFS support */ +/* #define RT_USING_DFS */ +/* #define RT_USING_DFS_ELMFAT */ +/* use long file name feature */ +#define RT_DFS_ELM_USE_LFN 1 +/* the max number of file length */ +#define RT_DFS_ELM_MAX_LFN 32 +/* #define RT_USING_DFS_YAFFS2 */ +/* #define RT_USING_DFS_UFFS */ +/* #define RT_USING_DFS_DEVFS */ + +//#define RT_USING_DFS_NFS +//#define RT_NFS_HOST_EXPORT "192.168.1.5:/" + +#define DFS_USING_WORKDIR + +/* the max number of mounted filesystem */ +#define DFS_FILESYSTEMS_MAX 4 +/* the max number of opened files */ +#define DFS_FD_MAX 16 +/* the max number of cached sector */ +#define DFS_CACHE_MAX_NUM 4 + +/* SECTION: RTGUI support */ +/* using RTGUI support */ +//#define RT_USING_RTGUI + +/* name length of RTGUI object */ +#define RTGUI_NAME_MAX 16 +/* support 16 weight font */ +//#define RTGUI_USING_FONT16 +/* support 12 weight font */ +#define RTGUI_USING_FONT12 +/* support Chinese font */ +//#define RTGUI_USING_FONTHZ +/* use DFS as file interface */ +//#define RTGUI_USING_DFS_FILERW +/* use font file as Chinese font */ +/* #define RTGUI_USING_HZ_FILE */ +/* use Chinese bitmap font */ +//#define RTGUI_USING_HZ_BMP +/* use small size in RTGUI */ +//#define RTGUI_USING_SMALL_SIZE +/* use mouse cursor */ +/* #define RTGUI_USING_MOUSE_CURSOR */ +#define RTGUI_DEFAULT_FONT_SIZE 12 + +#endif diff --git a/bsp/fm3/mb9b506r/serial.c b/bsp/fm3/mb9b506r/serial.c new file mode 100644 index 0000000000000000000000000000000000000000..5e510d03710c0e1eb663b8d012655e25abe4b9e2 --- /dev/null +++ b/bsp/fm3/mb9b506r/serial.c @@ -0,0 +1,283 @@ +/* + * File : serial.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2006, RT-Thread Development Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://openlab.rt-thread.com/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2006-03-13 Bernard first version + * 2009-04-20 yi.qiu modified according bernard's stm32 version + */ + +#include + +#include "serial.h" + +/** + * @addtogroup FM3 MB9B500 + */ +/*@{*/ + +/* RT-Thread Device Interface */ +/** + * This function initializes serial + */ +static rt_err_t rt_serial_init (rt_device_t dev) +{ + struct serial_device* uart = (struct serial_device*) dev->user_data; + + if (!(dev->flag & RT_DEVICE_FLAG_ACTIVATED)) + { + + if (dev->flag & RT_DEVICE_FLAG_INT_RX) + { + rt_memset(uart->int_rx->rx_buffer, 0, + sizeof(uart->int_rx->rx_buffer)); + uart->int_rx->read_index = uart->int_rx->save_index = 0; + } + + if (dev->flag & RT_DEVICE_FLAG_INT_TX) + { + rt_memset(uart->int_tx->tx_buffer, 0, + sizeof(uart->int_tx->tx_buffer)); + uart->int_tx->write_index = uart->int_tx->save_index = 0; + } + + dev->flag |= RT_DEVICE_FLAG_ACTIVATED; + } + + return RT_EOK; +} + +/* save a char to serial buffer */ +static void rt_serial_savechar(struct serial_device* uart, char ch) +{ + rt_base_t level; + + /* disable interrupt */ + level = rt_hw_interrupt_disable(); + + uart->int_rx->rx_buffer[uart->int_rx->save_index] = ch; + uart->int_rx->save_index ++; + if (uart->int_rx->save_index >= UART_RX_BUFFER_SIZE) + uart->int_rx->save_index = 0; + + /* if the next position is read index, discard this 'read char' */ + if (uart->int_rx->save_index == uart->int_rx->read_index) + { + uart->int_rx->read_index ++; + if (uart->int_rx->read_index >= UART_RX_BUFFER_SIZE) + uart->int_rx->read_index = 0; + } + + /* enable interrupt */ + rt_hw_interrupt_enable(level); +} + +static rt_err_t rt_serial_open(rt_device_t dev, rt_uint16_t oflag) +{ + RT_ASSERT(dev != RT_NULL); + + return RT_EOK; +} + +static rt_err_t rt_serial_close(rt_device_t dev) +{ + RT_ASSERT(dev != RT_NULL); + + return RT_EOK; +} + +static rt_size_t rt_serial_read (rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t size) +{ + rt_uint8_t* ptr; + rt_err_t err_code; + struct serial_device* uart; + + ptr = buffer; + err_code = RT_EOK; + uart = (struct serial_device*)dev->user_data; + + if (dev->flag & RT_DEVICE_FLAG_INT_RX) + { + rt_base_t level; + + /* interrupt mode Rx */ + while (size) + { + if (uart->int_rx->read_index != uart->int_rx->save_index) + { + *ptr++ = uart->int_rx->rx_buffer[uart->int_rx->read_index]; + size --; + + /* disable interrupt */ + level = rt_hw_interrupt_disable(); + + uart->int_rx->read_index ++; + if (uart->int_rx->read_index >= UART_RX_BUFFER_SIZE) + uart->int_rx->read_index = 0; + + /* enable interrupt */ + rt_hw_interrupt_enable(level); + } + else + { + /* set error code */ + err_code = -RT_EEMPTY; + break; + } + } + } + else + { + /* polling mode */ + while ((rt_uint32_t)ptr - (rt_uint32_t)buffer < size) + { + while (uart->uart_device->SSR & SSR_RDRF) + { + *ptr = uart->uart_device->RDR & 0xff; + ptr ++; + } + } + } + + /* set error code */ + rt_set_errno(err_code); + return (rt_uint32_t)ptr - (rt_uint32_t)buffer; +} + +static rt_size_t rt_serial_write (rt_device_t dev, rt_off_t pos, const void* buffer, rt_size_t size) +{ + rt_uint8_t* ptr; + rt_err_t err_code; + struct serial_device* uart; + + err_code = RT_EOK; + ptr = (rt_uint8_t*)buffer; + uart = (struct serial_device*)dev->user_data; + + if (dev->flag & RT_DEVICE_FLAG_INT_TX) + { + /* interrupt mode Tx */ + while (uart->int_tx->save_index != uart->int_tx->write_index) + { + /* save on tx buffer */ + uart->int_tx->tx_buffer[uart->int_tx->save_index] = *ptr++; + + -- size; + + /* move to next position */ + uart->int_tx->save_index ++; + + /* wrap save index */ + if (uart->int_tx->save_index >= UART_TX_BUFFER_SIZE) + uart->int_tx->save_index = 0; + } + + /* set error code */ + if (size > 0) + err_code = -RT_EFULL; + } + 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)) + { + while (!(uart->uart_device->SSR & SSR_TDRE)); + uart->uart_device->TDR = '\r'; + } + + while (!(uart->uart_device->SSR & SSR_TDRE)); + uart->uart_device->TDR = (*ptr & 0x1FF); + + ++ptr; --size; + } + } + + /* set error code */ + rt_set_errno(err_code); + + return (rt_uint32_t)ptr - (rt_uint32_t)buffer; +} + +static rt_err_t rt_serial_control (rt_device_t dev, rt_uint8_t cmd, void *args) +{ + RT_ASSERT(dev != RT_NULL); + + switch (cmd) + { + case RT_DEVICE_CTRL_SUSPEND: + /* suspend device */ + dev->flag |= RT_DEVICE_FLAG_SUSPENDED; + break; + + case RT_DEVICE_CTRL_RESUME: + /* resume device */ + dev->flag &= ~RT_DEVICE_FLAG_SUSPENDED; + break; + } + + return RT_EOK; +} + +/* + * serial register + */ +rt_err_t rt_hw_serial_register(rt_device_t device, const char* name, rt_uint32_t flag, struct serial_device *serial) +{ + RT_ASSERT(device != RT_NULL); + + device->type = RT_Device_Class_Char; + device->rx_indicate = RT_NULL; + device->tx_complete = RT_NULL; + device->init = rt_serial_init; + device->open = rt_serial_open; + device->close = rt_serial_close; + device->read = rt_serial_read; + device->write = rt_serial_write; + device->control = rt_serial_control; + device->user_data = serial; + + /* register a character device */ + return rt_device_register(device, name, RT_DEVICE_FLAG_RDWR | flag); +} + +/* ISR for serial interrupt */ +void rt_hw_serial_isr(rt_device_t device) +{ + struct serial_device* uart = (struct serial_device*) device->user_data; + + /* interrupt mode receive */ + RT_ASSERT(device->flag & RT_DEVICE_FLAG_INT_RX); + + /* save on rx buffer */ + while (uart->uart_device->SSR & SSR_RDRF) + { + rt_serial_savechar(uart, uart->uart_device->RDR & 0xff); + } + + /* invoke callback */ + if (device->rx_indicate != RT_NULL) + { + rt_size_t rx_length; + + /* get rx length */ + rx_length = uart->int_rx->read_index > uart->int_rx->save_index ? + UART_RX_BUFFER_SIZE - uart->int_rx->read_index + uart->int_rx->save_index : + uart->int_rx->save_index - uart->int_rx->read_index; + + device->rx_indicate(device, rx_length); + } +} + +/*@}*/ diff --git a/bsp/fm3/mb9b506r/serial.h b/bsp/fm3/mb9b506r/serial.h new file mode 100644 index 0000000000000000000000000000000000000000..8699754d39a3ab908e61cbb2b35febd24402ca3c --- /dev/null +++ b/bsp/fm3/mb9b506r/serial.h @@ -0,0 +1,84 @@ +#ifndef __RT_HW_SERIAL_H__ +#define __RT_HW_SERIAL_H__ + +#include +#include + +#include "mb9bf506r.h" + +#define SMR_SOE 0x01U +#define SMR_BDS 0x04U +#define SMR_SBL 0x08U +#define SMR_WUCR 0x10U +#define SMR_MD_UART 0x00U +#define SMR_MD_UART_MP 0x20U +#define SMR_MD_SIO 0x40U +#define SMR_MD_LIN 0x60U +#define SMR_MD_I2C 0x80U + +#define SCR_TXE 0x01U +#define SCR_RXE 0x02U +#define SCR_TBIE 0x04U +#define SCR_TIE 0x08U +#define SCR_RIE 0x10U +#define SCR_UPGL 0x80U + +#define SSR_TBI 0x01U +#define SSR_TDRE 0x02U +#define SSR_RDRF 0x04U +#define SSR_ORE 0x08U +#define SSR_FRE 0x10U +#define SSR_PE 0x20U +#define SSR_REC 0x80U + +#define ESCR_P 0x08U +#define ESCR_PEN 0x10U +#define ESCR_INV 0x20U +#define ESCR_ESBL 0x40U +#define ESCR_FLWEN 0x80U +#define ESCR_DATABITS_8 0x00U +#define ESCR_DATABITS_5 0x01U +#define ESCR_DATABITS_6 0x02U +#define ESCR_DATABITS_7 0x03U +#define ESCR_DATABITS_9 0x04U + +#define BPS 115200 /* serial baudrate */ + +#define UART_RX_BUFFER_SIZE 64 +#define UART_TX_BUFFER_SIZE 64 + +struct serial_int_rx +{ + rt_uint8_t rx_buffer[UART_RX_BUFFER_SIZE]; + rt_uint32_t read_index, save_index; +}; + +struct serial_int_tx +{ + rt_uint8_t tx_buffer[UART_TX_BUFFER_SIZE]; + rt_uint32_t write_index, save_index; +}; + +/* + * Enable/DISABLE Interrupt Controller + */ +/* deviation from MISRA-C:2004 Rule 19.7 */ +#define UART_ENABLE_IRQ(n) NVIC_EnableIRQ((n)) +#define UART_DISABLE_IRQ(n) NVIC_DisableIRQ((n)) + +struct serial_device +{ + FM3_MFS03_UART_TypeDef* uart_device; + + /* rx structure */ + struct serial_int_rx* int_rx; + + /* tx structure */ + struct serial_int_tx* int_tx; +}; + +rt_err_t rt_hw_serial_register(rt_device_t device, const char* name, rt_uint32_t flag, struct serial_device *serial); + +void rt_hw_serial_isr(rt_device_t device); + +#endif diff --git a/bsp/fm3/mb9b506r/startup.c b/bsp/fm3/mb9b506r/startup.c new file mode 100644 index 0000000000000000000000000000000000000000..b436cdd5269c59fb978a5be9c153ea98129befb6 --- /dev/null +++ b/bsp/fm3/mb9b506r/startup.c @@ -0,0 +1,143 @@ +/* + * File : startup.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2009 - 2011, RT-Thread Development Team + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rt-thread.org/license/LICENSE + * + * Change Logs: + * Date Author Notes + * 2011-02-24 Bernard first implementation + */ + +#include +#include + +#include "board.h" +#include "mb9bf506r.h" +#ifdef RT_USING_FINSH +#include +#endif + +/** + * @addtogroup FM3 + */ + +extern struct serial_device uart0; +extern struct rt_device uart0_device; +extern struct serial_device uart2; +extern struct rt_device uart2_device; + +/*@{*/ + +extern int rt_application_init(void); +#ifdef RT_USING_FINSH +extern void finsh_system_init(void); +#endif + +#ifdef __CC_ARM +extern int Image$$RW_IRAM1$$ZI$$Limit; +#elif __ICCARM__ +#pragma section="HEAP" +#else +extern int __bss_end; +#endif + +/** + * This function will startup RT-Thread RTOS. + */ +void rtthread_startup(void) +{ + /* init board */ + rt_hw_board_init(); + + /* show version */ + rt_show_version(); + + /* init tick */ + rt_system_tick_init(); + + /* init kernel object */ + rt_system_object_init(); + + /* init timer system */ + rt_system_timer_init(); + +#ifdef RT_USING_HEAP + #ifdef __CC_ARM + rt_system_heap_init((void*)&Image$$RW_IRAM1$$ZI$$Limit, (void*)FM3_SRAM_END); + #elif __ICCARM__ + rt_system_heap_init(__segment_end("HEAP"), (void*)FM3_SRAM_END); + #else + /* init memory system */ + rt_system_heap_init((void*)&__bss_end, (void*)FM3_SRAM_END); + #endif +#endif + + /* init scheduler system */ + rt_system_scheduler_init(); + +#ifdef RT_USING_DEVICE + /* register uart0 */ + rt_hw_serial_register(&uart0_device, "uart0", + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, + &uart0); + + /* register uart2, used for RTI debug */ + rt_hw_serial_register(&uart2_device, "uart2", + RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM, + &uart2); + +#ifdef RT_USING_DFS +#ifdef RT_USING_DFS_UFFS + rt_hw_nand_init(); +#endif +#endif + + /*init all registed devices */ + rt_device_init_all(); +#endif + + /* init application */ + rt_application_init(); + +#ifdef RT_USING_FINSH + /* init finsh */ + finsh_system_init(); +#ifdef RT_USING_DEVICE + finsh_set_device("uart2"); +#endif +#endif + + /* init timer thread */ + rt_system_timer_thread_init(); + + /* init idle thread */ + rt_thread_idle_init(); + + /* start scheduler */ + rt_system_scheduler_start(); + + /* never reach here */ + return ; +} + +int main(void) +{ + rt_uint32_t UNUSED level; + + /* disable interrupt first */ + level = rt_hw_interrupt_disable(); + + /* init system setting */ + SystemInit(); + + /* startup RT-Thread RTOS */ + rtthread_startup(); + + return 0; +} + +/*@}*/ diff --git a/libcpu/arm/fm3/start_iar.S b/libcpu/arm/fm3/start_iar.S index 1b925260966eead6f34835c82d7ff8fcdddd98f1..83e8d85325362c476647806a6258c6c6a62f97ca 100644 --- a/libcpu/arm/fm3/start_iar.S +++ b/libcpu/arm/fm3/start_iar.S @@ -49,6 +49,7 @@ IMPORT rt_hw_hard_fault IMPORT rt_hw_pend_sv IMPORT rt_hw_timer_handler + IMPORT rt_hw_uart2_rx_handler PUBLIC __low_level_init @@ -108,7 +109,7 @@ __vector_table DCD EXTI2_IRQHandler ; EXTI Line 2 DCD EXTI3_IRQHandler ; EXTI Line 3 DCD EXTI4_IRQHandler ; EXTI Line 4 - DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD rt_hw_uart2_rx_handler DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4