请选择 进入手机版 | 继续访问电脑版
查看: 1468|回复: 0

灯厂们背后的MCU,看LPC如何花式点灯(之二)

[复制链接]
  • TA的每日心情
    开心
    3 天前
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3297

    主题

    6542

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    31909
    最后登录
    2024-3-29
    发表于 2020-8-27 09:34:02 | 显示全部楼层 |阅读模式
    灯厂们背后的MCU,看LPC如何花式点灯(之二)


    上一篇,我们介绍了WS281x系列LED灯的基本属性,驱动方法以及如何用SPI的方式点WS281x灯带。这一篇是开始介绍如何用EZH,双核以及SCT的方式实现,最后做一个四种方式的优缺点的总结以及花式流水灯。


    EZH简介


    EZH是LPC家族的一个特色IP,类似一个超精简的内核,强在单周期控制GPIO,独立于ARM内核之外运行,可以“比较方便的”实现串/并行接口,数据搬移转换(类似DMA),弱点就是只能写汇编且需要借助KEIL或者MCUXpresso等IDE帮助生成机器码,一夜回到了51编程的时代。
    不过,NXP 提供了丰富的、基于EZH的功能库,只要调用这些库就可以享受EZH的强大功能,而不必停留在51的时代,大大方便了用户的使用。

    EZH实现WS2812数据发送


    在介绍EZH代码前,我们先要交代下,EZH作为一个内核需要有运行代码的空间,一般来讲Flash肯定给了MCU主核的运行代码,所以EZH只能偏安到一块小的RAM区域里。


    代码中我们通过编译器的attribute((setion("EZH_SECT")))来把EZH的代码分配到EZH_SECT这个区域运行,所以在实际的工程中我们要在.sct分散加载文件中设定这个EZH_SECT区域,后面谈到实际工程时会有介绍。
    1.png
    EZH代码通过分散加载设定到RAM中运行


    程序我们附在这论坛的帖子中,基本都是中文注释,理解起来应该不难,这里我们贴下程序执行的流程图,帮助各位看官消化。
    2.png
    EZH数据发送流程图


    实际程序中,我们会把这段EZH代码封装成库,如下图所示。直接调用我们声明的EZH_WS2812这个函数即可。


    在工程的分散加载文件中,我们需要在声明一个EZ_SECT的RAM区域,在KEIL IDE中如下:
    3.png
    分散加载文件中的EZ_SECT段


    这一段说明了EZH_SECT段起始在0x20040000,大小为0x00020000。
    看官可以在KEIL工程的配置选项的中找到sct文件,手动修改即可。
    4.png
    KEIL下修改分散加载sct文件

    EZH实现WS2812数据发送


    在实际的工程中,我们统一了WS2812数据发送的API,即WS2812_StripShow(),只要把EZH实现数据发送的相关功能填写进这个函数即可,在开始EZH发送之前,先要停止EZH这个外设EZH_Stop(),然后完成EZH初始化EZH_Init(),初始化完成后别忘了配置对应的IO口为EZH模式。


    完成EZH相关配置后,我们需要把实际的WS2812数据发送长度(按byte计算的)填写进WS2812TxBuf。


    设定好EZH的栈空间,以及将WS2812TxBuf传递给EZH。


    最后调用EZH_Boot()启动EZH发送数据功能,完成一次WS2812等待灯带数据发送。
    5.png
    WS2812 显示函数
    EZH实现WS2812数据发送


    在点灯实现上,我们所有的demo代码都是统一API的。
    WS2812_StripInit() 初始化WS2812点灯的功能。
    WS2812_StripClear() 清空WS2812数据组。
    WS2812_StripPixelSet(n, color, bn) 设置第n个灯显示颜色color,亮度为bn,最终的颜色数据会放到WS2812数据组。
    WS2812_StripShow() 发送WS2812数据组。
    6.png
    WS2812点灯工程API例程




    文章出处:恩智浦MCU加油站

    签到签到
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-3-29 21:51 , Processed in 0.115033 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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