前一段,接了别人一个亮化工程的活,本想用MCU来控制的。但别人希望一个板子能够接管的LED数目比较多,且希望能够通过WEB来管理这个板子。很痛苦的进行产品的选型。
一直没有什么好的选择,后来无意中拿起手里的SEED-DIM138/1808小模块,一想何不就使用这个板子来做一个控制板呢?
可能有人会说我痴人说梦,这个才有几个GPIO可以用,即使可用,在Linux下面管理起来方便吗?实时性会好吗?
众看官莫急,且听我慢慢道来!
其实我自己心里开始也没什么谱,不过手边有板子,顺手写个程序,飞几根线就测一下呗。
测试一,写一个内核模块,以一个固定模式管理一串LED灯,红,蓝,绿各占一个IO引脚,时钟及锁存时钟各占一个IO引脚。使用一个内核定时器来做数据的移位。管理一串几百个灯没什么问题。
测试二,将测试一的模式与内核分离出来放在应用中处理,也没什么问题。
测试三,增加到十串左右灯,结果发现,模式的变换有点卡。
至此,可以说不得不放弃这样的常规方法。
但这是否就代表黔驴就技穷了呢?
这要是放在以往,可能我就投降了呢,有的人可能就说了,“为什么不使用138里面的DSP呢,实时性不就有保证了?”
是的,这样做是可以的,关于DSP与ARM之间的通信我也是非常熟的。
“那为什么不这样做呢?”
我完全可以那么做,但谁叫我手里的那块板子上面的焊的CPU是AM1808呢?
注定DSP与我没关系!
“嘿,嘿!这个技穷了吧!”我听见了嘲笑的声音。
没办法终极绝招,PRU的光芒,让我自信心极其爆棚。
那么PRU是什么呢?
PRU的全称叫Programable Realtime Unit,即可编程实时单元。这样说可能大家还不是非常理解,可是我要是这样说,大家可能就有点想法了。PRU,你可以看作它是AM18XX产品家族的片上CPLD。有了它,你可以非常灵活地将闲置的CPU管脚定义到任意你想到的功能上,仅受限于你的创意与PRU那150MHz的时钟。
测试四、使用PRU以固定的模式,管理相当数量的IO引脚,来点亮LED灯串。点了二十多个灯串,没有任何问题。
测试五、为PRU写了一个Linux下的小驱动程序,测试了Linux下主CPU与PRU模块的通信。成功!
测试六、改测试四的程序,将模式由固定改为从Linux获取,使用Linux下的应用程序来向PRU发送灯模式。
测试七、将Linux程序中的固定灯模式改为从Sqlite数据库获取,做一个网站向Sqlite数据库写模式
至此,亮化工程的产品原型做完。
那么PRU这个片上CPLD还有什么样的妙用呢?
有人拿他做出了四路串口,加上片上原来的三个串口,总共有七个串口可用。 三四十块钱搞定了一个多串口系统
有人拿他做了ISO7816协议,用它读写IC卡
有人拿他接管了串口打印机,发现打印速度比较直接用ARM管理快了许多,且打印更平顺。
那么你有什么样的奇思妙想呢? |