[其他] RVB2601应用开发实战系列二: 跑马灯

[复制链接]
4878|1
 楼主| 未来开发者 发表于 2021-9-8 15:19 | 显示全部楼层 |阅读模式
关键词:RVB2601RISC-V开发板、例程,低功耗,玄铁E906RISC-V MCU,上手,好用,控制,WiFi&BLE

1. 前言
基于RVB2601的跑马灯程序是利用通过控制一颗RGB LED灯珠实现三色跑马灯效果。

建议在在看本文之前,先详细看下RVB2601资源。本例程名为ch2601_marquee_demo,可以通过CDK直接从OCC拉取。

2. 硬件配置
三色LED通过PIN引脚 PA7、PA25、PA4与CH2601主芯片GPIO控制器连通,主控可以通过对PA7、PA25和PA4的GPIO PIN的操作,可以实现三色LED不同颜色的闪烁。LED硬件原理图如下:
1.png

3. 跑马灯开发
3.1 例程下载
打开CDK,点击HOME图标,查找ch2601_marquee_demo后,打开工程可以看到以下目录
2.png

3.2 LED配置
·led_pinmux_init
该功能函数位于app/src/led.c, 用于初始化三色LED灯的IO管脚。配置三色灯的PA7、PA25和PA4为IO模式,为每个IO管脚配置PWM通道以及占空比时间。
  1. void led_pinmux_init()
  2. {
  3.         //7
  4.     csi_pin_set_mux(PA7, PA7_PWM_CH7);
  5.     csi_pin_set_mux(PA25, PA25_PWM_CH2);
  6.     csi_pin_set_mux(PA4, PA4_PWM_CH4);
  7.     ret = csi_pwm_init(&r, 0);
  8.     ret = csi_pwm_out_config(&r, 7 / 2, 300, 100, PWM_POLARITY_HIGH);
  9.     ret = csi_pwm_out_start(&r, 7 / 2);
  10.         //25
  11.     ret = csi_pwm_out_config(&r, 2 / 2, 300, 100, PWM_POLARITY_HIGH);
  12.     ret = csi_pwm_out_start(&r, 2 / 2);
  13.         //4
  14.     ret = csi_pwm_out_config(&r, 4 / 2, 300, 100, PWM_POLARITY_HIGH);
  15.     ret = csi_pwm_out_start(&r, 4 / 2);
  16. }

·led_refresh
该功能函数位于app/src/led.c, 用于依次闪烁LED。利用g_ctr计数器来判断闪烁LED灯。通过操作三根IO管脚来确定显示指定颜色的灯。
  1. void led_refresh()
  2. {
  3.     g_ctr++;
  4.     if (g_ctr == 3) {
  5.             g_ctr = 0;
  6.     }
  7.     if (g_ctr == 0)
  8.     {
  9.         csi_pwm_out_start(&r, 7 / 2);
  10.         csi_pwm_out_stop(&r, 2 / 2);
  11.         csi_pwm_out_stop(&r, 4 / 2);
  12.     }
  13.     else if (g_ctr == 1)
  14.     {        
  15.         csi_pwm_out_start(&r, 2 / 2);
  16.         csi_pwm_out_stop(&r, 7 / 2);
  17.         csi_pwm_out_stop(&r, 4 / 2);
  18.     }
  19.     else //2
  20.     {
  21.         csi_pwm_out_start(&r, 4 / 2);
  22.         csi_pwm_out_stop(&r, 7 / 2);
  23.         csi_pwm_out_stop(&r, 2 / 2);
  24.     }
  25. }

·demo_task
该功能函数位于app/src/main.c, 用于周期性点亮LED灯,在主函数里调用。
  1. static void demo_task(void *arg)
  2. {
  3.     lv_init();
  4.     oled_init();
  5.     lable_test();
  6.     led_pinmux_init();
  7.     while (1)
  8.     {
  9.         lv_task_handler();
  10.         udelay(1000 * 1000);
  11.         lv_tick_inc(1);
  12.         led_refresh();
  13.     }
  14. }

3.3. 编译运行
编译通过后,点击下载成功,复位运行。可看左下角的灯依次闪烁。
3.png
4. 总结
本例程介绍了如何通过CSI接口配置IO管脚来控制LED灯,从而实现依次闪烁,达到跑马灯的效果。后续还有更多的开发例程,敬请期待!
本文转自平头哥芯片开放社区(occ),更多详情请点击https://occ.t-head.cn/store/board?channelName=1
一刀一级 发表于 2021-9-10 16:34 来自手机 | 显示全部楼层
看看,学习学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

20

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部