This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

am4379如何通过DMA+PWM方式驱动ws2812

Other Parts Discussed in Thread: AM4379

大家好,有谁做过ws2812灯带控制?是用DMA+PWM方式控制的么?

  • 网上搜搜,看看这个东西是需要用什么接口,DMA是用于批量数据搬运的,估计不是你想要的东西。

  • 在网上没有找到相关资料,有用树莓派DMA+PWM驱动的,因为ws2812的工作原理是输入一组不固定的占空比的波形,代表01序列的数据。

  • 请问如何在linux系统下用DMA控制TIMER来输出不同占空比的波形呢?DMA给TIMER的数据应该是用来改变TIMER占空比的

  • 没明白DMA的意义在哪儿。这样吧,你先看一下PWM的使用guide吧,DMA只是一种提升批量数据交互的手段而已,作为你后续的加入,先做本身的功能吧。

    http://processors.wiki.ti.com/index.php/Linux_Core_PWM_User%27s_Guide

  • 我在网上看到是用单片机通过DMA+TIMER输出PWM波形,因为需要快速改变占空比,所以用DMA送数据给TIMER内部的比较寄存器来调节PWM波形的占空比。这是单片机实现的原理。

    我想4379是不是也用DMA加定时器来输出PWM的呢?

  • 在AM4379上有个专门的PWM模块,可以输出PWM波。这个和定时器TIMER是两个概念。

    AM4379毕竟是个Cortex A9核的MPU,和单片机毕竟差别还是有很多的。不要用固化的单片机思路来认知A9,比如说你一直提到的DMA,我一直而不确定你是否理解他的用途。在A9上,他多数的用途是做批量的数据copy,以提高效率。比如说,你要显示一副图片在LCD上,就涉及到从内存中把这幅图片搬出来到frame buffer中;如果用CPU操作,要一个byte一个byte的搬,如果这是1MB的数据,要搬运多少次,对系统的loading可想而已。而DMA可以直接定义要搬运的图片的起始地址和大小,触发后无需CPU的介入直接进行数据的搬移,从而极大的减少了cpu的loading。定时器也好,PWM也好,都是直接操作的模式,没有BUFFER,想怎么设计DMA事件配置呢

    另外,你说到的单片机“给TIMER内部的比较寄存器来调节PWM波形的占空比”,我理解你说的这个PWM波,是靠着定时器定时触发事件,然后拉高拉低外部IO口,从而做出来的PWM波形吧?这一点要先确认下

  • 这位工程师说的意思就是我想表达的,就是不知道具体该如何实现

  • 我有用过DMX+PWM raspberry PI 去控制 SK9822 LED strip  ,没试过WS2812,但他们都是串联的SPI信号,应该都是可以的

  • 嗯,我在网上查到也都是用树莓派做的,但没有找到用am437x或者am335x做的