612|0

71

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

RVB2601应用开发实战系列二: 跑马灯 [复制链接]

关键词:RVB2601、RISC-V开发板、例程,低功耗,玄铁E906,RISC-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硬件原理图如下: 

https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/userFiles/3773052466552311808/postdetail/1618319940313/e01fec53edf78380fe4836973bb93d0f.png

3. 跑马灯开发

3.1 例程下载

打开CDK,点击HOME图标,查找ch2601_marquee_demo后,打开工程可以看到以下目录 

https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/userFiles/3773052466552311808/postdetail/1618320002545/8d5e483cdbe9845e9bbf4f02ddf999d0.png

3.2 LED配置

  • led_pinmux_init

该功能函数位于app/src/led.c, 用于初始化三色LED灯的IO管脚。配置三色灯的PA7、PA25和PA4为IO模式,为每个IO管脚配置PWM通道以及占空比时间。

void led_pinmux_init()
{
        //7
    csi_pin_set_mux(PA7, PA7_PWM_CH7);
    csi_pin_set_mux(PA25, PA25_PWM_CH2);
    csi_pin_set_mux(PA4, PA4_PWM_CH4);
    ret = csi_pwm_init(&r, 0);
    ret = csi_pwm_out_config(&r, 7 / 2, 300, 100, PWM_POLARITY_HIGH);
    ret = csi_pwm_out_start(&r, 7 / 2);
        //25
    ret = csi_pwm_out_config(&r, 2 / 2, 300, 100, PWM_POLARITY_HIGH);
    ret = csi_pwm_out_start(&r, 2 / 2);
        //4
    ret = csi_pwm_out_config(&r, 4 / 2, 300, 100, PWM_POLARITY_HIGH);
    ret = csi_pwm_out_start(&r, 4 / 2);
}
  • led_refresh

该功能函数位于app/src/led.c, 用于依次闪烁LED。利用g_ctr计数器来判断闪烁LED灯。通过操作三根IO管脚来确定显示指定颜色的灯。

void led_refresh()
{
    g_ctr++;
    if (g_ctr == 3) {
            g_ctr = 0;
    }
    if (g_ctr == 0)
    {
        csi_pwm_out_start(&r, 7 / 2);
        csi_pwm_out_stop(&r, 2 / 2);
        csi_pwm_out_stop(&r, 4 / 2);

    }
    else if (g_ctr == 1)
    {        
        csi_pwm_out_start(&r, 2 / 2);
        csi_pwm_out_stop(&r, 7 / 2);
        csi_pwm_out_stop(&r, 4 / 2);

    }
    else //2
    {
        csi_pwm_out_start(&r, 4 / 2);
        csi_pwm_out_stop(&r, 7 / 2);
        csi_pwm_out_stop(&r, 2 / 2);

    }
}
  • demo_task

该功能函数位于app/src/main.c, 用于周期性点亮LED灯,在主函数里调用。

static void demo_task(void *arg)
{
    lv_init();
    oled_init();
    lable_test();
    led_pinmux_init();

    while (1)
    {
        lv_task_handler();
        udelay(1000 * 1000);
        lv_tick_inc(1);
        led_refresh();
    }
}

 

3.3. 编译运行

编译通过后,点击下载成功,复位运行。可看左下角的灯依次闪烁。

https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/userFiles/3773052466552311808/postdetail/1618320048390/f4842bf36e41489534eeb4e34f367908.png

 

4. 总结

本例程介绍了如何通过CSI接口配置IO管脚来控制LED灯,从而实现依次闪烁,达到跑马灯的效果。后续还有更多的开发例程,敬请期待!

 

本文转自平头哥芯片开放社区(occ),更多详情请点击【这里】

此帖出自信息发布论坛
点赞 关注(1)
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表