查看: 6402|回复: 6

[原创] 【LPC54114】FreeRTOS 入门指南之 GPIO

[复制链接]
  • TA的每日心情
    开心
    2020-6-18 08:45
  • 签到天数: 812 天

    连续签到: 1 天

    [LV.10]以坛为家III

    66

    主题

    4899

    帖子

    64

    金牌会员

    Rank: 6Rank: 6

    积分
    6321
    最后登录
    2025-7-15
    发表于 2017-4-26 00:01:13 | 显示全部楼层 |阅读模式
    本帖最后由 原来的你 于 2017-4-26 00:06 编辑

    收到板卡已经有一段时间了,由于不想再想以往一样裸机程序,所以选择FreeRTOS在LPC54114上运行,由于LPC54114的某些特性不一样,研究资料很久都没找到,所以耽搁了一些时间。具体在后面再给大家讲解。对于MCU来说,通常来说都是裸机运行程序,也可以使用嵌入式操作系统运行,对于嵌入式操作系统有UCOS、FreeRTOS、RTX等等,我个人比较喜欢FreeRTOS,其开源且免费。下面我将结合FreeRTOS一起来学习LPC54114和FreeRTOS。对于如何移植FreeRTOS的工程我就不给了,具体可以参考官方demo。
    1. #define LED_GPIO_CFG IOCON_MODE_PULLUP | IOCON_FUNC0 | IOCON_GPIO_MODE | IOCON_DIGITAL_EN | IOCON_INPFILT_OFF/* GPIO的模式设置*/


    2. /* GPIO数组*/
    3. const uint8_t  LED_GPIO_PORT[LED_NUM] = { 0,  0,  0,  0,  0,  0,  0,  0};
    4. const uint8_t  LED_GPIO_PIN [LED_NUM] = {15, 19, 21, 22, 25, 26, 29, 30};
    5. const uint8_t  LED_GPIO_ON  [LED_NUM] = { 1,  1,  1,  1,  0,  0,  0,  0};
    6. const uint8_t  LED_GPIO_OFF [LED_NUM] = { 0,  0,  0,  0,  1,  1,  1,  1};

    7. /*GPIO初始化*/
    8. uint8_t led_init(void)
    9. {        
    10.         uint8_t ret = 0;
    11.         uint8_t i = 0;
    12.         for(i=0; i<LED_NUM; i++)
    13.         {
    14.                 GPIO->DIR[LED_GPIO_PORT] |= 1U << LED_GPIO_PIN;
    15.                 GPIO->B[LED_GPIO_PORT][LED_GPIO_PIN] = LED_GPIO_OFF;
    16.                 IOCON_PinMuxSet(IOCON, LED_GPIO_PORT, LED_GPIO_PIN, LED_GPIO_CFG);
    17.         }
    18.         ret = 1;
    19.         return ret;
    20. }
    21. /*LED打开*/
    22. void led_on(uint8_t num)
    23. {
    24.         GPIO->B[LED_GPIO_PORT[num]][LED_GPIO_PIN[num]] = LED_GPIO_ON[num];
    25. }
    26. /*LED关闭*/
    27. void led_off(uint8_t num)
    28. {
    29.         GPIO->B[LED_GPIO_PORT[num]][LED_GPIO_PIN[num]] = LED_GPIO_OFF[num];
    30. }
    31. /*LED翻转*/
    32. void led_toggle(uint8_t num)
    33. {
    34.         GPIO->NOT[LED_GPIO_PORT[num]] |= (1 << LED_GPIO_PIN[num]);
    35. }

    36. 以上是GPIO使用的代码,我们不需要修改可以直接使用在FreeRTOS工程中,具体代码如下
    37. /* Task priorities. */
    38. #define LED_task1_task_PRIORITY (configMAX_PRIORITIES - 1)
    39. #define LED_task2_task_PRIORITY (configMAX_PRIORITIES - 2)
    40. /*******************************************************************************
    41. * Prototypes
    42. ******************************************************************************/
    43. static void LED_task1_task(void *pvParameters);
    44. static void LED_task2_task(void *pvParameters);
    45. /*******************************************************************************
    46. * Code
    47. ******************************************************************************/
    48. /*!
    49. * @brief Application entry point.
    50. */
    51. int main(void)
    52. {
    53.     /* Init board hardware. */
    54.     /* attach 12 MHz clock to FLEXCOMM0 (debug console) */
    55.     CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);

    56.     BOARD_InitPins();
    57.     BOARD_BootClockFROHF48M();
    58.     BOARD_InitDebugConsole();
    59.           CLOCK_EnableClock(kCLOCK_InputMux);
    60.     CLOCK_EnableClock(kCLOCK_Iocon);
    61.     CLOCK_EnableClock(kCLOCK_Gpio0);
    62.     CLOCK_EnableClock(kCLOCK_Gpio1);
    63.           led_init();
    64.     xTaskCreate(LED_task1_task, "LED_task1", configMINIMAL_STACK_SIZE + 10, NULL, LED_task1_task_PRIORITY, NULL);
    65.           xTaskCreate(LED_task2_task, "LED_task2", configMINIMAL_STACK_SIZE + 10, NULL, LED_task2_task_PRIORITY, NULL);
    66.     vTaskStartScheduler();
    67.     for (;;)
    68.         ;
    69. }


    70. static void LED_task1_task(void *pvParameters)
    71. {
    72.     for (;;)
    73.     {
    74.         PRINTF("LED_task1.\r\n");
    75.                           led_toggle(0);
    76.                           led_toggle(1);
    77.                           led_toggle(2);
    78.                           led_toggle(3);
    79.                           vTaskDelay(1000);
    80.     }
    81. }

    82. static void LED_task2_task(void *pvParameters)
    83. {
    84.     for (;;)
    85.     {
    86.         PRINTF("LED_task2.\r\n");
    87.                           led_toggle(4);
    88.                           led_toggle(5);
    89.                           led_toggle(6);
    90.                           led_toggle(7);
    91.                           vTaskDelay(1000);
    92.     }
    93. }
    复制代码


    QQ图片20170426000325.png
    开心
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2025-5-29 08:54
  • 签到天数: 2992 天

    连续签到: 8 天

    [LV.Master]伴坛终老

    45

    主题

    5548

    帖子

    22

    金牌会员

    Rank: 6Rank: 6

    积分
    12035
    最后登录
    2025-5-29
    发表于 2017-4-26 17:15:43 | 显示全部楼层
    膜拜大佬
    签到签到
    回复

    使用道具 举报

    该用户从未签到

    10

    主题

    40

    帖子

    0

    注册会员

    Rank: 2

    积分
    96
    最后登录
    2018-5-8
    发表于 2017-4-26 22:33:40 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2021-9-9 22:51
  • 签到天数: 415 天

    连续签到: 1 天

    [LV.9]以坛为家II

    79

    主题

    3088

    帖子

    21

    金牌会员

    Rank: 6Rank: 6

    积分
    5181
    最后登录
    2022-5-23
    发表于 2017-4-26 23:08:09 | 显示全部楼层
      赞一个啊
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    143

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    443
    最后登录
    2020-10-29
    发表于 2017-4-27 00:50:36 来自手机 | 显示全部楼层
    膜拜大佬
    回复

    使用道具 举报

    该用户从未签到

    3

    主题

    143

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    443
    最后登录
    2020-10-29
    发表于 2017-4-27 00:53:09 来自手机 | 显示全部楼层
    膜拜大佬
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-9-15 08:42
  • 签到天数: 1952 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    1

    主题

    4686

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9405
    最后登录
    2023-9-15
    发表于 2017-4-27 07:14:51 | 显示全部楼层
    今天天气不错!签到!
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-25 08:51 , Processed in 0.096914 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表