每個部件需要24位數(shù)據(jù),每一種顏色(紅、綠、藍(lán))為下列格式的8位。
在編寫代碼時,我習(xí)慣于在不得不較長時間禁用中斷的地方避免阻塞代碼或條件,特別在系統(tǒng)中有用戶接口或是需要與其它處理器通信的情況下尤為如此。我的目的是盡量減輕CPU的負(fù)擔(dān),讓硬件完成大部分工作,就如同今天常見的內(nèi)部UART或SPI模塊所做的工作一樣。賽普拉斯PSoCUDB有幾項(xiàng)特性能讓這項(xiàng)工作變得非常簡便。每個UDB在數(shù)據(jù)通路中有兩個4字節(jié)FIFO和一個移位器。在實(shí)現(xiàn)UART時,您可將一個FIFO用作TX緩存,另一個用作RX緩存。對于WS2811/12,我只需要一個輸出FIFO和移位器。我決定配置硬件,為每個器件每次生成一次中斷。中斷處理器將加載24位(3字節(jié))數(shù)據(jù),直到FIFO為空時返回。采用這種方法,可以每30微秒中斷一次,而不必以150毫微秒或更短間隔禁用全部中斷和位拆裂。我決定使用的微控制器是賽普拉斯PSoCCY8C4245AXI。該微控制器大批量采購價格約為一美元,有四個UDB,運(yùn)行頻率為48MHz,足以滿足此項(xiàng)工作所需的速度和硬件要求。
設(shè)計使用了PSoC提供的四個UDB中的兩個。一個用于使用FIFO緩沖數(shù)據(jù)和移位數(shù)據(jù),這樣每個器件的全部24位(3字節(jié))可一次性寫入。第二個UDB可使用兩個比較輸出創(chuàng)建PWM。一個比較輸出用于創(chuàng)建邏輯0,另一個用于創(chuàng)建邏輯1。該串行數(shù)據(jù)可用于控制數(shù)字多路復(fù)用器,選擇波形1或0。敬請參見下圖10的方框圖。
圖7WS2811/12數(shù)據(jù)格式
WS2811/12部件采用DIN(數(shù)據(jù)輸入)和DOUT(數(shù)據(jù)輸出)信號,以便簡單地進(jìn)行串行連接。每個部件都保留其看到的頭24位數(shù)據(jù),然后把剩余數(shù)據(jù)從DOUT引腳輸出。參見下面的圖8。
圖8連接多個WS2811/12部件
當(dāng)數(shù)據(jù)流啟動后,每個部件將看到持續(xù)的數(shù)據(jù)流。如果數(shù)據(jù)信號的上升沿不超過50微秒,部件會鎖存數(shù)據(jù),將緊鄰的24位數(shù)據(jù)視為自己的數(shù)據(jù),并將其余數(shù)據(jù)重新發(fā)送出去。
圖9數(shù)據(jù)流閑置時間超過50微秒時器件復(fù)位
正如您所看到的,其原理并不復(fù)雜,但它并不能輕松地適配到標(biāo)準(zhǔn)的微控制器硬件上。我確實(shí)發(fā)現(xiàn)有人使用SPI接口來維持時序,但這要求每個真實(shí)的數(shù)據(jù)位使用至少三個SPI數(shù)據(jù)位,對于通過位拆裂獲得CPU性能而言優(yōu)勢不大。由于時序并不嚴(yán)格,如果您在固件中實(shí)現(xiàn)接口(位拆裂),CPU將專門用于翻轉(zhuǎn)驅(qū)動信號直至LED全部更新。這意味著您需要禁用所有中斷,在整個過程中不對任何其它輸入做出響應(yīng)。如果您有1,000個LED,則更新時間為(0.40微秒+0.85)*24位*1,000個LED=30,000微秒或30毫秒。這可能并不是什么問題,但如果您要以30Hz的頻率更新LED,將幾乎占用100%的CPU!在編寫代碼時,我習(xí)慣于在不得不較長時間禁用中斷的地方避免阻塞代碼或條件,特別在系統(tǒng)中有用戶接口或是需要與其它處理器通信的情況下尤為如此。我的目的是盡量減輕CPU的負(fù)擔(dān),讓硬件完成大部分工作,就如同今天常見的內(nèi)部UART或SPI模塊所做的工作一樣。賽普拉斯PSoCUDB有幾項(xiàng)特性能讓這項(xiàng)工作變得非常簡便。每個UDB在數(shù)據(jù)通路中有兩個4字節(jié)FIFO和一個移位器。在實(shí)現(xiàn)UART時,您可將一個FIFO用作TX緩存,另一個用作RX緩存。對于WS2811/12,我只需要一個輸出FIFO和移位器。我決定配置硬件,為每個器件每次生成一次中斷。中斷處理器將加載24位(3字節(jié))數(shù)據(jù),直到FIFO為空時返回。采用這種方法,可以每30微秒中斷一次,而不必以150毫微秒或更短間隔禁用全部中斷和位拆裂。我決定使用的微控制器是賽普拉斯PSoCCY8C4245AXI。該微控制器大批量采購價格約為一美元,有四個UDB,運(yùn)行頻率為48MHz,足以滿足此項(xiàng)工作所需的速度和硬件要求。
設(shè)計使用了PSoC提供的四個UDB中的兩個。一個用于使用FIFO緩沖數(shù)據(jù)和移位數(shù)據(jù),這樣每個器件的全部24位(3字節(jié))可一次性寫入。第二個UDB可使用兩個比較輸出創(chuàng)建PWM。一個比較輸出用于創(chuàng)建邏輯0,另一個用于創(chuàng)建邏輯1。該串行數(shù)據(jù)可用于控制數(shù)字多路復(fù)用器,選擇波形1或0。敬請參見下圖10的方框圖。
圖10WS2811/12接口使用PSoCUDB的方框圖