summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2015-01-26 08:50:03 +0800
committerBernard Xiong <[email protected]>2015-01-26 08:50:03 +0800
commitd5c65192065485bd8a59081976c2c6a69a3d0603 (patch)
treef4ba00b4bf1849e510cdaab7bf3e466e7bf9eaf2
parent3962937626b7e9b63fc3d668889e9238f00ec959 (diff)
parent1512da3b03be76c3b0483c6ff16bc9093f2b20dd (diff)
Merge pull request #417 from BernardXiong/master
[BSP] Add more features for STM32F4.
-rw-r--r--bsp/realview-a8/SConstruct8
-rw-r--r--bsp/realview-a8/applications/application.c26
-rw-r--r--bsp/realview-a8/drivers/board.c8
-rw-r--r--bsp/realview-a8/drivers/serial.c8
-rw-r--r--bsp/realview-a8/rtconfig.h6
-rw-r--r--bsp/realview-a8/rtconfig.py7
-rw-r--r--bsp/stm32f40x/SConstruct7
-rw-r--r--bsp/stm32f40x/drivers/board.c6
-rw-r--r--bsp/stm32f40x/drivers/board.h10
-rw-r--r--bsp/stm32f40x/drivers/gpio.c213
-rw-r--r--bsp/stm32f40x/drivers/gpio.h19
-rw-r--r--bsp/stm32f40x/drivers/serial.c418
-rw-r--r--bsp/stm32f40x/drivers/serial.h70
-rw-r--r--bsp/stm32f40x/drivers/stm32f4xx_it.c104
-rw-r--r--bsp/stm32f40x/drivers/usart.c568
-rw-r--r--bsp/stm32f40x/drivers/usart.h5
-rw-r--r--bsp/stm32f40x/project.uvopt1206
-rw-r--r--bsp/stm32f40x/project.uvproj261
-rw-r--r--bsp/stm32f40x/rtconfig.h34
-rw-r--r--bsp/stm32f40x/rtconfig.py10
-rw-r--r--components/drivers/include/drivers/pin.h79
-rw-r--r--components/drivers/include/rtdevice.h4
-rw-r--r--components/drivers/misc/SConscript14
-rw-r--r--components/drivers/misc/pin.c118
-rw-r--r--src/kservice.c2
-rwxr-xr-xtools/as.sh3
-rw-r--r--tools/building.py24
-rw-r--r--tools/codeblocks.py24
-rw-r--r--tools/cscope.py24
-rw-r--r--tools/iar.py24
-rw-r--r--tools/keil.py24
-rw-r--r--tools/sconsui.py24
-rw-r--r--tools/ua.py24
-rw-r--r--tools/utils.py24
-rw-r--r--tools/vs.py24
-rw-r--r--tools/vs2012.py24
-rw-r--r--tools/win32spawn.py24
-rwxr-xr-xtools/wizard.py24
38 files changed, 1242 insertions, 2260 deletions
diff --git a/bsp/realview-a8/SConstruct b/bsp/realview-a8/SConstruct
index e67d72291f..6d57bc4025 100644
--- a/bsp/realview-a8/SConstruct
+++ b/bsp/realview-a8/SConstruct
@@ -31,8 +31,12 @@ if GetDepend('RT_USING_VMM'):
ldfile = rtconfig.LINK_SCRIPT)) != 0:
print 'failed to generate linker script %s' % rtconfig.LINK_SCRIPT
sys.exit(255)
-# if the linker script changed, relink the target
-Depends(TARGET, rtconfig.LINK_SCRIPT)
+ # if the linker script changed, relink the target
+ Depends(TARGET, rtconfig.LINK_SCRIPT)
+else:
+ # we should use none-vmm link script
+ link_flags = str(env['LINKFLAGS'])
+ env['LINKFLAGS'] = link_flags.replace('_vmm.lds', '.lds')
# make a building
DoBuilding(TARGET, objs)
diff --git a/bsp/realview-a8/applications/application.c b/bsp/realview-a8/applications/application.c
index e65878bce5..1b7cb790a3 100644
--- a/bsp/realview-a8/applications/application.c
+++ b/bsp/realview-a8/applications/application.c
@@ -15,32 +15,18 @@
#include <rtthread.h>
#include <components.h>
-#include <pthread.h>
-
-void *test_task(void *parameter)
+void init_thread(void* parameter)
{
- int count = 0;
-
- while (1)
- {
- rt_thread_delay(RT_TICK_PER_SECOND);
- rt_kprintf("count = %d\n", count ++);
- }
-
- return RT_NULL;
+ rt_components_init();
}
int rt_application_init()
{
- // pthread_t tid;
-
- /* do component initialization */
- rt_components_init();
-#ifdef RT_USING_NEWLIB
- libc_system_init(RT_CONSOLE_DEVICE_NAME);
-#endif
+ rt_thread_t tid;
- // pthread_create(&tid, RT_NULL, test_task, RT_NULL);
+ tid = rt_thread_create("init", init_thread, RT_NULL,
+ 1024, RT_THREAD_PRIORITY_MAX/3, 10);
+ if (tid != RT_NULL) rt_thread_startup(tid);
return 0;
}
diff --git a/bsp/realview-a8/drivers/board.c b/bsp/realview-a8/drivers/board.c
index 8312a4e85f..fd64075456 100644
--- a/bsp/realview-a8/drivers/board.c
+++ b/bsp/realview-a8/drivers/board.c
@@ -38,11 +38,11 @@
#define SYS_CTRL __REG32(REALVIEW_SCTL_BASE)
#ifdef RT_USING_VMM
- #include <vmm.h>
- static rt_uint32_t timer_hw_base = 0;
- #define TIMER_HW_BASE (timer_hw_base)
+#include <vmm.h>
+static rt_uint32_t timer_hw_base = 0;
+#define TIMER_HW_BASE (timer_hw_base)
#else
- #define TIMER_HW_BASE REALVIEW_TIMER2_3_BASE
+#define TIMER_HW_BASE REALVIEW_TIMER2_3_BASE
#endif
void rt_hw_timer_ack(void)
diff --git a/bsp/realview-a8/drivers/serial.c b/bsp/realview-a8/drivers/serial.c
index 011d10fb99..7df953a282 100644
--- a/bsp/realview-a8/drivers/serial.c
+++ b/bsp/realview-a8/drivers/serial.c
@@ -32,7 +32,7 @@
#include "serial.h"
#ifdef RT_USING_VMM
- #include <vmm.h>
+#include <vmm.h>
#endif
struct hw_uart_device
@@ -165,8 +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;
-
+ config.bufsz = RT_SERIAL_RB_BUFSZ;
+
#ifdef RT_USING_UART0
uart = &_uart0_device;
#ifdef RT_USING_VMM
@@ -194,7 +194,7 @@ int rt_hw_uart_init(void)
/* register UART1 device */
rt_hw_serial_register(&_serial1, "uart1",
- RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX, 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/realview-a8/rtconfig.h b/bsp/realview-a8/rtconfig.h
index b32ae454ce..9ef916998e 100644
--- a/bsp/realview-a8/rtconfig.h
+++ b/bsp/realview-a8/rtconfig.h
@@ -107,8 +107,8 @@
// </section>
// <section name="LIBC" description="C Runtime library setting" default="always" >
-// <bool name="RT_USING_NEWLIB" description="Using newlib library, only available under GNU GCC" default="true" />
-#define RT_USING_NEWLIB
+// <bool name="RT_USING_LIBC" description="Using libc library" default="true" />
+#define RT_USING_LIBC
// <bool name="RT_USING_PTHREADS" description="Using POSIX threads library" default="true" />
#define RT_USING_PTHREADS
// </section>
@@ -147,7 +147,7 @@
#define RT_USING_LOGTRACE
// <section name="RT_USING_VMM" description="Enable RT-Thread hypervisor" default="true" >
-#define RT_USING_VMM
+// #define RT_USING_VMM
// </section>
#endif
diff --git a/bsp/realview-a8/rtconfig.py b/bsp/realview-a8/rtconfig.py
index 85f36831b3..f921c68217 100644
--- a/bsp/realview-a8/rtconfig.py
+++ b/bsp/realview-a8/rtconfig.py
@@ -21,8 +21,6 @@ if os.getenv('RTT_EXEC_PATH'):
EXEC_PATH = os.getenv('RTT_EXEC_PATH')
BUILD = 'debug'
-VMM = True
-#VMM = False
if PLATFORM == 'gcc':
# toolchains
@@ -40,10 +38,7 @@ if PLATFORM == 'gcc':
DEVICE = ' -march=armv7-a -mtune=cortex-a8 -mfpu=vfpv3-d16 -ftree-vectorize -ffast-math -mfloat-abi=softfp'
CFLAGS = DEVICE + ' -Wall'
AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -D__ASSEMBLY__'
- if VMM:
- LINK_SCRIPT = 'realview_vmm.lds'
- else:
- LINK_SCRIPT = 'realview.lds'
+ LINK_SCRIPT = 'realview_vmm.lds'
LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=realview.map,-cref,-u,system_vectors'+\
' -T %s' % LINK_SCRIPT
diff --git a/bsp/stm32f40x/SConstruct b/bsp/stm32f40x/SConstruct
index a58e07aa4b..99c2876aab 100644
--- a/bsp/stm32f40x/SConstruct
+++ b/bsp/stm32f40x/SConstruct
@@ -8,7 +8,12 @@ else:
RTT_ROOT = os.path.normpath(os.getcwd() + '/../..')
sys.path = sys.path + [os.path.join(RTT_ROOT, 'tools')]
-from building import *
+try:
+ from building import *
+except:
+ print 'Cannot found RT-Thread root directory, please check RTT_ROOT'
+ print RTT_ROOT
+ exit(-1)
TARGET = 'rtthread-stm32f4xx.' + rtconfig.TARGET_EXT
diff --git a/bsp/stm32f40x/drivers/board.c b/bsp/stm32f40x/drivers/board.c
index 0414916a5a..ba46e903ea 100644
--- a/bsp/stm32f40x/drivers/board.c
+++ b/bsp/stm32f40x/drivers/board.c
@@ -17,6 +17,8 @@
#include "stm32f4xx.h"
#include "board.h"
+#include "usart.h"
+#include "gpio.h"
/**
* @addtogroup STM32
@@ -91,7 +93,9 @@ void rt_hw_board_init()
/* Configure the SysTick */
SysTick_Configuration();
- rt_hw_usart_init();
+ stm32_hw_usart_init();
+ stm32_hw_pin_init();
+
#ifdef RT_USING_CONSOLE
rt_console_set_device(CONSOLE_DEVICE);
#endif
diff --git a/bsp/stm32f40x/drivers/board.h b/bsp/stm32f40x/drivers/board.h
index b3a1cb4a08..97b506c146 100644
--- a/bsp/stm32f40x/drivers/board.h
+++ b/bsp/stm32f40x/drivers/board.h
@@ -40,11 +40,6 @@
#define STM32_SRAM_SIZE 128
#define STM32_SRAM_END (0x20000000 + STM32_SRAM_SIZE * 1024)
-//#define RT_USING_UART1
-#define RT_USING_UART2
-//#define RT_USING_UART3
-//#define RT_USING_UART6
-
// <o> Console on USART: <0=> no console <1=>USART 1 <2=>USART 2 <3=> USART 3
// <i>Default: 1
#define STM32_CONSOLE_USART 2
@@ -63,11 +58,6 @@ void rt_hw_board_init(void);
#define FINSH_DEVICE_NAME CONSOLE_DEVICE
-void rt_hw_usart_init(void);
-
-/* SD Card init function */
-void rt_hw_msd_init(void);
-
#endif
// <<< Use Configuration Wizard in Context Menu >>>
diff --git a/bsp/stm32f40x/drivers/gpio.c b/bsp/stm32f40x/drivers/gpio.c
new file mode 100644
index 0000000000..88819f73b5
--- /dev/null
+++ b/bsp/stm32f40x/drivers/gpio.c
@@ -0,0 +1,213 @@
+/*
+ * File : gpio.c
+ * This file is part of RT-Thread RTOS
+ * COPYRIGHT (C) 2015, 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
+ * 2015-01-05 Bernard the first version
+ */
+
+#include <rthw.h>
+#include <rtdevice.h>
+#include <board.h>
+
+#ifdef RT_USING_PIN
+
+/* STM32 GPIO driver */
+struct pin_index
+{
+ int index;
+ uint32_t rcc;
+ GPIO_TypeDef *gpio;
+ uint32_t pin;
+};
+
+static const struct pin_index pins[] =
+{
+ { 0, RCC_AHB1Periph_GPIOC, GPIOC, GPIO_Pin_7},
+ { 1, RCC_AHB1Periph_GPIOC, GPIOC, GPIO_Pin_6},
+ { 2, RCC_AHB1Periph_GPIOC, GPIOC, GPIO_Pin_8},
+ { 3, RCC_AHB1Periph_GPIOB, GPIOB, GPIO_Pin_11},
+ { 4, RCC_AHB1Periph_GPIOE, GPIOE, GPIO_Pin_14},
+ { 5, RCC_AHB1Periph_GPIOE, GPIOE, GPIO_Pin_13},
+ { 6, RCC_AHB1Periph_GPIOE, GPIOE, GPIO_Pin_11},
+ { 7, RCC_AHB1Periph_GPIOE, GPIOE, GPIO_Pin_9},
+
+ { 8, RCC_AHB1Periph_GPIOD, GPIOD, GPIO_Pin_12},
+ { 9, RCC_AHB1Periph_GPIOD, GPIOD, GPIO_Pin_13},
+ {10, RCC_AHB1Periph_GPIOD, GPIOD, GPIO_Pin_14},
+ {11, RCC_AHB1Periph_GPIOD, GPIOD, GPIO_Pin_15},
+ {12, RCC_AHB1Periph_GPIOE, GPIOE, GPIO_Pin_6},
+ {13, RCC_AHB1Periph_GPIOE, GPIOE, GPIO_Pin_5},
+
+ {14, RCC_AHB1Periph_GPIOD, GPIOD, GPIO_Pin_8},
+ {15, RCC_AHB1Periph_GPIOD, GPIOD, GPIO_Pin_9},
+ {16, RCC_AHB1Periph_GPIOD, GPIOD, GPIO_Pin_5},
+ {17, RCC_AHB1Periph_GPIOD, GPIOD, GPIO_Pin_6},
+ {18, RCC_AHB1Periph_GPIOB, GPIOB, GPIO_Pin_6},
+ {19, RCC_AHB1Periph_GPIOB, GPIOB, GPIO_Pin_7},
+ {20, RCC_AHB1Periph_GPIOC, GPIOC, GPIO_Pin_9},
+ {21, RCC_AHB1Periph_GPIOA, GPIOA, GPIO_Pin_8},
+
+ {22, RCC_AHB1Periph_GPIOC, GPIOC, GPIO_Pin_12},
+ {23, RCC_AHB1Periph_GPIOD, GPIOD, GPIO_Pin_2},
+ {24, RCC_AHB1Periph_GPIOD, GPIOD, GPIO_Pin_1},
+ {25, RCC_AHB1Periph_GPIOD, GPIOD, GPIO_Pin_0},
+ {26, RCC_AHB1Periph_GPIOA, GPIOA, GPIO_Pin_9},
+ {27, RCC_AHB1Periph_GPIOC, GPIOC, GPIO_Pin_13},
+ {28, RCC_AHB1Periph_GPIOE, GPIOE, GPIO_Pin_15},
+ {29, RCC_AHB1Periph_GPIOE, GPIOE, GPIO_Pin_12},
+ {30, RCC_AHB1Periph_GPIOE, GPIOE, GPIO_Pin_10},
+ {31, RCC_AHB1Periph_GPIOE, GPIOE, GPIO_Pin_8},
+ {32, RCC_AHB1Periph_GPIOE, GPIOE, GPIO_Pin_7},
+ {33, RCC_AHB1Periph_GPIOE, GPIOE, GPIO_Pin_4},
+ {34, RCC_AHB1Periph_GPIOE, GPIOE, GPIO_Pin_3},
+ {35, RCC_AHB1Periph_GPIOE, GPIOE, GPIO_Pin_2},
+ {36, RCC_AHB1Periph_GPIOE, GPIOE, GPIO_Pin_1},
+ {37, RCC_AHB1Periph_GPIOE, GPIOE, GPIO_Pin_0},
+ {38, RCC_AHB1Periph_GPIOD, GPIOD, GPIO_Pin_11},
+ {39, RCC_AHB1Periph_GPIOD, GPIOD, GPIO_Pin_10},
+ {40, RCC_AHB1Periph_GPIOD, GPIOD, GPIO_Pin_7},
+ {41, RCC_AHB1Periph_GPIOD, GPIOD, GPIO_Pin_3},
+ {42, RCC_AHB1Periph_GPIOD, GPIOD, GPIO_Pin_4},
+ {43, RCC_AHB1Periph_GPIOB, GPIOB, GPIO_Pin_8},
+ {44, RCC_AHB1Periph_GPIOC, GPIOC, GPIO_Pin_15},
+ {45, RCC_AHB1Periph_GPIOC, GPIOC, GPIO_Pin_14},
+ {46, RCC_AHB1Periph_GPIOC, GPIOC, GPIO_Pin_11},
+ {47, RCC_AHB1Periph_GPIOB, GPIOB, GPIO_Pin_5},
+ {48, RCC_AHB1Periph_GPIOC, GPIOC, GPIO_Pin_10},
+ {49, RCC_AHB1Periph_GPIOA, GPIOA, GPIO_Pin_15},
+ {50, RCC_AHB1Periph_GPIOB, GPIOB, GPIO_Pin_4},
+ {51, RCC_AHB1Periph_GPIOA, GPIOA, GPIO_Pin_7},
+ {52, RCC_AHB1Periph_GPIOB, GPIOB, GPIO_Pin_3},
+ {53, RCC_AHB1Periph_GPIOA, GPIOA, GPIO_Pin_4},
+};
+
+#define ITEM_NUM(items) sizeof(items)/sizeof(items[0])
+const struct pin_index *get_pin(uint8_t pin)
+{
+ const struct pin_index *index;
+
+ if (pin < ITEM_NUM(pins))
+ {
+ index = &pins[pin];
+ }
+ else
+ {
+ index = RT_NULL;
+ }
+
+ return index;
+};
+
+void stm32_pin_write(rt_device_t dev, rt_base_t pin, rt_base_t value)
+{
+ const struct pin_index *index;
+
+ index = get_pin(pin);
+ if (index == RT_NULL)
+ {
+ return;
+ }
+
+ if (value == PIN_LOW)
+ {
+ GPIO_ResetBits(index->gpio, index->pin);
+ }
+ else
+ {
+ GPIO_SetBits(index->gpio, index->pin);
+ }
+}
+
+int stm32_pin_read(rt_device_t dev, rt_base_t pin)
+{
+ int value;
+ const struct pin_index *index;
+
+ value = PIN_LOW;
+
+ index = get_pin(pin);
+ if (index == RT_NULL)
+ {
+ return value;
+ }
+
+ if (GPIO_ReadInputDataBit(index->gpio, index->pin) == Bit_RESET)
+ {
+ value = PIN_LOW;
+ }
+ else
+ {
+ value = PIN_HIGH;
+ }
+
+ return value;
+}
+
+void stm32_pin_mode(rt_device_t dev, rt_base_t pin, rt_base_t mode)
+{
+ const struct pin_index *index;
+ GPIO_InitTypeDef GPIO_InitStructure;
+
+ index = get_pin(pin);
+ if (index == RT_NULL)
+ {
+ return;
+ }
+
+ /* GPIO Periph clock enable */
+ RCC_AHB1PeriphClockCmd(index->rcc, ENABLE);
+
+ /* Configure GPIO_InitStructure */
+ GPIO_InitStructure.GPIO_Pin = index->pin;
+ GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
+ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
+
+ if (mode == PIN_MODE_OUTPUT)
+ {
+ /* output setting */
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
+ GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
+ }
+ else if (mode == PIN_MODE_INPUT)
+ {
+ /* input setting: not pull. */
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
+ GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
+ }
+ else if (mode == PIN_MODE_INPUT_PULLUP)
+ {
+ /* input setting: pull up. */
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
+ GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
+ }
+ else
+ {
+ /* input setting:default. */
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
+ GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
+ }
+ GPIO_Init(index->gpio, &GPIO_InitStructure);
+}
+
+const static struct rt_pin_ops _stm32_pin_ops =
+{
+ stm32_pin_mode,
+ stm32_pin_write,
+ stm32_pin_read,
+};
+
+int stm32_hw_pin_init(void)
+{
+ rt_device_pin_register("pin", &_stm32_pin_ops, RT_NULL);
+ return 0;
+}
+INIT_BOARD_EXPORT(stm32_hw_pin_init);
+
+#endif
diff --git a/bsp/stm32f40x/drivers/gpio.h b/bsp/stm32f40x/drivers/gpio.h
new file mode 100644
index 0000000000..a4947b100d
--- /dev/null
+++ b/bsp/stm32f40x/drivers/gpio.h
@@ -0,0 +1,19 @@
+/*
+ * File : gpio.h
+ * This file is part of RT-Thread RTOS
+ * COPYRIGHT (C) 2015, 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
+ * 2015-01-05 Bernard the first version
+ */
+#ifndef GPIO_H__
+#define GPIO_H__
+
+int stm32_hw_pin_init(void);
+
+#endif
diff --git a/bsp/stm32f40x/drivers/serial.c b/bsp/stm32f40x/drivers/serial.c
deleted file mode 100644
index 2ec3f8ec2d..0000000000
--- a/bsp/stm32f40x/drivers/serial.c
+++ /dev/null
@@ -1,418 +0,0 @@
-/*
- * File : serial.c
- * 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-02-05 Bernard first version
- * 2009-10-25 Bernard fix rt_serial_read bug when there is no data
- * in the buffer.
- * 2010-03-29 Bernard cleanup code.
- */
-
-#include "serial.h"
-#include <stm32f4xx_dma.h>
-#include <stm32f4xx_usart.h>
-
-static void rt_serial_enable_dma(DMA_Stream_TypeDef* dma_channel,
- rt_uint32_t address, rt_uint32_t size);
-
-/**
- * @addtogroup STM32
- */
-/*@{*/
-
-/* RT-Thread Device Interface */
-static rt_err_t rt_serial_init (rt_device_t dev)
-{
- struct stm32_serial_device* uart = (struct stm32_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 = 0;
- uart->int_rx->save_index = 0;
- }
-
- if (dev->flag & RT_DEVICE_FLAG_DMA_TX)
- {
- RT_ASSERT(uart->dma_tx->dma_channel != RT_NULL);
- uart->dma_tx->list_head = uart->dma_tx->list_tail = RT_NULL;
-
- /* init data node memory pool */
- rt_mp_init(&(uart->dma_tx->data_node_mp), "dn",
- uart->dma_tx->data_node_mem_pool,
- sizeof(uart->dma_tx->data_node_mem_pool),
- sizeof(struct stm32_serial_data_node));
- }
-
- /* Enable USART */
- USART_Cmd(uart->uart_device, ENABLE);
-
- dev->flag |= RT_DEVICE_FLAG_ACTIVATED;
- }
-
- return RT_EOK;
-}
-
-static rt_err_t rt_serial_open(rt_device_t dev, rt_uint16_t oflag)
-{
- return RT_EOK;
-}
-
-static rt_err_t rt_serial_close(rt_device_t dev)
-{
- 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 stm32_serial_device* uart;
-
- ptr = buffer;
- err_code = RT_EOK;
- uart = (struct stm32_serial_device*)dev->user_data;
-
- if (dev->flag & RT_DEVICE_FLAG_INT_RX)
- {
- /* interrupt mode Rx */
- while (size)
- {
- rt_base_t level;
-
- /* disable interrupt */
- level = rt_hw_interrupt_disable();
-
- if (uart->int_rx->read_index != uart->int_rx->save_index)
- {
- /* read a character */
- *ptr++ = uart->int_rx->rx_buffer[uart->int_rx->read_index];
- size--;
-
- /* move to next position */
- uart->int_rx->read_index ++;
- if (uart->int_rx->read_index >= UART_RX_BUFFER_SIZE)
- uart->int_rx->read_index = 0;
- }
- else
- {
- /* set error code */
- err_code = -RT_EEMPTY;
-
- /* enable interrupt */
- rt_hw_interrupt_enable(level);
- break;
- }
-
- /* enable interrupt */
- rt_hw_interrupt_enable(level);
- }
- }
- else
- {
- /* polling mode */
- while ((rt_uint32_t)ptr - (rt_uint32_t)buffer < size)
- {
- while (uart->uart_device->SR & USART_FLAG_RXNE)
- {
- *ptr = uart->uart_device->DR & 0xff;
- ptr ++;
- }
- }
- }
-
- /* set error code */
- rt_set_errno(err_code);
- return (rt_uint32_t)ptr - (rt_uint32_t)buffer;
-}
-
-static void rt_serial_enable_dma(DMA_Stream_TypeDef* dma_channel,
- rt_uint32_t address, rt_uint32_t size)
-{
- RT_ASSERT(dma_channel != RT_NULL);
-
- /* disable DMA */
- DMA_Cmd(dma_channel, DISABLE);
-
- /* set buffer address */
- dma_channel->M0AR = address;
- /* set size */
- dma_channel->NDTR = size;
-
- /* enable DMA */
- DMA_Cmd(dma_channel, ENABLE);
-}
-
-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 stm32_serial_device* uart;
-
- err_code = RT_EOK;
- ptr = (rt_uint8_t*)buffer;
- uart = (struct stm32_serial_device*)dev->user_data;
-
- if (dev->flag & RT_DEVICE_FLAG_INT_TX)
- {
- /* interrupt mode Tx, does not support */
- RT_ASSERT(0);
- }
- else if (dev->flag & RT_DEVICE_FLAG_DMA_TX)
- {
- /* DMA mode Tx */
-
- /* allocate a data node */
- struct stm32_serial_data_node* data_node = (struct stm32_serial_data_node*)
- rt_mp_alloc (&(uart->dma_tx->data_node_mp), RT_WAITING_FOREVER);
- if (data_node == RT_NULL)
- {
- /* set error code */
- err_code = -RT_ENOMEM;
- }
- else
- {
- rt_uint32_t level;
-
- /* fill data node */
- data_node->data_ptr = ptr;
- data_node->data_size = size;
-
- /* insert to data link */
- data_node->next = RT_NULL;
-
- /* disable interrupt */
- level = rt_hw_interrupt_disable();
-
- data_node->prev = uart->dma_tx->list_tail;
- if (uart->dma_tx->list_tail != RT_NULL)
- uart->dma_tx->list_tail->next = data_node;
- uart->dma_tx->list_tail = data_node;
-
- if (uart->dma_tx->list_head == RT_NULL)
- {
- /* start DMA to transmit data */
- uart->dma_tx->list_head = data_node;
-
- /* Enable DMA Channel */
- rt_serial_enable_dma(uart->dma_tx->dma_channel,
- (rt_uint32_t)uart->dma_tx->list_head->data_ptr,
- uart->dma_tx->list_head->data_size);
- }
-
- /* enable interrupt */
- rt_hw_interrupt_enable(level);
- }
- }
- else
- {
- /* polling mode */
- if (dev->flag & RT_DEVICE_FLAG_STREAM)
- {
- /* stream mode */
- while (size)
- {
- if (*ptr == '\n')
- {
- while (!(uart->uart_device->SR & USART_FLAG_TXE));
- uart->uart_device->DR = '\r';
- }
-
- while (!(uart->uart_device->SR & USART_FLAG_TXE));
- uart->uart_device->DR = (*ptr & 0x1FF);
-
- ++ptr; --size;
- }
- }
- else
- {
- /* write data directly */
- while (size)
- {
- while (!(uart->uart_device->SR & USART_FLAG_TXE));
- uart->uart_device->DR = (*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)
-{
- struct stm32_serial_device* uart;
-
- RT_ASSERT(dev != RT_NULL);
-
- uart = (struct stm32_serial_device*)dev->user_data;
- switch (cmd)
- {
- case RT_DEVICE_CTRL_SUSPEND:
- /* suspend device */
- dev->flag |= RT_DEVICE_FLAG_SUSPENDED;
- USART_Cmd(uart->uart_device, DISABLE);
- break;
-
- case RT_DEVICE_CTRL_RESUME:
- /* resume device */
- dev->flag &= ~RT_DEVICE_FLAG_SUSPENDED;
- USART_Cmd(uart->uart_device, ENABLE);
- break;
- }
-
- return RT_EOK;
-}
-
-/*
- * serial register for STM32
- * support STM32F103VB and STM32F103ZE
- */
-rt_err_t rt_hw_serial_register(rt_device_t device, const char* name, rt_uint32_t flag, struct stm32_serial_device *serial)
-{
- RT_ASSERT(device != RT_NULL);
-
- if ((flag & RT_DEVICE_FLAG_DMA_RX) ||
- (flag & RT_DEVICE_FLAG_INT_TX))
- {
- RT_ASSERT(0);
- }
-
- 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 stm32_serial_device* uart = (struct stm32_serial_device*) device->user_data;
-
- if(USART_GetITStatus(uart->uart_device, USART_IT_RXNE) != RESET)
- {
- /* interrupt mode receive */
- RT_ASSERT(device->flag & RT_DEVICE_FLAG_INT_RX);
-
- /* save on rx buffer */
- while (uart->uart_device->SR & USART_FLAG_RXNE)
- {
- rt_base_t level;
-
- /* disable interrupt */
- level = rt_hw_interrupt_disable();
-
- /* save character */
- uart->int_rx->rx_buffer[uart->int_rx->save_index] = uart->uart_device->DR & 0xff;
- 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);
- }
-
- /* clear interrupt */
- USART_ClearITPendingBit(uart->uart_device, USART_IT_RXNE);
-
- /* 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);
- }
- }
-
- if (USART_GetITStatus(uart->uart_device, USART_IT_TC) != RESET)
- {
- /* clear interrupt */
- USART_ClearITPendingBit(uart->uart_device, USART_IT_TC);
- }
-}
-
-/*
- * ISR for DMA mode Tx
- */
-void rt_hw_serial_dma_tx_isr(rt_device_t device)
-{
- rt_uint32_t level;
- struct stm32_serial_data_node* data_node;
- struct stm32_serial_device* uart = (struct stm32_serial_device*) device->user_data;
-
- /* DMA mode receive */
- RT_ASSERT(device->flag & RT_DEVICE_FLAG_DMA_TX);
-
- /* get the first data node */
- data_node = uart->dma_tx->list_head;
- RT_ASSERT(data_node != RT_NULL);
-
- /* invoke call to notify tx complete */
- if (device->tx_complete != RT_NULL)
- device->tx_complete(device, data_node->data_ptr);
-
- /* disable interrupt */
- level = rt_hw_interrupt_disable();
-
- /* remove list head */
- uart->dma_tx->list_head = data_node->next;
- if (uart->dma_tx->list_head == RT_NULL) /* data link empty */
- uart->dma_tx->list_tail = RT_NULL;
-
- /* enable interrupt */
- rt_hw_interrupt_enable(level);
-
- /* release data node memory */
- rt_mp_free(data_node);
-
- if (uart->dma_tx->list_head != RT_NULL)
- {
- /* transmit next data node */
- rt_serial_enable_dma(uart->dma_tx->dma_channel,
- (rt_uint32_t)uart->dma_tx->list_head->data_ptr,
- uart->dma_tx->list_head->data_size);
- }
- else
- {
- /* no data to be transmitted, disable DMA */
- DMA_Cmd(uart->dma_tx->dma_channel, DISABLE);
- }
-}
-
-/*@}*/
diff --git a/bsp/stm32f40x/drivers/serial.h b/bsp/stm32f40x/drivers/serial.h
deleted file mode 100644
index 62c24a729e..0000000000
--- a/bsp/stm32f40x/drivers/serial.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * File : serial.h
- * This file is part of RT-Thread RTOS
- * COPYRIGHT (C) 2009 - 2010, 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-01-05 Bernard first version
- * 2010-03-29 Bernard remove interrupt tx and DMA rx mode.
- */
-#ifndef __RT_HW_SERIAL_H__
-#define __RT_HW_SERIAL_H__
-
-#include <rthw.h>
-#include <rtthread.h>
-
-/* STM32F40x library definitions */
-#include <stm32f4xx.h>
-
-#define UART_RX_BUFFER_SIZE 64
-#define UART_TX_DMA_NODE_SIZE 4
-
-/* data node for Tx Mode */
-struct stm32_serial_data_node
-{
- rt_uint8_t *data_ptr;
- rt_size_t data_size;
- struct stm32_serial_data_node *next, *prev;
-};
-struct stm32_serial_dma_tx
-{
- /* DMA Channel */
- DMA_Stream_TypeDef* dma_channel;
-
- /* data list head and tail */
- struct stm32_serial_data_node *list_head, *list_tail;
-
- /* data node memory pool */
- struct rt_mempool data_node_mp;
- rt_uint8_t data_node_mem_pool[UART_TX_DMA_NODE_SIZE *
- (sizeof(struct stm32_serial_data_node) + sizeof(void*))];
-};
-
-struct stm32_serial_int_rx
-{
- rt_uint8_t rx_buffer[UART_RX_BUFFER_SIZE];
- rt_uint32_t read_index, save_index;
-};
-
-struct stm32_serial_device
-{
- USART_TypeDef* uart_device;
-
- /* rx structure */
- struct stm32_serial_int_rx* int_rx;
-
- /* tx structure */
- struct stm32_serial_dma_tx* dma_tx;
-};
-
-rt_err_t rt_hw_serial_register(rt_device_t device, const char* name, rt_uint32_t flag, struct stm32_serial_device *serial);
-
-void rt_hw_serial_isr(rt_device_t device);
-void rt_hw_serial_dma_tx_isr(rt_device_t device);
-
-#endif
diff --git a/bsp/stm32f40x/drivers/stm32f4xx_it.c b/bsp/stm32f40x/drivers/stm32f4xx_it.c
index 6c4ea2226a..c2dd528276 100644
--- a/bsp/stm32f40x/drivers/stm32f4xx_it.c
+++ b/bsp/stm32f40x/drivers/stm32f4xx_it.c
@@ -55,16 +55,6 @@ void NMI_Handler(void)
}
/**
- * @brief This function handles Hard Fault exception.
- * @param None
- * @retval None
- */
-//void HardFault_Handler(void)
-//{
-// // definition in libcpu/arm/cortex-m4/context_*.S
-//}
-
-/**
* @brief This function handles Memory Manage exception.
* @param None
* @retval None
@@ -113,100 +103,6 @@ void SVC_Handler(void)
}
/**
- * @brief This function handles Debug Monitor exception.
- * @param None
- * @retval None
- */
-//void DebugMon_Handler(void)
-//{
- // defined in gdb/libcpu/cortexm/gdb_gcc.S
-//}
-
-/**
- * @brief This function handles PendSVC exception.
- * @param None
- * @retval None
- */
-//void PendSV_Handler(void)
-//{
-// // defined in libcpu/arm/cortex-m4/context_*.S
-//}
-
-/**
- * @brief This function handles SysTick Handler.
- * @param None
- * @retval None
- */
-//void SysTick_Handler(void)
-//{
-// // defined in boarc.c
-//}
-
-/******************************************************************************/
-/* STM32F4xx Peripherals Interrupt Handlers */
-/* Add here the Interrupt Handler for the used peripheral(s) (PPP), for the */
-/* available peripheral interrupt handler's name please refer to the startup */
-/* file (startup_stm32f4xx.s). */
-/******************************************************************************/
-
-/**
- * @brief This function handles PPP interrupt request.
- * @param None
- * @retval None
- */
-/*void PPP_IRQHandler(void)
-{
-}*/
-
-void USART1_IRQHandler(void)
-{
-#ifdef RT_USING_UART1
- extern struct rt_device uart1_device;
- extern void rt_hw_serial_isr(struct rt_device *device);
-
- /* enter interrupt */
- rt_interrupt_enter();
-
- rt_hw_serial_isr(&uart1_device);
-
- /* leave interrupt */
- rt_interrupt_leave();
-#endif
-}
-
-void USART2_IRQHandler(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
-}
-
-void USART3_IRQHandler(void)
-{
-#ifdef RT_USING_UART3
- extern struct rt_device uart3_device;
- extern void rt_hw_serial_isr(struct rt_device *device);
-
- /* enter interrupt */
- rt_interrupt_enter();
-
- rt_hw_serial_isr(&uart3_device);
-
- /* leave interrupt */
- rt_interrupt_leave();
-#endif
-}
-
-/**
* @}
*/
diff --git a/bsp/stm32f40x/drivers/usart.c b/bsp/stm32f40x/drivers/usart.c
index d352081d2b..2b21748ac2 100644
--- a/bsp/stm32f40x/drivers/usart.c
+++ b/bsp/stm32f40x/drivers/usart.c
@@ -12,85 +12,22 @@
* 2009-01-05 Bernard the first version
* 2010-03-29 Bernard remove interrupt Tx and DMA Rx mode
* 2012-02-08 aozima update for F4.
+ * 2012-07-28 aozima update for ART board.
*/
#include "stm32f4xx.h"
#include "usart.h"
#include "board.h"
-#include <serial.h>
-/*
- * Use UART1 as console output and finsh input
- * interrupt Rx and poll Tx (stream mode)
- *
- * Use UART2 with interrupt Rx and poll Tx
- * Use UART3 with DMA Tx and interrupt Rx -- DMA channel 2
- *
- * USART DMA setting on STM32
- * USART1 Tx --> DMA Channel 4
- * USART1 Rx --> DMA Channel 5
- * USART2 Tx --> DMA Channel 7
- * USART2 Rx --> DMA Channel 6
- * USART3 Tx --> DMA Channel 2
- * USART3 Rx --> DMA Channel 3
- */
-
-#ifdef RT_USING_UART1
-struct stm32_serial_int_rx uart1_int_rx;
-struct stm32_serial_device uart1 =
-{
- USART1,
- &uart1_int_rx,
- RT_NULL
-};
-struct rt_device uart1_device;
-#endif
+#include <rtdevice.h>
-#ifdef RT_USING_UART2
-struct stm32_serial_int_rx uart2_int_rx;
-struct stm32_serial_device uart2 =
-{
- USART2,
- &uart2_int_rx,
- RT_NULL
-};
-struct rt_device uart2_device;
-#endif
-
-#ifdef RT_USING_UART3
-struct stm32_serial_int_rx uart3_int_rx;
-struct stm32_serial_dma_tx uart3_dma_tx;
-struct stm32_serial_device uart3 =
-{
- USART3,
- &uart3_int_rx,
- &uart3_dma_tx
-};
-struct rt_device uart3_device;
-#endif
-
-#ifdef RT_USING_UART6
-struct stm32_serial_int_rx uart6_int_rx;
-struct stm32_serial_device uart6 =
-{
- USART6,
- &uart6_int_rx,
- RT_NULL
-};
-struct rt_device uart6_device;
-#endif
-
-//#define USART1_DR_Base 0x40013804
-//#define USART2_DR_Base 0x40004404
-//#define USART3_DR_Base 0x40004804
-
-/* USART1_REMAP = 0 */
-#define UART1_GPIO_TX GPIO_Pin_9
-#define UART1_TX_PIN_SOURCE GPIO_PinSource9
-#define UART1_GPIO_RX GPIO_Pin_10
-#define UART1_RX_PIN_SOURCE GPIO_PinSource10
-#define UART1_GPIO GPIOA
-#define UART1_GPIO_RCC RCC_AHB1Periph_GPIOA
+/* UART GPIO define. */
+#define UART1_GPIO_TX GPIO_Pin_6
+#define UART1_TX_PIN_SOURCE GPIO_PinSource6
+#define UART1_GPIO_RX GPIO_Pin_7
+#define UART1_RX_PIN_SOURCE GPIO_PinSource7
+#define UART1_GPIO GPIOB
+#define UART1_GPIO_RCC RCC_AHB1Periph_GPIOB
#define RCC_APBPeriph_UART1 RCC_APB2Periph_USART1
#define UART1_TX_DMA DMA1_Channel4
#define UART1_RX_DMA DMA1_Channel5
@@ -102,58 +39,248 @@ struct rt_device uart6_device;
#define UART2_GPIO GPIOA
#define UART2_GPIO_RCC RCC_AHB1Periph_GPIOA
#define RCC_APBPeriph_UART2 RCC_APB1Periph_USART2
+#define UART2_TX_DMA DMA1_Channel4
+#define UART2_RX_DMA DMA1_Channel5
-/* USART3_REMAP[1:0] = 00 */
-#define UART3_GPIO_TX GPIO_Pin_10
-#define UART3_TX_PIN_SOURCE GPIO_PinSource10
-#define UART3_GPIO_RX GPIO_Pin_11
-#define UART3_RX_PIN_SOURCE GPIO_PinSource11
-#define UART3_GPIO GPIOB
-#define UART3_GPIO_RCC RCC_AHB1Periph_GPIOB
+#define UART3_GPIO_TX GPIO_Pin_8
+#define UART3_TX_PIN_SOURCE GPIO_PinSource8
+#define UART3_GPIO_RX GPIO_Pin_9
+#define UART3_RX_PIN_SOURCE GPIO_PinSource9
+#define UART3_GPIO GPIOD
+#define UART3_GPIO_RCC RCC_AHB1Periph_GPIOD
#define RCC_APBPeriph_UART3 RCC_APB1Periph_USART3
#define UART3_TX_DMA DMA1_Stream1
#define UART3_RX_DMA DMA1_Stream3
-#define UART6_GPIO_TX GPIO_Pin_6
-#define UART6_TX_PIN_SOURCE GPIO_PinSource6
-#define UART6_GPIO_RX GPIO_Pin_7
-#define UART6_RX_PIN_SOURCE GPIO_PinSource7
-#define UART6_GPIO GPIOC
-#define UART6_GPIO_RCC RCC_AHB1Periph_GPIOC
-#define RCC_APBPeriph_UART6 RCC_APB2Periph_USART6
+/* STM32 uart driver */
+struct stm32_uart
+{
+ USART_TypeDef *uart_device;
+ IRQn_Type irq;
+};
+
+static rt_err_t stm32_configure(struct rt_serial_device *serial, struct serial_configure *cfg)
+{
+ struct stm32_uart *uart;
+ USART_InitTypeDef USART_InitStructure;
+
+ RT_ASSERT(serial != RT_NULL);
+ RT_ASSERT(cfg != RT_NULL);
+
+ uart = (struct stm32_uart *)serial->parent.user_data;
+
+ if (cfg->baud_rate == BAUD_RATE_9600)
+ USART_InitStructure.USART_BaudRate = 9600;
+ else if (cfg->baud_rate == BAUD_RATE_115200)
+ USART_InitStructure.USART_BaudRate = 115200;
+
+ if (cfg->data_bits == DATA_BITS_8)
+ USART_InitStructure.USART_WordLength = USART_WordLength_8b;
+
+ if (cfg->stop_bits == STOP_BITS_1)
+ USART_InitStructure.USART_StopBits = USART_StopBits_1;
+ else if (cfg->stop_bits == STOP_BITS_2)
+ USART_InitStructure.USART_StopBits = USART_StopBits_2;
+
+ USART_InitStructure.USART_Parity = USART_Parity_No;
+ USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
+ USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
+ USART_Init(uart->uart_device, &USART_InitStructure);
+
+ /* Enable USART */
+ USART_Cmd(uart->uart_device, ENABLE);
+
+ return RT_EOK;
+}
+
+static rt_err_t stm32_control(struct rt_serial_device *serial, int cmd, void *arg)
+{
+ struct stm32_uart *uart;
+
+ RT_ASSERT(serial != RT_NULL);
+ uart = (struct stm32_uart *)serial->parent.user_data;
+
+ switch (cmd)
+ {
+ case RT_DEVICE_CTRL_CLR_INT:
+ /* disable rx irq */
+ UART_DISABLE_IRQ(uart->irq);
+ /* disable interrupt */
+ USART_ITConfig(uart->uart_device, USART_IT_RXNE, DISABLE);
+ break;
+ case RT_DEVICE_CTRL_SET_INT:
+ /* enable rx irq */
+ UART_ENABLE_IRQ(uart->irq);
+ /* enable interrupt */
+ USART_ITConfig(uart->uart_device, USART_IT_RXNE, ENABLE);
+ break;
+ }
+
+ return RT_EOK;
+}
+
+static int stm32_putc(struct rt_serial_device *serial, char c)
+{
+ struct stm32_uart *uart;
+
+ RT_ASSERT(serial != RT_NULL);
+ uart = (struct stm32_uart *)serial->parent.user_data;
+
+ while (!(uart->uart_device->SR & USART_FLAG_TXE));
+ uart->uart_device->DR = c;
+
+ return 1;
+}
+
+static int stm32_getc(struct rt_serial_device *serial)
+{
+ int ch;
+ struct stm32_uart *uart;
+
+ RT_ASSERT(serial != RT_NULL);
+ uart = (struct stm32_uart *)serial->parent.user_data;
+
+ ch = -1;
+ if (uart->uart_device->SR & USART_FLAG_RXNE)
+ {
+ ch = uart->uart_device->DR & 0xff;
+ }
+
+ return ch;
+}
+
+static const struct rt_uart_ops stm32_uart_ops =
+{
+ stm32_configure,
+ stm32_control,
+ stm32_putc,
+ stm32_getc,
+};
+
+#if defined(RT_USING_UART1)
+/* UART1 device driver structure */
+struct stm32_uart uart1 =
+{
+ USART1,
+ USART1_IRQn,
+};
+struct rt_serial_device serial1;
+
+void USART1_IRQHandler(void)
+{
+ struct stm32_uart *uart;
+
+ uart = &uart1;
+
+ /* enter interrupt */
+ rt_interrupt_enter();
+ if (USART_GetITStatus(uart->uart_device, USART_IT_RXNE) != RESET)
+ {
+ rt_hw_serial_isr(&serial1, RT_SERIAL_EVENT_RX_IND);
+ /* clear interrupt */
+ USART_ClearITPendingBit(uart->uart_device, USART_IT_RXNE);
+ }
+ if (USART_GetITStatus(uart->uart_device, USART_IT_TC) != RESET)
+ {
+ /* clear interrupt */
+ USART_ClearITPendingBit(uart->uart_device, USART_IT_TC);
+ }
+
+ /* leave interrupt */
+ rt_interrupt_leave();
+}
+#endif /* RT_USING_UART1 */
+
+#if defined(RT_USING_UART2)
+/* UART2 device driver structure */
+struct stm32_uart uart2 =
+{
+ USART2,
+ USART2_IRQn,
+};
+struct rt_serial_device serial2;
+
+void USART2_IRQHandler(void)
+{
+ struct stm32_uart *uart;
+
+ uart = &uart2;
+
+ /* enter interrupt */
+ rt_interrupt_enter();
+ if (USART_GetITStatus(uart->uart_device, USART_IT_RXNE) != RESET)
+ {
+ rt_hw_serial_isr(&serial2, RT_SERIAL_EVENT_RX_IND);
+ /* clear interrupt */
+ USART_ClearITPendingBit(uart->uart_device, USART_IT_RXNE);
+ }
+ if (USART_GetITStatus(uart->uart_device, USART_IT_TC) != RESET)
+ {
+ /* clear interrupt */
+ USART_ClearITPendingBit(uart->uart_device, USART_IT_TC);
+ }
+
+ /* leave interrupt */
+ rt_interrupt_leave();
+}
+#endif /* RT_USING_UART2 */
+
+#if defined(RT_USING_UART3)
+/* UART3 device driver structure */
+struct stm32_uart uart3 =
+{
+ USART3,
+ USART3_IRQn,
+};
+struct rt_serial_device serial3;
+
+void USART3_IRQHandler(void)
+{
+ struct stm32_uart *uart;
+
+ uart = &uart3;
+
+ /* enter interrupt */
+ rt_interrupt_enter();
+ if (USART_GetITStatus(uart->uart_device, USART_IT_RXNE) != RESET)
+ {
+ rt_hw_serial_isr(&serial3, RT_SERIAL_EVENT_RX_IND);
+ /* clear interrupt */
+ USART_ClearITPendingBit(uart->uart_device, USART_IT_RXNE);
+ }
+ if (USART_GetITStatus(uart->uart_device, USART_IT_TC) != RESET)
+ {
+ /* clear interrupt */
+ USART_ClearITPendingBit(uart->uart_device, USART_IT_TC);
+ }
+
+ /* leave interrupt */
+ rt_interrupt_leave();
+}
+#endif /* RT_USING_UART3 */
static void RCC_Configuration(void)
{
#ifdef RT_USING_UART1
- /* Enable USART2 GPIO clocks */
+ /* Enable UART1 GPIO clocks */
RCC_AHB1PeriphClockCmd(UART1_GPIO_RCC, ENABLE);
- /* Enable USART2 clock */
+ /* Enable UART1 clock */
RCC_APB2PeriphClockCmd(RCC_APBPeriph_UART1, ENABLE);
-#endif
+#endif /* RT_USING_UART1 */
#ifdef RT_USING_UART2
- /* Enable USART2 GPIO clocks */
+ /* Enable UART2 GPIO clocks */
RCC_AHB1PeriphClockCmd(UART2_GPIO_RCC, ENABLE);
- /* Enable USART2 clock */
+ /* Enable UART2 clock */
RCC_APB1PeriphClockCmd(RCC_APBPeriph_UART2, ENABLE);
-#endif
+#endif /* RT_USING_UART1 */
#ifdef RT_USING_UART3
- /* Enable USART3 GPIO clocks */
+ /* Enable UART3 GPIO clocks */
RCC_AHB1PeriphClockCmd(UART3_GPIO_RCC, ENABLE);
- /* Enable USART3 clock */
+ /* Enable UART3 clock */
RCC_APB1PeriphClockCmd(RCC_APBPeriph_UART3, ENABLE);
-
- /* DMA clock enable */
- RCC_APB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);
-#endif
-
-#ifdef RT_USING_UART6
- /* Enable USART6 GPIO clocks */
- RCC_AHB1PeriphClockCmd(UART6_GPIO_RCC, ENABLE);
- /* Enable USART6 clock */
- RCC_APB2PeriphClockCmd(RCC_APBPeriph_UART6, ENABLE);
-#endif
+#endif /* RT_USING_UART3 */
}
static void GPIO_Configuration(void)
@@ -173,17 +300,17 @@ static void GPIO_Configuration(void)
/* Connect alternate function */
GPIO_PinAFConfig(UART1_GPIO, UART1_TX_PIN_SOURCE, GPIO_AF_USART1);
GPIO_PinAFConfig(UART1_GPIO, UART1_RX_PIN_SOURCE, GPIO_AF_USART1);
-#endif
+#endif /* RT_USING_UART1 */
#ifdef RT_USING_UART2
/* Configure USART2 Rx/tx PIN */
- GPIO_InitStructure.GPIO_Pin = UART2_GPIO_TX | UART2_GPIO_RX;
+ GPIO_InitStructure.GPIO_Pin = UART2_GPIO_RX | UART2_GPIO_TX;
GPIO_Init(UART2_GPIO, &GPIO_InitStructure);
/* Connect alternate function */
GPIO_PinAFConfig(UART2_GPIO, UART2_TX_PIN_SOURCE, GPIO_AF_USART2);
GPIO_PinAFConfig(UART2_GPIO, UART2_RX_PIN_SOURCE, GPIO_AF_USART2);
-#endif
+#endif /* RT_USING_UART2 */
#ifdef RT_USING_UART3
/* Configure USART3 Rx/tx PIN */
@@ -193,217 +320,74 @@ static void GPIO_Configuration(void)
/* Connect alternate function */
GPIO_PinAFConfig(UART3_GPIO, UART3_TX_PIN_SOURCE, GPIO_AF_USART3);
GPIO_PinAFConfig(UART3_GPIO, UART3_RX_PIN_SOURCE, GPIO_AF_USART3);
-#endif
-
-#ifdef RT_USING_UART6
- /* Configure USART6 Rx/tx PIN */
- GPIO_InitStructure.GPIO_Pin = UART6_GPIO_TX | UART6_GPIO_RX;
- GPIO_Init(UART6_GPIO, &GPIO_InitStructure);
-
- /* Connect alternate function */
- GPIO_PinAFConfig(UART6_GPIO, UART6_TX_PIN_SOURCE, GPIO_AF_USART6);
- GPIO_PinAFConfig(UART6_GPIO, UART6_RX_PIN_SOURCE, GPIO_AF_USART6);
-#endif
+#endif /* RT_USING_UART3 */
}
-static void NVIC_Configuration(void)
+static void NVIC_Configuration(struct stm32_uart *uart)
{
NVIC_InitTypeDef NVIC_InitStructure;
-#ifdef RT_USING_UART1
/* Enable the USART1 Interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
+ NVIC_InitStructure.NVIC_IRQChannel = uart->irq;
+ NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
-#endif
-
-#ifdef RT_USING_UART2
- /* Enable the USART2 Interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
-#endif
-
-#ifdef RT_USING_UART3
- /* Enable the USART3 Interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
-
- /* Enable the DMA1 Channel2 Interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream1_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
-#endif
-
-#ifdef RT_USING_UART6
- /* Enable the USART6 Interrupt */
- NVIC_InitStructure.NVIC_IRQChannel = USART6_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
-#endif
-}
-
-static void DMA_Configuration(void)
-{
-#if defined (RT_USING_UART3)
- DMA_InitTypeDef DMA_InitStructure;
-
-// /* Configure DMA Stream */
-// DMA_InitStructure.DMA_Channel = DMA_CHANNEL;
-// DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SRC_Const_Buffer;
-// DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)DST_Buffer;
-// DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToMemory;
-// DMA_InitStructure.DMA_BufferSize = (uint32_t)BUFFER_SIZE;
-// DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable;
-// DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
-// DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
-// DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
-// DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
-// DMA_InitStructure.DMA_Priority = DMA_Priority_High;
-// DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
-// DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
-// DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
-// DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
-// DMA_Init(DMA_STREAM, &DMA_InitStructure);
-
- /* Configure DMA Stream */
- DMA_InitStructure.DMA_Channel = DMA_Channel_0;
- DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&USART3->DR);
- DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)0;
- DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
- DMA_InitStructure.DMA_BufferSize = (uint32_t)0;
- DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
- DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
- DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
- DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
- DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
- DMA_InitStructure.DMA_Priority = DMA_Priority_High;
- DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
- DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_Full;
- DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
- DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
-
- DMA_DeInit(UART3_TX_DMA);
- DMA_Init(UART3_TX_DMA, &DMA_InitStructure);
-
-// /* fill init structure */
-// DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
-// DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
-// DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
-// DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
-// DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
-// DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh;
-// DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
-//
-// /* DMA1 Channel5 (triggered by USART3 Tx event) Config */
-// DMA_DeInit(UART3_TX_DMA);
-// DMA_InitStructure.DMA_PeripheralBaseAddr = USART3_DR_Base;
-// DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
-// DMA_InitStructure.DMA_MemoryBaseAddr = (u32)0;
-// DMA_InitStructure.DMA_BufferSize = 0;
-// DMA_Init(UART3_TX_DMA, &DMA_InitStructure);
- DMA_ITConfig(UART3_TX_DMA, DMA_IT_TC | DMA_IT_TE, ENABLE);
-// DMA_ClearFlag(DMA1_FLAG_TC5);
-#endif
}
-volatile USART_TypeDef * uart2_debug = USART2;
-/*
- * Init all related hardware in here
- * rt_hw_serial_init() will register all supported USART device
- */
-void rt_hw_usart_init()
+int stm32_hw_usart_init(void)
{
- USART_InitTypeDef USART_InitStructure;
+ struct stm32_uart *uart;
+ struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;
RCC_Configuration();
-
GPIO_Configuration();
- NVIC_Configuration();
-
- DMA_Configuration();
-
- /* uart init */
#ifdef RT_USING_UART1
- USART_InitStructure.USART_BaudRate = 115200;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_No;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- USART_Init(USART1, &USART_InitStructure);
+ uart = &uart1;
+
+ serial1.ops = &stm32_uart_ops;
+ serial1.config = config;
- /* register uart1 */
- rt_hw_serial_register(&uart1_device, "uart1",
- RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX,
- &uart1);
+ NVIC_Configuration(&uart1);
- /* enable interrupt */
- USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
-#endif
+ /* register UART1 device */
+ rt_hw_serial_register(&serial1,
+ "uart1",
+ RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX,
+ uart);
+#endif /* RT_USING_UART1 */
#ifdef RT_USING_UART2
- USART_InitStructure.USART_BaudRate = 115200;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_No;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- USART_Init(USART2, &USART_InitStructure);
+ uart = &uart2;
- /* register uart2 */
- rt_hw_serial_register(&uart2_device, "uart2",
- RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX,
- &uart2);
+ serial2.ops = &stm32_uart_ops;
+ serial2.config = config;
- /* Enable USART2 DMA Rx request */
- USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
-#endif
+ NVIC_Configuration(&uart2);
-#ifdef RT_USING_UART3
- USART_InitStructure.USART_BaudRate = 115200;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_No;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- USART_Init(USART3, &USART_InitStructure);
-
-// uart3_dma_tx.dma_channel= UART3_TX_DMA;
+ /* register UART1 device */
+ rt_hw_serial_register(&serial2,
+ "uart2",
+ RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX,
+ uart);
+#endif /* RT_USING_UART2 */
- /* register uart3 */
- rt_hw_serial_register(&uart3_device, "uart3",
- RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_DMA_TX,
- &uart3);
+#ifdef RT_USING_UART3
+ uart = &uart3;
- /* Enable USART3 DMA Tx request */
- USART_DMACmd(USART3, USART_DMAReq_Tx , ENABLE);
+ serial3.ops = &stm32_uart_ops;
+ serial3.config = config;
- /* enable interrupt */
- USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
-#endif
+ NVIC_Configuration(&uart3);
-#ifdef RT_USING_UART6
- USART_InitStructure.USART_BaudRate = 9600;
- USART_InitStructure.USART_WordLength = USART_WordLength_8b;
- USART_InitStructure.USART_StopBits = USART_StopBits_1;
- USART_InitStructure.USART_Parity = USART_Parity_No;
- USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
- USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
- USART_Init(USART6, &USART_InitStructure);
+ /* register UART3 device */
+ rt_hw_serial_register(&serial3,
+ "uart3",
+ RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX,
+ uart);
+#endif /* RT_USING_UART3 */
- /* register uart6 */
- rt_hw_serial_register(&uart6_device, "uart6",
- RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX,
- &uart6);
-#endif
+ return 0;
}
+INIT_BOARD_EXPORT(stm32_hw_usart_init);
diff --git a/bsp/stm32f40x/drivers/usart.h b/bsp/stm32f40x/drivers/usart.h
index 48925df880..3faf85fcde 100644
--- a/bsp/stm32f40x/drivers/usart.h
+++ b/bsp/stm32f40x/drivers/usart.h
@@ -18,6 +18,9 @@
#include <rthw.h>
#include <rtthread.h>
-void rt_hw_usart_init(void);
+#define UART_ENABLE_IRQ(n) NVIC_EnableIRQ((n))
+#define UART_DISABLE_IRQ(n) NVIC_DisableIRQ((n))
+
+int stm32_hw_usart_init(void);
#endif
diff --git a/bsp/stm32f40x/project.uvopt b/bsp/stm32f40x/project.uvopt
deleted file mode 100644
index 9661193e93..0000000000
--- a/bsp/stm32f40x/project.uvopt
+++ /dev/null
@@ -1,1206 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
-<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_opt.xsd">
-
- <SchemaVersion>1.0</SchemaVersion>
-
- <Header>### uVision Project, (C) Keil Software</Header>
-
- <Extensions>
- <cExt>*.c</cExt>
- <aExt>*.s*; *.src; *.a*</aExt>
- <oExt>*.obj</oExt>
- <lExt>*.lib</lExt>
- <tExt>*.txt; *.h; *.inc</tExt>
- <pExt>*.plm</pExt>
- <CppX>*.cpp</CppX>
- </Extensions>
-
- <DaveTm>
- <dwLowDateTime>0</dwLowDateTime>
- <dwHighDateTime>0</dwHighDateTime>
- </DaveTm>
-
- <Target>
- <TargetName>rt-thread</TargetName>
- <ToolsetNumber>0x4</ToolsetNumber>
- <ToolsetName>ARM-ADS</ToolsetName>
- <TargetOption>
- <CLKADS>25000000</CLKADS>
- <OPTTT>
- <gFlags>1</gFlags>
- <BeepAtEnd>1</BeepAtEnd>
- <RunSim>1</RunSim>
- <RunTarget>0</RunTarget>
- </OPTTT>
- <OPTHX>
- <HexSelection>1</HexSelection>
- <FlashByte>65535</FlashByte>
- <HexRangeLowAddress>0</HexRangeLowAddress>
- <HexRangeHighAddress>0</HexRangeHighAddress>
- <HexOffset>0</HexOffset>
- </OPTHX>
- <OPTLEX>
- <PageWidth>79</PageWidth>
- <PageLength>66</PageLength>
- <TabStop>8</TabStop>
- <ListingPath>.\build\</ListingPath>
- </OPTLEX>
- <ListingPage>
- <CreateCListing>1</CreateCListing>
- <CreateAListing>1</CreateAListing>
- <CreateLListing>1</CreateLListing>
- <CreateIListing>0</CreateIListing>
- <AsmCond>1</AsmCond>
- <AsmSymb>1</AsmSymb>
- <AsmXref>0</AsmXref>
- <CCond>1</CCond>
- <CCode>0</CCode>
- <CListInc>0</CListInc>
- <CSymb>0</CSymb>
- <LinkerCodeListing>0</LinkerCodeListing>
- </ListingPage>
- <OPTXL>
- <LMap>1</LMap>
- <LComments>1</LComments>
- <LGenerateSymbols>1</LGenerateSymbols>
- <LLibSym>1</LLibSym>
- <LLines>1</LLines>
- <LLocSym>1</LLocSym>
- <LPubSym>1</LPubSym>
- <LXref>0</LXref>
- <LExpSel>0</LExpSel>
- </OPTXL>
- <OPTFL>
- <tvExp>1</tvExp>
- <tvExpOptDlg>0</tvExpOptDlg>
- <IsCurrentTarget>1</IsCurrentTarget>
- </OPTFL>
- <CpuCode>0</CpuCode>
- <DllOpt>
- <SimDllName>SARMCM3.DLL</SimDllName>
- <SimDllArguments>-MPU</SimDllArguments>
- <SimDlgDllName>DCM.DLL</SimDlgDllName>
- <SimDlgDllArguments>-pCM4</SimDlgDllArguments>
- <TargetDllName>SARMCM3.DLL</TargetDllName>
- <TargetDllArguments>-MPU</TargetDllArguments>
- <TargetDlgDllName>TCM.DLL</TargetDlgDllName>
- <TargetDlgDllArguments>-pCM4</TargetDlgDllArguments>
- </DllOpt>
- <DebugOpt>
- <uSim>0</uSim>
- <uTrg>1</uTrg>
- <sLdApp>1</sLdApp>
- <sGomain>1</sGomain>
- <sRbreak>1</sRbreak>
- <sRwatch>1</sRwatch>
- <sRmem>1</sRmem>
- <sRfunc>1</sRfunc>
- <sRbox>1</sRbox>
- <tLdApp>1</tLdApp>
- <tGomain>1</tGomain>
- <tRbreak>1</tRbreak>
- <tRwatch>1</tRwatch>
- <tRmem>1</tRmem>
- <tRfunc>0</tRfunc>
- <tRbox>1</tRbox>
- <sRunDeb>0</sRunDeb>
- <sLrtime>0</sLrtime>
- <nTsel>8</nTsel>
- <sDll></sDll>
- <sDllPa></sDllPa>
- <sDlgDll></sDlgDll>
- <sDlgPa></sDlgPa>
- <sIfile></sIfile>
- <tDll></tDll>
- <tDllPa></tDllPa>
- <tDlgDll></tDlgDll>
- <tDlgPa></tDlgPa>
- <tIfile></tIfile>
- <pMon>STLink\ST-LINKIII-KEIL.dll</pMon>
- </DebugOpt>
- <TargetDriverDllRegistry>
- <SetRegEntry>
- <Number>0</Number>
- <Key>DLGTARM</Key>
- <Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0)</Name>
- </SetRegEntry>
- <SetRegEntry>
- <Number>0</Number>
- <Key>ARMDBGFLAGS</Key>
- <Name></Name>
- </SetRegEntry>
- <SetRegEntry>
- <Number>0</Number>
- <Key>ST-LINKIII-KEIL</Key>
- <Name>-S</Name>
- </SetRegEntry>
- </TargetDriverDllRegistry>
- <WatchWindow1>
- <Ww>
- <count>0</count>
- <WinNumber>1</WinNumber>
- <ItemText>f_var1</ItemText>
- </Ww>
- <Ww>
- <count>1</count>
- <WinNumber>1</WinNumber>
- <ItemText>f_var2</ItemText>
- </Ww>
- <Ww>
- <count>2</count>
- <WinNumber>1</WinNumber>
- <ItemText>f_var3</ItemText>
- </Ww>
- <Ww>
- <count>3</count>
- <WinNumber>1</WinNumber>
- <ItemText>f_var4</ItemText>
- </Ww>
- </WatchWindow1>
- <WatchWindow2>
- <Ww>
- <count>0</count>
- <WinNumber>2</WinNumber>
- <ItemText>f_var2</ItemText>
- </Ww>
- </WatchWindow2>
- <DebugFlag>
- <trace>0</trace>
- <periodic>0</periodic>
- <aLwin>0</aLwin>
- <aCover>0</aCover>
- <aSer1>0</aSer1>
- <aSer2>0</aSer2>
- <aPa>0</aPa>
- <viewmode>1</viewmode>
- <vrSel>0</vrSel>
- <aSym>0</aSym>
- <aTbox>0</aTbox>
- <AscS1>0</AscS1>
- <AscS2>0</AscS2>
- <AscS3>0</AscS3>
- <aSer3>0</aSer3>
- <eProf>0</eProf>
- <aLa>0</aLa>
- <aPa1>0</aPa1>
- <AscS4>0</AscS4>
- <aSer4>0</aSer4>
- <StkLoc>0</StkLoc>
- <TrcWin>0</TrcWin>
- <newCpu>0</newCpu>
- <uProt>0</uProt>
- </DebugFlag>
- <LintExecutable></LintExecutable>
- <LintConfigFile></LintConfigFile>
- </TargetOption>
- </Target>
-
- <Group>
- <GroupName>Applications</GroupName>
- <tvExp>0</tvExp>
- <tvExpOptDlg>0</tvExpOptDlg>
- <cbSel>0</cbSel>
- <File>
- <GroupNumber>1</GroupNumber>
- <FileNumber>1</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>32</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>82</TopLine>
- <CurrentLine>96</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>applications\application.c</PathWithFileName>
- <FilenameWithoutPath>application.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>1</GroupNumber>
- <FileNumber>2</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>107</TopLine>
- <CurrentLine>114</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>applications\startup.c</PathWithFileName>
- <FilenameWithoutPath>startup.c</FilenameWithoutPath>
- </File>
- </Group>
-
- <Group>
- <GroupName>Drivers</GroupName>
- <tvExp>0</tvExp>
- <tvExpOptDlg>0</tvExpOptDlg>
- <cbSel>0</cbSel>
- <File>
- <GroupNumber>2</GroupNumber>
- <FileNumber>3</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>drivers\board.c</PathWithFileName>
- <FilenameWithoutPath>board.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>2</GroupNumber>
- <FileNumber>4</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>drivers\serial.c</PathWithFileName>
- <FilenameWithoutPath>serial.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>2</GroupNumber>
- <FileNumber>5</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>drivers\stm32f4xx_it.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_it.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>2</GroupNumber>
- <FileNumber>6</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>drivers\usart.c</PathWithFileName>
- <FilenameWithoutPath>usart.c</FilenameWithoutPath>
- </File>
- </Group>
-
- <Group>
- <GroupName>STM32_StdPeriph</GroupName>
- <tvExp>0</tvExp>
- <tvExpOptDlg>0</tvExpOptDlg>
- <cbSel>0</cbSel>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>7</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\CMSIS\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c</PathWithFileName>
- <FilenameWithoutPath>system_stm32f4xx.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>8</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\misc.c</PathWithFileName>
- <FilenameWithoutPath>misc.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>9</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_adc.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_adc.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>10</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_can.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_can.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>11</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_crc.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_crc.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>12</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_cryp.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_cryp.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>13</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_cryp_aes.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_cryp_aes.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>14</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_cryp_des.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_cryp_des.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>15</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_cryp_tdes.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_cryp_tdes.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>16</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dac.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_dac.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>17</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dbgmcu.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_dbgmcu.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>18</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dcmi.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_dcmi.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>19</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dma.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_dma.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>20</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_exti.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_exti.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>21</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_flash.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_flash.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>22</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_fsmc.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_fsmc.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>23</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_gpio.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_gpio.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>24</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_hash.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_hash.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>25</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_hash_md5.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_hash_md5.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>26</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_hash_sha1.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_hash_sha1.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>27</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_i2c.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_i2c.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>28</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_iwdg.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_iwdg.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>29</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_pwr.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_pwr.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>30</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_rcc.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_rcc.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>31</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_rng.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_rng.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>32</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_rtc.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_rtc.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>33</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_sdio.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_sdio.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>34</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_spi.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_spi.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>35</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_syscfg.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_syscfg.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>36</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_tim.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_tim.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>37</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_usart.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_usart.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>38</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_wwdg.c</PathWithFileName>
- <FilenameWithoutPath>stm32f4xx_wwdg.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>3</GroupNumber>
- <FileNumber>39</FileNumber>
- <FileType>2</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>173</TopLine>
- <CurrentLine>173</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>Libraries\CMSIS\ST\STM32F4xx\Source\Templates\arm\startup_stm32f4xx.s</PathWithFileName>
- <FilenameWithoutPath>startup_stm32f4xx.s</FilenameWithoutPath>
- </File>
- </Group>
-
- <Group>
- <GroupName>Kernel</GroupName>
- <tvExp>0</tvExp>
- <tvExpOptDlg>0</tvExpOptDlg>
- <cbSel>0</cbSel>
- <File>
- <GroupNumber>4</GroupNumber>
- <FileNumber>40</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\clock.c</PathWithFileName>
- <FilenameWithoutPath>clock.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>4</GroupNumber>
- <FileNumber>41</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\device.c</PathWithFileName>
- <FilenameWithoutPath>device.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>4</GroupNumber>
- <FileNumber>42</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>149</TopLine>
- <CurrentLine>156</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\idle.c</PathWithFileName>
- <FilenameWithoutPath>idle.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>4</GroupNumber>
- <FileNumber>43</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\ipc.c</PathWithFileName>
- <FilenameWithoutPath>ipc.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>4</GroupNumber>
- <FileNumber>44</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\irq.c</PathWithFileName>
- <FilenameWithoutPath>irq.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>4</GroupNumber>
- <FileNumber>45</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\kservice.c</PathWithFileName>
- <FilenameWithoutPath>kservice.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>4</GroupNumber>
- <FileNumber>46</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\mem.c</PathWithFileName>
- <FilenameWithoutPath>mem.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>4</GroupNumber>
- <FileNumber>47</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\mempool.c</PathWithFileName>
- <FilenameWithoutPath>mempool.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>4</GroupNumber>
- <FileNumber>48</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\object.c</PathWithFileName>
- <FilenameWithoutPath>object.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>4</GroupNumber>
- <FileNumber>49</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\scheduler.c</PathWithFileName>
- <FilenameWithoutPath>scheduler.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>4</GroupNumber>
- <FileNumber>50</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\thread.c</PathWithFileName>
- <FilenameWithoutPath>thread.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>4</GroupNumber>
- <FileNumber>51</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\src\timer.c</PathWithFileName>
- <FilenameWithoutPath>timer.c</FilenameWithoutPath>
- </File>
- </Group>
-
- <Group>
- <GroupName>CORTEX-M4</GroupName>
- <tvExp>0</tvExp>
- <tvExpOptDlg>0</tvExpOptDlg>
- <cbSel>0</cbSel>
- <File>
- <GroupNumber>5</GroupNumber>
- <FileNumber>52</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\libcpu\arm\cortex-m4\cpuport.c</PathWithFileName>
- <FilenameWithoutPath>cpuport.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>5</GroupNumber>
- <FileNumber>53</FileNumber>
- <FileType>2</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\libcpu\arm\cortex-m4\context_rvds.S</PathWithFileName>
- <FilenameWithoutPath>context_rvds.S</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>5</GroupNumber>
- <FileNumber>54</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\libcpu\arm\common\backtrace.c</PathWithFileName>
- <FilenameWithoutPath>backtrace.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>5</GroupNumber>
- <FileNumber>55</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\libcpu\arm\common\div0.c</PathWithFileName>
- <FilenameWithoutPath>div0.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>5</GroupNumber>
- <FileNumber>56</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\libcpu\arm\common\showmem.c</PathWithFileName>
- <FilenameWithoutPath>showmem.c</FilenameWithoutPath>
- </File>
- </Group>
-
- <Group>
- <GroupName>finsh</GroupName>
- <tvExp>0</tvExp>
- <tvExpOptDlg>0</tvExpOptDlg>
- <cbSel>0</cbSel>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>57</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\cmd.c</PathWithFileName>
- <FilenameWithoutPath>cmd.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>58</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_compiler.c</PathWithFileName>
- <FilenameWithoutPath>finsh_compiler.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>59</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_error.c</PathWithFileName>
- <FilenameWithoutPath>finsh_error.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>60</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_heap.c</PathWithFileName>
- <FilenameWithoutPath>finsh_heap.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>61</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_init.c</PathWithFileName>
- <FilenameWithoutPath>finsh_init.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>62</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_node.c</PathWithFileName>
- <FilenameWithoutPath>finsh_node.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>63</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_ops.c</PathWithFileName>
- <FilenameWithoutPath>finsh_ops.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>64</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_parser.c</PathWithFileName>
- <FilenameWithoutPath>finsh_parser.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>65</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_token.c</PathWithFileName>
- <FilenameWithoutPath>finsh_token.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>66</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_var.c</PathWithFileName>
- <FilenameWithoutPath>finsh_var.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>67</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\finsh_vm.c</PathWithFileName>
- <FilenameWithoutPath>finsh_vm.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>68</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\shell.c</PathWithFileName>
- <FilenameWithoutPath>shell.c</FilenameWithoutPath>
- </File>
- <File>
- <GroupNumber>6</GroupNumber>
- <FileNumber>69</FileNumber>
- <FileType>1</FileType>
- <tvExp>0</tvExp>
- <Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
- <tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>0</TopLine>
- <CurrentLine>0</CurrentLine>
- <bDave2>0</bDave2>
- <PathWithFileName>..\..\components\finsh\symbol.c</PathWithFileName>
- <FilenameWithoutPath>symbol.c</FilenameWithoutPath>
- </File>
- </Group>
-
-</ProjectOpt>
diff --git a/bsp/stm32f40x/project.uvproj b/bsp/stm32f40x/project.uvproj
index a2734d98af..da6c71a151 100644
--- a/bsp/stm32f40x/project.uvproj
+++ b/bsp/stm32f40x/project.uvproj
@@ -343,7 +343,7 @@
<MiscControls />
<Define>USE_STDPERIPH_DRIVER</Define>
<Undefine />
- <IncludePath>.;..\..\components\finsh;..\..\include;..\..\libcpu\arm\common;..\..\libcpu\arm\cortex-m4;Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x;Libraries\CMSIS\Include;Libraries\CMSIS\ST\STM32F4xx\Include;Libraries\STM32F4xx_StdPeriph_Driver\inc;applications;drivers</IncludePath>
+ <IncludePath>applications;.;Libraries/STM32F4xx_StdPeriph_Driver/inc;Libraries/CMSIS/ST/STM32F4xx/Include;Libraries/CMSIS/Include;drivers;../../include;../../libcpu/arm/cortex-m4;../../libcpu/arm/common;../../components/finsh;../../components/drivers/include;../../components/drivers/include;../../components/drivers/include</IncludePath>
</VariousControls>
</Cads>
<Aads>
@@ -386,45 +386,14 @@
<File>
<FileName>application.c</FileName>
<FileType>1</FileType>
- <FilePath>applications\application.c</FilePath>
+ <FilePath>applications/application.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>startup.c</FileName>
<FileType>1</FileType>
- <FilePath>applications\startup.c</FilePath>
- </File>
- </Files>
- </Group>
- <Group>
- <GroupName>Drivers</GroupName>
- <Files>
- <File>
- <FileName>board.c</FileName>
- <FileType>1</FileType>
- <FilePath>drivers\board.c</FilePath>
- </File>
- </Files>
- <Files>
- <File>
- <FileName>serial.c</FileName>
- <FileType>1</FileType>
- <FilePath>drivers\serial.c</FilePath>
- </File>
- </Files>
- <Files>
- <File>
- <FileName>stm32f4xx_it.c</FileName>
- <FileType>1</FileType>
- <FilePath>drivers\stm32f4xx_it.c</FilePath>
- </File>
- </Files>
- <Files>
- <File>
- <FileName>usart.c</FileName>
- <FileType>1</FileType>
- <FilePath>drivers\usart.c</FilePath>
+ <FilePath>applications/startup.c</FilePath>
</File>
</Files>
</Group>
@@ -434,231 +403,262 @@
<File>
<FileName>system_stm32f4xx.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\CMSIS\ST\STM32F4xx\Source\Templates\system_stm32f4xx.c</FilePath>
+ <FilePath>Libraries/CMSIS/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>misc.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\misc.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/misc.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_adc.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_adc.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_adc.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_can.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_can.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_can.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_crc.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_crc.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_crc.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_cryp.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_cryp.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_cryp_aes.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_cryp_aes.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp_aes.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_cryp_des.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_cryp_des.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp_des.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_cryp_tdes.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_cryp_tdes.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_cryp_tdes.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_dac.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dac.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dac.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_dbgmcu.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dbgmcu.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dbgmcu.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_dcmi.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dcmi.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dcmi.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_dma.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_dma.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_dma.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_exti.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_exti.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_exti.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_flash.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_flash.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_flash.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_fsmc.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_fsmc.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_fsmc.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_gpio.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_gpio.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_gpio.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_hash.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_hash.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_hash.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_hash_md5.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_hash_md5.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_hash_md5.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_hash_sha1.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_hash_sha1.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_hash_sha1.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_i2c.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_i2c.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_i2c.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_iwdg.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_iwdg.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_iwdg.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_pwr.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_pwr.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_pwr.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_rcc.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_rcc.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rcc.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_rng.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_rng.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rng.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_rtc.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_rtc.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_rtc.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_sdio.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_sdio.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_sdio.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_spi.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_spi.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_spi.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_syscfg.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_syscfg.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_syscfg.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_tim.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_tim.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_tim.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_usart.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_usart.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_usart.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>stm32f4xx_wwdg.c</FileName>
<FileType>1</FileType>
- <FilePath>Libraries\STM32F4xx_StdPeriph_Driver\src\stm32f4xx_wwdg.c</FilePath>
+ <FilePath>Libraries/STM32F4xx_StdPeriph_Driver/src/stm32f4xx_wwdg.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>startup_stm32f4xx.s</FileName>
<FileType>2</FileType>
- <FilePath>Libraries\CMSIS\ST\STM32F4xx\Source\Templates\arm\startup_stm32f4xx.s</FilePath>
+ <FilePath>Libraries/CMSIS/ST/STM32F4xx/Source/Templates/arm/startup_stm32f4xx.s</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Drivers</GroupName>
+ <Files>
+ <File>
+ <FileName>board.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers/board.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>gpio.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers/gpio.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>stm32f4xx_it.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers/stm32f4xx_it.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>usart.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>drivers/usart.c</FilePath>
</File>
</Files>
</Group>
@@ -668,84 +668,84 @@
<File>
<FileName>clock.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\clock.c</FilePath>
+ <FilePath>../../src/clock.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>device.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\device.c</FilePath>
+ <FilePath>../../src/device.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>idle.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\idle.c</FilePath>
+ <FilePath>../../src/idle.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>ipc.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\ipc.c</FilePath>
+ <FilePath>../../src/ipc.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>irq.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\irq.c</FilePath>
+ <FilePath>../../src/irq.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>kservice.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\kservice.c</FilePath>
+ <FilePath>../../src/kservice.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>mem.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\mem.c</FilePath>
+ <FilePath>../../src/mem.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>mempool.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\mempool.c</FilePath>
+ <FilePath>../../src/mempool.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>object.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\object.c</FilePath>
+ <FilePath>../../src/object.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>scheduler.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\scheduler.c</FilePath>
+ <FilePath>../../src/scheduler.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>thread.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\thread.c</FilePath>
+ <FilePath>../../src/thread.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>timer.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\src\timer.c</FilePath>
+ <FilePath>../../src/timer.c</FilePath>
</File>
</Files>
</Group>
@@ -755,35 +755,35 @@
<File>
<FileName>cpuport.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\cortex-m4\cpuport.c</FilePath>
+ <FilePath>../../libcpu/arm/cortex-m4/cpuport.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>context_rvds.S</FileName>
<FileType>2</FileType>
- <FilePath>..\..\libcpu\arm\cortex-m4\context_rvds.S</FilePath>
+ <FilePath>../../libcpu/arm/cortex-m4/context_rvds.S</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>backtrace.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\backtrace.c</FilePath>
+ <FilePath>../../libcpu/arm/common/backtrace.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>div0.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\div0.c</FilePath>
+ <FilePath>../../libcpu/arm/common/div0.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>showmem.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\libcpu\arm\common\showmem.c</FilePath>
+ <FilePath>../../libcpu/arm/common/showmem.c</FilePath>
</File>
</Files>
</Group>
@@ -791,93 +791,152 @@
<GroupName>finsh</GroupName>
<Files>
<File>
+ <FileName>shell.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/shell.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>symbol.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/symbol.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
<FileName>cmd.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\cmd.c</FilePath>
+ <FilePath>../../components/finsh/cmd.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>finsh_compiler.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_compiler.c</FilePath>
+ <FilePath>../../components/finsh/finsh_compiler.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>finsh_error.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_error.c</FilePath>
+ <FilePath>../../components/finsh/finsh_error.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>finsh_heap.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_heap.c</FilePath>
+ <FilePath>../../components/finsh/finsh_heap.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>finsh_init.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_init.c</FilePath>
+ <FilePath>../../components/finsh/finsh_init.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>finsh_node.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_node.c</FilePath>
+ <FilePath>../../components/finsh/finsh_node.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>finsh_ops.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_ops.c</FilePath>
+ <FilePath>../../components/finsh/finsh_ops.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>finsh_parser.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_parser.c</FilePath>
+ <FilePath>../../components/finsh/finsh_parser.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_var.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_var.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>finsh_vm.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/finsh/finsh_vm.c</FilePath>
</File>
</Files>
<Files>
<File>
<FileName>finsh_token.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_token.c</FilePath>
+ <FilePath>../../components/finsh/finsh_token.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>DeviceDrivers</GroupName>
+ <Files>
+ <File>
+ <FileName>serial.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/serial/serial.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_var.c</FileName>
+ <FileName>pin.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_var.c</FilePath>
+ <FilePath>../../components/drivers/misc/pin.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>finsh_vm.c</FileName>
+ <FileName>completion.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\finsh_vm.c</FilePath>
+ <FilePath>../../components/drivers/src/completion.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>shell.c</FileName>
+ <FileName>dataqueue.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\shell.c</FilePath>
+ <FilePath>../../components/drivers/src/dataqueue.c</FilePath>
</File>
</Files>
<Files>
<File>
- <FileName>symbol.c</FileName>
+ <FileName>pipe.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/pipe.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>portal.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/portal.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>ringbuffer.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>../../components/drivers/src/ringbuffer.c</FilePath>
+ </File>
+ </Files>
+ <Files>
+ <File>
+ <FileName>workqueue.c</FileName>
<FileType>1</FileType>
- <FilePath>..\..\components\finsh\symbol.c</FilePath>
+ <FilePath>../../components/drivers/src/workqueue.c</FilePath>
</File>
</Files>
</Group>
diff --git a/bsp/stm32f40x/rtconfig.h b/bsp/stm32f40x/rtconfig.h
index 9c347969b2..88dfd0b616 100644
--- a/bsp/stm32f40x/rtconfig.h
+++ b/bsp/stm32f40x/rtconfig.h
@@ -2,14 +2,11 @@
#ifndef __RTTHREAD_CFG_H__
#define __RTTHREAD_CFG_H__
-/* RT_GDB_STUB */
-//#define RT_USING_GDB
-
/* RT_NAME_MAX*/
#define RT_NAME_MAX 8
/* RT_ALIGN_SIZE*/
-#define RT_ALIGN_SIZE 8
+#define RT_ALIGN_SIZE 4
/* PRIORITY_MAX */
#define RT_THREAD_PRIORITY_MAX 32
@@ -20,7 +17,6 @@
/* SECTION: RT_DEBUG */
/* Thread Debug */
#define RT_DEBUG
-
#define RT_USING_OVERFLOW_CHECK
/* Using Hook */
@@ -62,6 +58,16 @@
/* SECTION: Device System */
/* Using Device System */
#define RT_USING_DEVICE
+#define RT_USING_DEVICE_IPC
+/* Using serial framework */
+#define RT_USING_SERIAL
+
+#define RT_USING_UART1
+#define RT_USING_UART2
+#define RT_USING_UART3
+
+/* Using GPIO pin framework */
+#define RT_USING_PIN
/* SECTION: Console options */
#define RT_USING_CONSOLE
@@ -75,7 +81,14 @@
#define FINSH_USING_DESCRIPTION
/* SECTION: device filesystem */
+/* Using Device file system */
/* #define RT_USING_DFS */
+/* the max number of mounted filesystem */
+#define DFS_FILESYSTEMS_MAX 2
+/* the max number of opened files */
+#define DFS_FD_MAX 4
+
+/* Using ELM FATFS */
//#define RT_USING_DFS_ELMFAT
#define RT_DFS_ELM_WORD_ACCESS
/* Reentrancy (thread safe) of the FatFs module. */
@@ -87,12 +100,8 @@
/* Maximum sector size to be handled. */
#define RT_DFS_ELM_MAX_SECTOR_SIZE 512
-#define RT_USING_DFS_ROMFS
-
-/* the max number of mounted filesystem */
-#define DFS_FILESYSTEMS_MAX 2
-/* the max number of opened files */
-#define DFS_FD_MAX 4
+/* Using ROM file system */
+// #define RT_USING_DFS_ROMFS
/* SECTION: lwip, a lighwight TCP/IP protocol stack */
/* #define RT_USING_LWIP */
@@ -151,4 +160,7 @@
#define CHECKSUM_GEN_IP 0
#define CHECKSUM_GEN_UDP 0
+/* RT_GDB_STUB */
+//#define RT_USING_GDB
+
#endif
diff --git a/bsp/stm32f40x/rtconfig.py b/bsp/stm32f40x/rtconfig.py
index d22162626d..d1f081370e 100644
--- a/bsp/stm32f40x/rtconfig.py
+++ b/bsp/stm32f40x/rtconfig.py
@@ -6,16 +6,16 @@ CPU='cortex-m4'
CROSS_TOOL='keil'
if os.getenv('RTT_CC'):
- CROSS_TOOL = os.getenv('RTT_CC')
+ CROSS_TOOL = os.getenv('RTT_CC')
# cross_tool provides the cross compiler
# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR
if CROSS_TOOL == 'gcc':
- PLATFORM = 'gcc'
- EXEC_PATH = r'E:/Program Files/CodeSourcery/Sourcery G++ Lite/bin'
+ PLATFORM = 'gcc'
+ EXEC_PATH = r'E:/Program Files/CodeSourcery/Sourcery G++ Lite/bin'
elif CROSS_TOOL == 'keil':
- PLATFORM = 'armcc'
- EXEC_PATH = r'C:/Keil'
+ PLATFORM = 'armcc'
+ EXEC_PATH = r'C:/Keil'
elif CROSS_TOOL == 'iar':
print '================ERROR============================'
print 'Not support iar yet!'
diff --git a/components/drivers/include/drivers/pin.h b/components/drivers/include/drivers/pin.h
new file mode 100644
index 0000000000..704114cf99
--- /dev/null
+++ b/components/drivers/include/drivers/pin.h
@@ -0,0 +1,79 @@
+/*
+ * File : pin.h
+ * This file is part of RT-Thread RTOS
+ * COPYRIGHT (C) 2015, RT-Thread Development Team
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2015-01-20 Bernard the first version
+ */
+
+#ifndef PIN_H__
+#define PIN_H__
+
+#include <rtthread.h>
+#include <rtdevice.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* pin device and operations for RT-Thread */
+struct rt_device_pin
+{
+ struct rt_device parent;
+ const struct rt_pin_ops *ops;
+};
+
+#define PIN_LOW 0x00
+#define PIN_HIGH 0x01
+
+#define PIN_MODE_OUTPUT 0x00
+#define PIN_MODE_INPUT 0x01
+#define PIN_MODE_INPUT_PULLUP 0x02
+
+struct rt_device_pin_mode
+{
+ rt_uint16_t pin;
+ rt_uint16_t mode;
+};
+struct rt_device_pin_status
+{
+ rt_uint16_t pin;
+ rt_uint16_t status;
+};
+
+struct rt_pin_ops
+{
+ void (*pin_mode)(struct rt_device *device, rt_base_t pin, rt_base_t mode);
+ void (*pin_write)(struct rt_device *device, rt_base_t pin, rt_base_t value);
+ int (*pin_read)(struct rt_device *device, rt_base_t pin);
+
+ /* TODO: add GPIO interrupt */
+};
+
+int rt_device_pin_register(const char *name, const struct rt_pin_ops *ops, void *user_data);
+
+void rt_pin_mode(rt_base_t pin, rt_base_t mode);
+void rt_pin_write(rt_base_t pin, rt_base_t value);
+int rt_pin_read(rt_base_t pin);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/components/drivers/include/rtdevice.h b/components/drivers/include/rtdevice.h
index dc9761032e..bb01da2d12 100644
--- a/components/drivers/include/rtdevice.h
+++ b/components/drivers/include/rtdevice.h
@@ -358,5 +358,9 @@ rt_inline void rt_work_init(struct rt_work* work, void (*work_func)(struct rt_wo
#include "drivers/watchdog.h"
#endif
+#ifdef RT_USING_PIN
+#include "drivers/pin.h"
+#endif
+
#endif /* __RT_DEVICE_H__ */
diff --git a/components/drivers/misc/SConscript b/components/drivers/misc/SConscript
new file mode 100644
index 0000000000..7f269d4ee9
--- /dev/null
+++ b/components/drivers/misc/SConscript
@@ -0,0 +1,14 @@
+from building import *
+
+cwd = GetCurrentDir()
+src = []
+CPPPATH = [cwd + '/../include']
+group = []
+
+if GetDepend(['RT_USING_PIN']):
+ src = src + ['pin.c']
+
+if len(src):
+ group = DefineGroup('DeviceDrivers', src, depend = [''], CPPPATH = CPPPATH)
+
+Return('group')
diff --git a/components/drivers/misc/pin.c b/components/drivers/misc/pin.c
new file mode 100644
index 0000000000..d83c3d2f03
--- /dev/null
+++ b/components/drivers/misc/pin.c
@@ -0,0 +1,118 @@
+/*
+ * File : pin.c
+ * This file is part of RT-Thread RTOS
+ * COPYRIGHT (C) 2015, RT-Thread Development Team
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2015-01-20 Bernard the first version
+ */
+
+#include <drivers/pin.h>
+
+#ifdef RT_USING_FINSH
+#include <finsh.h>
+#endif
+
+static struct rt_device_pin _hw_pin;
+static rt_size_t _pin_read(rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size)
+{
+ struct rt_device_pin_status *status;
+ struct rt_device_pin *pin = (struct rt_device_pin *)dev;
+
+ /* check parameters */
+ RT_ASSERT(pin != RT_NULL);
+
+ status = (struct rt_device_pin_status *) buffer;
+ if (status == RT_NULL || size != sizeof(*status)) return 0;
+
+ status->status = pin->ops->pin_read(dev, status->pin);
+ return size;
+}
+
+static rt_size_t _pin_write(rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size)
+{
+ struct rt_device_pin_status *status;
+ struct rt_device_pin *pin = (struct rt_device_pin *)dev;
+
+ /* check parameters */
+ RT_ASSERT(pin != RT_NULL);
+
+ status = (struct rt_device_pin_status *) buffer;
+ if (status == RT_NULL || size != sizeof(*status)) return 0;
+
+ pin->ops->pin_write(dev, (rt_base_t)status->pin, (rt_base_t)status->status);
+
+ return size;
+}
+
+static rt_err_t _pin_control(rt_device_t dev, rt_uint8_t cmd, void *args)
+{
+ struct rt_device_pin_mode *mode;
+ struct rt_device_pin *pin = (struct rt_device_pin *)dev;
+
+ /* check parameters */
+ RT_ASSERT(pin != RT_NULL);
+
+ mode = (struct rt_device_pin_mode *) args;
+ if (mode == RT_NULL) return -RT_ERROR;
+
+ pin->ops->pin_mode(dev, (rt_base_t)mode->pin, (rt_base_t)mode->mode);
+
+ return 0;
+}
+
+int rt_device_pin_register(const char *name, const struct rt_pin_ops *ops, void *user_data)
+{
+ _hw_pin.parent.type = RT_Device_Class_Miscellaneous;
+ _hw_pin.parent.rx_indicate = RT_NULL;
+ _hw_pin.parent.tx_complete = RT_NULL;
+
+ _hw_pin.parent.init = RT_NULL;
+ _hw_pin.parent.open = RT_NULL;
+ _hw_pin.parent.close = RT_NULL;
+ _hw_pin.parent.read = _pin_read;
+ _hw_pin.parent.write = _pin_write;
+ _hw_pin.parent.control = _pin_control;
+
+ _hw_pin.ops = ops;
+ _hw_pin.parent.user_data = user_data;
+
+ /* register a character device */
+ rt_device_register(&_hw_pin.parent, "pin", RT_DEVICE_FLAG_RDWR);
+
+ return 0;
+}
+
+/* RT-Thread Hardware PIN APIs */
+void rt_pin_mode(rt_base_t pin, rt_base_t mode)
+{
+ _hw_pin.ops->pin_mode(&_hw_pin.parent, pin, mode);
+}
+FINSH_FUNCTION_EXPORT_ALIAS(rt_pin_mode, pinMode, set hardware pin mode);
+
+void rt_pin_write(rt_base_t pin, rt_base_t value)
+{
+ _hw_pin.ops->pin_write(&_hw_pin.parent, pin, value);
+}
+FINSH_FUNCTION_EXPORT_ALIAS(rt_pin_write, pinWrite, write value to hardware pin);
+
+int rt_pin_read(rt_base_t pin)
+{
+ return _hw_pin.ops->pin_read(&_hw_pin.parent, pin);
+}
+FINSH_FUNCTION_EXPORT_ALIAS(rt_pin_read, pinRead, read status from hardware pin);
diff --git a/src/kservice.c b/src/kservice.c
index fef284e8af..b5dc92b091 100644
--- a/src/kservice.c
+++ b/src/kservice.c
@@ -513,7 +513,7 @@ void rt_show_version(void)
rt_kprintf("- RT - Thread Operating System\n");
rt_kprintf(" / | \\ %d.%d.%d build %s\n",
RT_VERSION, RT_SUBVERSION, RT_REVISION, __DATE__);
- rt_kprintf(" 2006 - 2013 Copyright by rt-thread team\n");
+ rt_kprintf(" 2006 - 2015 Copyright by rt-thread team\n");
}
RTM_EXPORT(rt_show_version);
diff --git a/tools/as.sh b/tools/as.sh
new file mode 100755
index 0000000000..d4f30f418c
--- /dev/null
+++ b/tools/as.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+astyle --style=allman --indent=spaces=4 --pad-oper --pad-header --unpad-paren --suffix=none --align-pointer=name --lineend=linux --convert-tabs --verbose $1
diff --git a/tools/building.py b/tools/building.py
index f12452ed7d..cafad2047a 100644
--- a/tools/building.py
+++ b/tools/building.py
@@ -1,3 +1,27 @@
+#
+# File : building.py
+# This file is part of RT-Thread RTOS
+# COPYRIGHT (C) 2006 - 2015, RT-Thread Development Team
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Change Logs:
+# Date Author Notes
+# 2015-01-20 Bernard Add copyright information
+#
+
import os
import sys
import string
diff --git a/tools/codeblocks.py b/tools/codeblocks.py
index 78f9629cbb..cb07956e73 100644
--- a/tools/codeblocks.py
+++ b/tools/codeblocks.py
@@ -1,3 +1,27 @@
+#
+# File : codeblocks.py
+# This file is part of RT-Thread RTOS
+# COPYRIGHT (C) 2006 - 2015, RT-Thread Development Team
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Change Logs:
+# Date Author Notes
+# 2015-01-20 Bernard Add copyright information
+#
+
import os
import sys
import string
diff --git a/tools/cscope.py b/tools/cscope.py
index 18568b4c35..daeda52f9d 100644
--- a/tools/cscope.py
+++ b/tools/cscope.py
@@ -1,3 +1,27 @@
+#
+# File : cscope.py
+# This file is part of RT-Thread RTOS
+# COPYRIGHT (C) 2006 - 2015, RT-Thread Development Team
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Change Logs:
+# Date Author Notes
+# 2015-01-20 Bernard Add copyright information
+#
+
import os
def _get_src(project):
diff --git a/tools/iar.py b/tools/iar.py
index 40b8408971..fda3fd8768 100644
--- a/tools/iar.py
+++ b/tools/iar.py
@@ -1,3 +1,27 @@
+#
+# File : iar.py
+# This file is part of RT-Thread RTOS
+# COPYRIGHT (C) 2006 - 2015, RT-Thread Development Team
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Change Logs:
+# Date Author Notes
+# 2015-01-20 Bernard Add copyright information
+#
+
import os
import sys
import string
diff --git a/tools/keil.py b/tools/keil.py
index 8f8b926804..9d6b14b81a 100644
--- a/tools/keil.py
+++ b/tools/keil.py
@@ -1,3 +1,27 @@
+#
+# File : keil.py
+# This file is part of RT-Thread RTOS
+# COPYRIGHT (C) 2006 - 2015, RT-Thread Development Team
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Change Logs:
+# Date Author Notes
+# 2015-01-20 Bernard Add copyright information
+#
+
import os
import sys
import string
diff --git a/tools/sconsui.py b/tools/sconsui.py
index eddccb49f4..3542c36278 100644
--- a/tools/sconsui.py
+++ b/tools/sconsui.py
@@ -1,6 +1,30 @@
#! /usr/bin/env python
#coding=utf-8
+#
+# File : sconsui.py
+# This file is part of RT-Thread RTOS
+# COPYRIGHT (C) 2006 - 2015, RT-Thread Development Team
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Change Logs:
+# Date Author Notes
+# 2015-01-20 Bernard Add copyright information
+#
+
import sys
py2 = py30 = py31 = False
diff --git a/tools/ua.py b/tools/ua.py
index 19384c5eba..31d2641031 100644
--- a/tools/ua.py
+++ b/tools/ua.py
@@ -1,3 +1,27 @@
+#
+# File : ua.py
+# This file is part of RT-Thread RTOS
+# COPYRIGHT (C) 2006 - 2015, RT-Thread Development Team
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Change Logs:
+# Date Author Notes
+# 2015-01-20 Bernard Add copyright information
+#
+
import os
import sys
from utils import _make_path_relative
diff --git a/tools/utils.py b/tools/utils.py
index d1b0944939..0fa8cc742e 100644
--- a/tools/utils.py
+++ b/tools/utils.py
@@ -1,3 +1,27 @@
+#
+# File : utils.py
+# This file is part of RT-Thread RTOS
+# COPYRIGHT (C) 2006 - 2015, RT-Thread Development Team
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Change Logs:
+# Date Author Notes
+# 2015-01-20 Bernard Add copyright information
+#
+
import sys
import os
diff --git a/tools/vs.py b/tools/vs.py
index 1dce0ddaa7..bd1c7a4b24 100644
--- a/tools/vs.py
+++ b/tools/vs.py
@@ -1,3 +1,27 @@
+#
+# File : vs.py
+# This file is part of RT-Thread RTOS
+# COPYRIGHT (C) 2006 - 2015, RT-Thread Development Team
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Change Logs:
+# Date Author Notes
+# 2015-01-20 Bernard Add copyright information
+#
+
import os
import sys
import string
diff --git a/tools/vs2012.py b/tools/vs2012.py
index 3e751e940e..14da3dcace 100644
--- a/tools/vs2012.py
+++ b/tools/vs2012.py
@@ -1,3 +1,27 @@
+#
+# File : vs2012.py
+# This file is part of RT-Thread RTOS
+# COPYRIGHT (C) 2006 - 2015, RT-Thread Development Team
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Change Logs:
+# Date Author Notes
+# 2015-01-20 Bernard Add copyright information
+#
+
import os
import sys
import string
diff --git a/tools/win32spawn.py b/tools/win32spawn.py
index 8adc64306b..9b878bf69f 100644
--- a/tools/win32spawn.py
+++ b/tools/win32spawn.py
@@ -1,3 +1,27 @@
+#
+# File : win32spawn.py
+# This file is part of RT-Thread RTOS
+# COPYRIGHT (C) 2006 - 2015, RT-Thread Development Team
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Change Logs:
+# Date Author Notes
+# 2015-01-20 Bernard Add copyright information
+#
+
import os
import threading
import Queue
diff --git a/tools/wizard.py b/tools/wizard.py
index 4b2186fadb..41e90775d8 100755
--- a/tools/wizard.py
+++ b/tools/wizard.py
@@ -1,6 +1,30 @@
#! /usr/bin/env python
#coding=utf-8
+#
+# File : wizard.py
+# This file is part of RT-Thread RTOS
+# COPYRIGHT (C) 2006 - 2015, RT-Thread Development Team
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Change Logs:
+# Date Author Notes
+# 2015-01-20 Bernard Add copyright information
+#
+
"""
wizard.py - a script to generate SConscript in RT-Thread RTOS.