diff --git a/bsp/lpc824/applications/application.c b/bsp/lpc824/applications/application.c index 4391f38bf006d0803d0d876ef4ecf12d6f0bb9eb..8d408d717b219e07e1977abc1893c3e96377abf5 100644 --- a/bsp/lpc824/applications/application.c +++ b/bsp/lpc824/applications/application.c @@ -16,11 +16,20 @@ #include #include +#include "peri_driver.h" + +#define INIT_STACK_SIZE 512 +#define LED_STACK_SIZE 256 + #ifndef RT_USING_HEAP /* if there is not enable heap, we should use static thread and stack. */ ALIGN(8) -static rt_uint8_t init_stack[512]; +static rt_uint8_t init_stack[INIT_STACK_SIZE]; static struct rt_thread init_thread; + +ALIGN(8) +static rt_uint8_t led_stack[LED_STACK_SIZE]; +static struct rt_thread led_thread; #endif void rt_init_thread_entry(void* parameter) @@ -31,6 +40,24 @@ void rt_init_thread_entry(void* parameter) #endif } + +void rt_led_thread_entry(void *parameter) +{ + /* Initialize GPIO */ + Chip_GPIO_Init(LPC_GPIO_PORT); + Chip_GPIO_PinSetDIR(LPC_GPIO_PORT, 0, 7, 1); + Chip_GPIO_PinSetState(LPC_GPIO_PORT, 0, 7, true); + + while (1) + { + Chip_GPIO_PinSetState(LPC_GPIO_PORT, 0, 7, true); + rt_thread_delay(RT_TICK_PER_SECOND / 2); + + Chip_GPIO_PinSetState(LPC_GPIO_PORT, 0, 7, false); + rt_thread_delay(RT_TICK_PER_SECOND / 2); + } +} + int rt_application_init() { rt_thread_t tid; @@ -38,7 +65,7 @@ int rt_application_init() #ifdef RT_USING_HEAP tid = rt_thread_create("init", rt_init_thread_entry, RT_NULL, - 2048, RT_THREAD_PRIORITY_MAX/3, 20); + INIT_STACK_SIZE, RT_THREAD_PRIORITY_MAX/3, 20); #else { @@ -52,6 +79,24 @@ int rt_application_init() #endif if (tid != RT_NULL) rt_thread_startup(tid); + +#ifdef RT_USING_HEAP + tid = rt_thread_create("led", + rt_led_thread_entry, RT_NULL, + LED_STACK_SIZE, RT_THREAD_PRIORITY_MAX/3, 20); +#else + { + + rt_err_t result; + + tid = &led_thread; + result = rt_thread_init(tid, "led", rt_led_thread_entry, RT_NULL, + led_stack, sizeof(led_stack), RT_THREAD_PRIORITY_MAX / 4, 20); + RT_ASSERT(result == RT_EOK); + } +#endif + if (tid != RT_NULL) + rt_thread_startup(tid); return 0; } diff --git a/bsp/lpc824/drivers/board.c b/bsp/lpc824/drivers/board.c index 8ad077dbc6f1ffeb4b4891e3896fd756942473b2..ea941abc648b993b9bab35693569fa4a5ae0f047 100644 --- a/bsp/lpc824/drivers/board.c +++ b/bsp/lpc824/drivers/board.c @@ -60,6 +60,7 @@ void SysTick_Handler(void) */ void rt_hw_board_init() { + SystemCoreClockUpdate(); SysTick_Config(SystemCoreClock / RT_TIMER_TICK_PER_SECOND); #ifdef RT_USING_COMPONENTS_INIT