通常在 LED 大屏幕的顯示過程中,讀取數(shù)據(jù)頻繁,且隨著顯示面積的增加與色彩變化的豐富,對數(shù)據(jù)輸出速度的要求越來越高。普通方式讀取一個字節(jié)的 RAM 數(shù)據(jù),至少需要兩個機器周期,即 24 T (時鐘周期)。而使用 SPI 方式,數(shù)據(jù)的輸出速度由 SPSCK(最高可設置為 f OSC 的 1/ 4) 決定,而普通方式讀 RAM 的速度只有 1/ 24 f OSC ,即在 SPI 模式下,此 LED 大屏幕電路的數(shù)據(jù)輸出速度最大可提高 6 倍。通過此方法對輸出電路進行改造,可極大地使原有控制系統(tǒng)滿足數(shù)據(jù)高速輸出的要求。本文給出的例子雖是基于 LED 大屏幕應用的,但在 LCD 或是其他對數(shù)據(jù)有高速輸出要求的系統(tǒng)中,同樣具有借鑒運用意義。
1引 言
在 LED 大屏幕等顯示系統(tǒng)對數(shù)據(jù)輸出速度的要求日益提高的背景下,當前對控制設備進行改造的過程中,首選的辦法是更換更高速率的微處理器,而對硬件電路的挖潛往往容易被忽視。
在實踐運用中,建議應先考慮在原有的系統(tǒng)上進行硬件電路改造,如仍不能滿足顯示要求,可再考慮更換高速率微處理器及用 FPGA/ CPLD 器件進行輸出電路替代處理的方案。本文以 LED 大屏幕控制電路為例,提出了一種在硬件電路改造上提高顯示數(shù)據(jù)輸出速度的實現(xiàn)辦法。
2 數(shù)據(jù)輸出電路的優(yōu)化基理
由 LED 大屏幕的顯示原理可知,一個數(shù)據(jù)顯示在 LED 大屏幕的過程分為:從存儲器中讀出數(shù)據(jù)與送入到 LED 板中顯示兩個步驟。這一過程需要產(chǎn)生如下控制信號:數(shù)據(jù)地址送入存儲器,存儲器讀信號,鎖存器開通及 LED 單元板中的行信號、HC595 的 SCK 移位、RCK 鎖存、E 使能信號等。這些必需信號的產(chǎn)生增加了數(shù)據(jù)顯示過程的時間。如果能夠復用其中的信號,勢必減少這一過程的延時。在 LED 顯示系統(tǒng)中,常把顯示數(shù)據(jù)按行存儲到外部 ROM/ RAM 中的辦法即是一例。該辦法設定存儲器的高位并接到 L ED 的行控制線上,數(shù)據(jù)按行儲存,送入數(shù)據(jù)地址后,按行讀出數(shù)據(jù),并同時開通了行控制信號。下面的信號復用方案也是類似的原理。
圖 1 信號復用示例
在考查讀外存的 MOVX 命令時發(fā)現(xiàn):執(zhí)行該命令時可產(chǎn)生讀信號(RD # ),即讀外存時不但不需要另外去產(chǎn)生讀信號(RD # ),而且還可以將此信號供給鎖存器 74HC273 及 LED 板上的移位信號 SCK 使用。這里要注意的是:在數(shù)據(jù)讀出后,SCK 信號才送出,所以 RD # 信號不可直接做 SCK 信號使用,必須做延時處理(最小延時必須要略大于 RAM 的讀寫時間 tRC 與 74HC273 的數(shù)據(jù)鎖存延時 tTL H 之和)。
而當連續(xù)讀出一塊存儲器數(shù)據(jù)時,需要通過程序產(chǎn)生新的地址賦值給數(shù)據(jù)口, 而這些地址都是順序變化的?;谶@一特點,設計采用計數(shù)器電路用來保存讀數(shù)據(jù)時的初始地址,利用外部供給的脈沖,只要對計數(shù)器的保存地址進行順序增加,即可將數(shù)據(jù)連續(xù)讀出。
單片機 ALE 腳或是利用串行口工作方式也會產(chǎn)生一定頻率的脈沖,但沒有 SPI 方式下產(chǎn)生的脈沖頻率高,且這兩種方式的使用均有一定的限制,而啟動 SPI 方式比較方便。串行外圍接口(Serial Perip heral Interface , SPI) 總線系統(tǒng)是一種同步串行外設接口,是 Motorola 首先在其 MC68HCXX 系列處理器上定義的。SPI 系統(tǒng)有 4 個 I/ O 腳,它們是串行時鐘 SPSCK、主機輸入 / 從機輸出數(shù)據(jù)線 MISO、主機輸出 / 從機輸入數(shù)據(jù)線 MOSI 和低位有效的從機選擇數(shù)據(jù)線 SS.SP2SCK 用于同步數(shù)據(jù)從 MOSI 輸入和 MISO 的輸出傳送。通過對 SPI 控制寄存器 SPCR 的設置,SPSCK 的頻率最高可以達到振蕩器頻率( fOSC )的 1/ 4。
因為 SPI 模式可方便產(chǎn)生出較高頻率脈沖的優(yōu)點,即采用 SPSCK 作為計數(shù)器的脈沖,利用計數(shù)器對存儲器產(chǎn)生連續(xù)變化的地址,實現(xiàn)對數(shù)據(jù)的高速讀出。并且 SPSCK 信號經(jīng)過變換與延時處理,可同時供給 LED 做 SCK 移位信號使用。
圖 2 SPI 在讀取存儲器的運用
3 SPI 運用的實現(xiàn)過程
從上文可以得到這樣的啟示:在 LED 控制電路的設計中,可借助于 SPI 模式讀取數(shù)據(jù),即增加一塊 SPI 模式的 FLASH 存儲器,一方面可以保存重要文檔,另一方面可以利用 SPSCK 產(chǎn)生的信號,通過計數(shù)器電路實現(xiàn)對存儲器高速讀數(shù)據(jù),并且復用此信號產(chǎn)生屏幕顯示的控制信號。在給定了輸出數(shù)據(jù)的首地址并啟動 SPI 后,此方式使數(shù)據(jù)的讀出到屏幕顯示這一過程自動進行,同一信號源的全硬件方式大大減少了以往分別產(chǎn)生各控制信號方式時的銜接延時。圖 3 為 SPI 在 LED 大屏幕控制電路中的運用示例。
圖 3 SPI 模式下的 LED 大屏幕控制電路圖
級聯(lián)計數(shù)器的個數(shù)根據(jù) RAM 的容量大小,即地址線的數(shù)目來確定。微處理器通過驅(qū)動器連接 SPI 串行存儲器, 驅(qū)動器可以選擇 7407 或 7417 的型號。RM_MODE 用來區(qū)別不同的讀寫操作方式。當 RM_MODE = 1 時,是普通讀寫外部存儲器的方式,當 RM_MODE = 0 時,就可以讓主機作為主器件,串行 FLASH 存儲器作為從器件,兩者以 SPI 方式進行通信,利用此時產(chǎn)生的 SPSCK 信號對存儲器進行高速讀數(shù)據(jù)操作。同時 SPSCK 信號經(jīng)過變換與延時處理,可以供給 LED 做 SCK 移位信號用。在計數(shù)脈沖的輸入端,可以使用跳線做加、減方式的選擇處理。當脈沖接于計數(shù)器 UP 端時, 為加計數(shù)方式, 接于 DOWN 時,為減計數(shù)方式。圖 3 也可擴展并接多組計數(shù)器,多組 RAM.
減計數(shù)器方式的運用大大增強了數(shù)據(jù)輸出的靈活性。在 LED 大屏幕顯示中,加、減計數(shù)器配合使用,可以使相同一塊控制卡輸出數(shù)據(jù)的顯示長度提高一倍。當使用減計數(shù)器方式時,為了與使用加方式時 LED 大屏幕上顯示的圖文一致,必須對與減計數(shù)器連接的 RAM 的數(shù)據(jù)進行上、下半屏交換處理,并且在輸出時要在程序中改變數(shù)據(jù)的起始點,給出的行控制信號(RCK) 也應做倒序處理(見圖 4)。
圖 4 加、減法模式下的數(shù)據(jù)組織與顯示
4 本方式使用時的注意事項
本方式使用時要注意計數(shù)器及 RAM 芯片的讀寫速度必須與 SPSCK 相匹配。SPI 方式的速率比較高,電路各器件讀取速度越高,數(shù)據(jù)出錯的幾率就會越小。
此外還有其他一些原因也會引起讀數(shù)據(jù)時的錯誤。如軟件編寫不當導致數(shù)據(jù)地址超出 RAM 空間,電路設計未重視計數(shù)器高速工作時發(fā)熱對周邊器件與布線帶來的影響等。
使用 SPSCK 信號讀取外部儲存器時,同樣會產(chǎn)生 SPI 主、從模式下的溢出錯誤,即連續(xù)傳輸多個數(shù)據(jù)時, 后一個數(shù)據(jù)覆蓋了前一個數(shù)據(jù)而產(chǎn)生的錯誤。這種錯誤產(chǎn)生的原因是從器件的傳輸標志 SPIF 從相對于主器件的傳輸標志 SPIF 主有一定的滯后,在主器件連續(xù)發(fā)送數(shù)據(jù)時,會導致從器件的傳輸標志和主器件下一個數(shù)據(jù)的傳輸標志相重疊,而利用 SPSCK 觸發(fā)計數(shù)器使地址遞加讀取數(shù)據(jù),第一個收到的數(shù)據(jù)也會被覆蓋。
這種傳輸錯誤可以用軟、硬件的方法進行改進。在本文的設計中,后期在軟件編寫上采用了如下解決方法:先啟動 SPI 模式,再進入計數(shù)器讀并行 RAM ,浪費一個時序。或是在 RAM 中存入數(shù)據(jù)時,全部存到它后一位的地址單元上,再用 SPI 方式產(chǎn)生的脈沖去讀 RAM ,就可得到正確的數(shù)據(jù)。
理論上本文方式可使顯示數(shù)據(jù)的輸出速度高至 fOSC 的 1/ 4 ,但實際運用時卻受到了 RAM、鎖存器等輸出電路器件的參數(shù)限制。SPSCK 的速率設定要根據(jù)所選擇 RAM 的參數(shù)確定,即要滿足 RAM 最小的地址有效時間與數(shù)據(jù)有效時間的要求。
圖 5 主、從 SPIF 時序下的數(shù)據(jù)溢出錯誤