在线时间2208 小时
UID2073122
注册时间2016-1-12
NXP金币119
TA的每日心情 | 开心 2020-6-18 08:45 |
---|
签到天数: 812 天 连续签到: 1 天 [LV.10]以坛为家III
金牌会员
 
- 积分
- 6321
- 最后登录
- 2025-7-15
|
本帖最后由 原来的你 于 2017-4-26 00:06 编辑
收到板卡已经有一段时间了,由于不想再想以往一样裸机程序,所以选择FreeRTOS在LPC54114上运行,由于LPC54114的某些特性不一样,研究资料很久都没找到,所以耽搁了一些时间。具体在后面再给大家讲解。对于MCU来说,通常来说都是裸机运行程序,也可以使用嵌入式操作系统运行,对于嵌入式操作系统有UCOS、FreeRTOS、RTX等等,我个人比较喜欢FreeRTOS,其开源且免费。下面我将结合FreeRTOS一起来学习LPC54114和FreeRTOS。对于如何移植FreeRTOS的工程我就不给了,具体可以参考官方demo。
- #define LED_GPIO_CFG IOCON_MODE_PULLUP | IOCON_FUNC0 | IOCON_GPIO_MODE | IOCON_DIGITAL_EN | IOCON_INPFILT_OFF/* GPIO的模式设置*/
- /* GPIO数组*/
- const uint8_t LED_GPIO_PORT[LED_NUM] = { 0, 0, 0, 0, 0, 0, 0, 0};
- const uint8_t LED_GPIO_PIN [LED_NUM] = {15, 19, 21, 22, 25, 26, 29, 30};
- const uint8_t LED_GPIO_ON [LED_NUM] = { 1, 1, 1, 1, 0, 0, 0, 0};
- const uint8_t LED_GPIO_OFF [LED_NUM] = { 0, 0, 0, 0, 1, 1, 1, 1};
- /*GPIO初始化*/
- uint8_t led_init(void)
- {
- uint8_t ret = 0;
- uint8_t i = 0;
- for(i=0; i<LED_NUM; i++)
- {
- GPIO->DIR[LED_GPIO_PORT] |= 1U << LED_GPIO_PIN;
- GPIO->B[LED_GPIO_PORT][LED_GPIO_PIN] = LED_GPIO_OFF;
- IOCON_PinMuxSet(IOCON, LED_GPIO_PORT, LED_GPIO_PIN, LED_GPIO_CFG);
- }
- ret = 1;
- return ret;
- }
- /*LED打开*/
- void led_on(uint8_t num)
- {
- GPIO->B[LED_GPIO_PORT[num]][LED_GPIO_PIN[num]] = LED_GPIO_ON[num];
- }
- /*LED关闭*/
- void led_off(uint8_t num)
- {
- GPIO->B[LED_GPIO_PORT[num]][LED_GPIO_PIN[num]] = LED_GPIO_OFF[num];
- }
- /*LED翻转*/
- void led_toggle(uint8_t num)
- {
- GPIO->NOT[LED_GPIO_PORT[num]] |= (1 << LED_GPIO_PIN[num]);
- }
- 以上是GPIO使用的代码,我们不需要修改可以直接使用在FreeRTOS工程中,具体代码如下
- /* Task priorities. */
- #define LED_task1_task_PRIORITY (configMAX_PRIORITIES - 1)
- #define LED_task2_task_PRIORITY (configMAX_PRIORITIES - 2)
- /*******************************************************************************
- * Prototypes
- ******************************************************************************/
- static void LED_task1_task(void *pvParameters);
- static void LED_task2_task(void *pvParameters);
- /*******************************************************************************
- * Code
- ******************************************************************************/
- /*!
- * @brief Application entry point.
- */
- int main(void)
- {
- /* Init board hardware. */
- /* attach 12 MHz clock to FLEXCOMM0 (debug console) */
- CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
- BOARD_InitPins();
- BOARD_BootClockFROHF48M();
- BOARD_InitDebugConsole();
- CLOCK_EnableClock(kCLOCK_InputMux);
- CLOCK_EnableClock(kCLOCK_Iocon);
- CLOCK_EnableClock(kCLOCK_Gpio0);
- CLOCK_EnableClock(kCLOCK_Gpio1);
- led_init();
- xTaskCreate(LED_task1_task, "LED_task1", configMINIMAL_STACK_SIZE + 10, NULL, LED_task1_task_PRIORITY, NULL);
- xTaskCreate(LED_task2_task, "LED_task2", configMINIMAL_STACK_SIZE + 10, NULL, LED_task2_task_PRIORITY, NULL);
- vTaskStartScheduler();
- for (;;)
- ;
- }
- static void LED_task1_task(void *pvParameters)
- {
- for (;;)
- {
- PRINTF("LED_task1.\r\n");
- led_toggle(0);
- led_toggle(1);
- led_toggle(2);
- led_toggle(3);
- vTaskDelay(1000);
- }
- }
- static void LED_task2_task(void *pvParameters)
- {
- for (;;)
- {
- PRINTF("LED_task2.\r\n");
- led_toggle(4);
- led_toggle(5);
- led_toggle(6);
- led_toggle(7);
- vTaskDelay(1000);
- }
- }
复制代码
|
-
|