天天看點

RVB2601應用開發實戰系列二: 跑馬燈執行個體教程

編輯語:

技術解碼欄目:是面向開發者詳細解讀晶片開放社群(OCC)上關于處理器、晶片、基礎軟體平台、內建開發環境及應用開發平台的相關技術,友善開發者學習及快速上手,提升開發效率。

RVB2601是基于平頭哥RISC-V生态晶片的開發套件,開發者基于RVB2601可進行端雲一體的物聯網應用開發及音頻方案開發。上周向大家推薦了

RVB2601應用開發實戰系列一: Helloworld最小系統

,本周我們将繼續推薦RVB2601應用開發實戰系列。今天為大家介紹如何基于RVB2601實作跑馬燈例程。

一. 前言  

基于RVB2601的跑馬燈程式是利用通過控制一顆RGB LED燈珠實作三色跑馬燈效果。建議在在看本文之前,先詳細看下

新手必看 | RVB2601開發闆快速上手指南

。本例程名為ch2601_marquee_demo,可以通過內建開發環境劍池CDK下載下傳擷取相應資源。

三色LED通過PIN引腳 PA7、PA25、PA4與CH2601主晶片GPIO控制器連通,主要可以通過對PA7、PA25和PA4的GPIO PIN的操作,可以實作三色LED不同顔色的閃爍。LED硬體原理圖如下:

RVB2601應用開發實戰系列二: 跑馬燈執行個體教程

三. 跑馬燈開發

3.1 例程下載下傳

打開CDK,點選HOME圖示,查找ch2601_marquee_demo後,打開工程可以看下一下目錄檔案。

RVB2601應用開發實戰系列二: 跑馬燈執行個體教程

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. csi_pin_set_mux(PA7, PA7_PWM_CH7);
4. csi_pin_set_mux(PA25, PA25_PWM_CH2);
5. csi_pin_set_mux(PA4, PA4_PWM_CH4);
6. ...
7. }
c      
  • led_refresh

該功能函數位于app/src/led.c, 用于依次閃爍LED。利用g_ctr計數器來判斷閃爍LED燈。通過操作三根IO管腳來确定顯示指定顔色的燈。

1. void led_refresh()
2. {
3. if (g_ctr == 3) {
4. g_ctr = 0;
5. }
6. if (g_ctr == 0)
7. {
8. csi_pwm_out_start(&r, 7 / 2);
9. csi_pwm_out_stop(&r, 2 / 2);
10. csi_pwm_out_stop(&r, 4 / 2);
11. 
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. }
20. else //2
21. {
22. csi_pwm_out_start(&r, 4 / 2);
23. csi_pwm_out_stop(&r, 7 / 2);
24. csi_pwm_out_stop(&r, 2 / 2);
25. 
26. }
27. }
c      
  • 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. 
8. while (1)
9. {
10. lv_task_handler();
11. udelay(1000 * 1000);
12. lv_tick_inc(1);
13. led_refresh();
14. }
15. }
c      

3.3. 編譯運作

編譯通過後,點選下載下傳成功,複位運作。可看右下角的燈依次閃爍。參見如下視訊示範

RVB2601應用開發實戰系列二: 跑馬燈執行個體教程

4. 總結

本例程介紹了如何通過CSI接口配置IO管腳來控制LED燈,進而實作依次閃爍,達到跑馬燈的效果。後續還有更多的開發例程,敬請期待!

繼續閱讀