姚國(guó)珍 尚秋峰
(華北電力大學(xué)(保定) 河北省保定市 071003)
數(shù)字信號(hào)處理器(Digital Signal Processing, DSP)是一種適合完成實(shí)時(shí)數(shù)字信號(hào)處理算法的微處理器,廣泛應(yīng)用在通信、家用電器、軍事和醫(yī)療等領(lǐng)域。美國(guó)TI公司的TMS320C5509A為C5000系列中的一款低功耗16位定點(diǎn)DSP,在信號(hào)分析、數(shù)字通信、圖形圖像處理等方面應(yīng)用較普遍[1]。在DSP構(gòu)成的微處理器系統(tǒng)中,通常采用液晶和鍵盤作為人機(jī)交互工具,可實(shí)現(xiàn)參數(shù)或命令的輸入及處理結(jié)果的顯示輸出等功能。
在微處理器系統(tǒng)中,進(jìn)行液晶和鍵盤擴(kuò)展時(shí),通常采用輸入輸出端口(General-Purpose Input/Output,GPIO)實(shí)現(xiàn)。由于C5000系列DSP主要針對(duì)便攜消費(fèi)電子產(chǎn)品而設(shè)計(jì),所以單獨(dú)的GPIO較少。很多可以用作GPIO的引腳是和片上外設(shè)功能復(fù)用的,當(dāng)其作為片上外設(shè)功能引腳時(shí),就不能作為GPIO來使用[2]。所以,進(jìn)行液晶和鍵盤擴(kuò)展時(shí),不能采用GPIO的方法進(jìn)行擴(kuò)展,否則會(huì)用影響片上外設(shè)的使用。
針對(duì)上述問題,本文采用復(fù)雜可編程邏輯器件(Complex Programmable Logic Device,CPLD)設(shè)計(jì)了點(diǎn)陣式液晶和矩陣鍵盤與TMS320C5509A的接口方法。利用本文的設(shè)計(jì)方法,通過DSP的外部總線即可實(shí)現(xiàn)DSP對(duì)液晶和鍵盤的控制,不占用GPIO資源,從而可以提高整個(gè)DSP系統(tǒng)設(shè)計(jì)的冗余度。
DSP與液晶和鍵盤的接口框圖如圖1所示。DSP通過外部數(shù)據(jù)總線、地址總線及控制信號(hào)與CPLD相連,其中D7-D0為低8位數(shù)據(jù)總線,AWE為異步寫使能信號(hào),ARE為異步讀使能信號(hào),CE2為空間片選信號(hào);為了減少電路布線壓力,地址總線只用了其中一部分,包括A13-A11及A3-A0。液晶采用了128x64點(diǎn)陣式顯示器,其接口有RS(指令/數(shù)據(jù)選擇信號(hào))、RW(讀寫選擇信號(hào)),EN(使能信號(hào)),DB7-DB7(數(shù)據(jù)線)。鍵盤采用了4x4矩陣鍵盤,其中DK3-DK0對(duì)應(yīng)矩陣鍵盤的“行”,DK7-DK4對(duì)應(yīng)矩陣鍵盤的“列”。

圖1:接口原理框圖
對(duì)液晶進(jìn)行驅(qū)動(dòng)時(shí),需要產(chǎn)生兩組信號(hào),一組是控制信號(hào)RS、RW、EN和RST,另一組是用于傳輸命令或顯示數(shù)據(jù)的總線信號(hào)DB7-DB0。上述兩組信號(hào)都由DSP的數(shù)據(jù)線產(chǎn)生,圖2給出了兩組信號(hào)的CPLD圖形化編程方法。四個(gè)控制信號(hào)RST、RS、RW和EN通過鎖存器74273鎖存數(shù)據(jù)線的低四位D3-D0產(chǎn)生,74273的鎖存信號(hào)CLK由地址總線A13-A11和A3-A1、寫信號(hào)AWE以及空間片選信號(hào)CE3譯碼產(chǎn)生,如圖2(a)所示。地址信號(hào)A1和A12經(jīng)過非門,并與其余地址信號(hào)、AWE和CE3進(jìn)行“或非”運(yùn)算后得到CLK信號(hào),所以當(dāng)A1和A12為邏輯“1”,其余信號(hào)為邏輯“0”時(shí),則CLK為邏輯“1”,產(chǎn)生一個(gè)上升沿變化,可將數(shù)據(jù)總線D3-D0的狀態(tài)鎖存到74273的輸出端。當(dāng)CE3為邏輯“0”時(shí),訪問的是DSP的字地址為0x600000開始的空間,所以A1和A12位為邏輯“1”、其余位為邏輯“0”時(shí),對(duì)應(yīng)的地址為0x600801,即當(dāng)DSP向地址0x600801進(jìn)行寫數(shù)據(jù)時(shí),即可將D3-D0的狀態(tài)鎖存到74273的輸出端,從而產(chǎn)生液晶的控制信號(hào)。限于CPLD引腳數(shù)量的限制,未將DSP的全部地址信號(hào)引入CPLD,只引入了A13-A11及A3-A1。所以,產(chǎn)生液晶控制信號(hào)的地址并不是唯一的,即只要滿足A1和A12位為邏輯“1”、A13、A11、A3、A2位為邏輯“0”時(shí)都滿足要求,0x600801只是多個(gè)地址中的一個(gè),所以如果DSP系統(tǒng)中還擴(kuò)展了其它外設(shè)及存儲(chǔ)器,應(yīng)注意避免地址沖突情況的發(fā)生。
液晶的數(shù)據(jù)信號(hào)由DSP的數(shù)據(jù)線D7-D0產(chǎn)生。由于DSP的數(shù)據(jù)線還要驅(qū)動(dòng)鍵盤、存儲(chǔ)器等其它器件,在不驅(qū)動(dòng)液晶時(shí),需要液晶與DSP的數(shù)據(jù)線進(jìn)行隔離,所以,產(chǎn)生液晶數(shù)據(jù)信號(hào)時(shí),除了要用74273進(jìn)行鎖存外,還采用了74244完成總線隔離,如圖2(b)所示。74244的選通信號(hào)由一片74273通過鎖存DSP數(shù)據(jù)線的D0位產(chǎn)生,74273的鎖存信號(hào)的產(chǎn)生方式與圖2(a)中74273的鎖存信號(hào)產(chǎn)生方式相同,對(duì)應(yīng)的地址為0x600800。74244的輸入端為74273鎖存的DSP的數(shù)據(jù)線D7-D0,此74273的鎖存信號(hào)對(duì)應(yīng)的地址為0x600802。

圖2:液晶驅(qū)動(dòng)信號(hào)產(chǎn)生
綜上,對(duì)液晶進(jìn)行控制需要訪問3個(gè)地址,相當(dāng)于在CPLD中定義了3個(gè)寄存器,寄存器地址分別是0x600800、0x600801和0x600802,根據(jù)寄存器的功能,分別稱三個(gè)寄存器為數(shù)據(jù)選通寄存器、控制寄存器和數(shù)據(jù)寄存器,分別用GR、CR和DR表示。
鍵盤模塊采用了4x4的矩陣鍵盤,通過行列掃描方式工作[3],如圖3所示。鍵盤共包括8個(gè)引腳DK7-DK0,其中DK3-DK0對(duì)應(yīng)矩陣鍵盤的“行”,DK7-DK4對(duì)應(yīng)矩陣鍵盤的“列”。鍵盤工作時(shí),首先依次向行引腳寫入掃描數(shù)據(jù)1110、1101、1011和0111,然后讀取列引腳的狀態(tài),通過行列數(shù)據(jù)即可確定是哪個(gè)按鍵按下。圖4給出了CPLD的圖形化編程方法,由圖3可知,寫行數(shù)據(jù)時(shí),通過74273將DSP數(shù)據(jù)線的D7-D4鎖存到矩陣鍵盤的DK7-DK4引腳上,對(duì)應(yīng)的地址為0x600803;讀列數(shù)據(jù)時(shí),通過74244將DK3-DK0的狀態(tài)讀取到DSP的數(shù)據(jù)線D3-D0上,對(duì)應(yīng)的地址為0x600804。

圖3:鍵盤引腳圖

圖4:鍵盤驅(qū)動(dòng)信號(hào)產(chǎn)生
用C語言進(jìn)行編程時(shí),需要根據(jù)液晶的各個(gè)引腳的時(shí)序要求,使CPLD的輸出引腳產(chǎn)生相應(yīng)的信號(hào)。圖5給出了對(duì)液晶進(jìn)行寫操作時(shí)的時(shí)序圖,由圖5可知,進(jìn)行寫操作時(shí),首先要使RS和R/W信號(hào)有效,當(dāng)向液晶寫要顯示的內(nèi)容時(shí),RS為高電平,當(dāng)向液晶寫控制命令時(shí),RS為低電平;由于是對(duì)液晶進(jìn)行寫操作,所以R/W為低電平。然后,使能信號(hào)E變?yōu)楦唠娖剑瑪?shù)據(jù)總線上出現(xiàn)寫入液晶的數(shù)據(jù),持續(xù)一段時(shí)間后,使能信號(hào)E再變?yōu)榈碗娖剑瓿梢淮螌懖僮鳌?/p>

圖5:液晶寫操作時(shí)序圖
根據(jù)液晶寫操作的時(shí)序圖,圖6給出了在DSP上編程時(shí)的流程圖。首先向GR寫入0x00,此時(shí)DSP的地址總線上出現(xiàn)0x600800,數(shù)據(jù)總線上出現(xiàn)0x00,D0位為“0”,按照?qǐng)D2(b)所示邏輯,74244將被選通。然后向CR寫入0x03(或0x01),使E=0、R/W=0、RS=1(或0),向DR寫入顯示數(shù)據(jù)或命令。再通過依次向CR寫入0x0b(或0x09)和0x03(或0x01)使信號(hào)E產(chǎn)生一段高電平信號(hào),將顯示數(shù)據(jù)或命令寫入到液晶中,為了使高電平信號(hào)持續(xù)時(shí)間滿足時(shí)序要求,需要在此處加入一段時(shí)間的延時(shí)。最后向GR寫入0x01,使D0位變?yōu)椤?”,將數(shù)據(jù)總線斷開,完成一次液晶的寫操作。

圖6:液晶寫操作流程圖
向液晶進(jìn)行寫操作的C語言程序如圖7所示,其中void LCD_writeData (unsigned int content)和void LCD_writeCommand (unsigned int content)分別是向液晶寫數(shù)據(jù)和寫命令的函數(shù),函數(shù)的參數(shù)unsigned int content為寫入的字節(jié),函數(shù)的前面,采用宏定義的方式了定義了三個(gè)寄存器名稱。

圖7
對(duì)鍵盤進(jìn)行編程時(shí),首先寫入行數(shù)據(jù),然后讀取列數(shù)據(jù),并根據(jù)行列數(shù)據(jù)判斷是否有鍵按下。如果有鍵按下,則等待一段時(shí)間,再次判斷是否有鍵按下,以防止出現(xiàn)抖動(dòng)導(dǎo)致的誤判。當(dāng)判斷確實(shí)有鍵按下后,則可根據(jù)寫入的行數(shù)據(jù)和讀取的列數(shù)據(jù)判斷是哪個(gè)按鍵按下,掃描鍵盤的流程圖如圖8所示。

圖8:鍵盤掃描程序流程圖
下面給出了用C語言編程實(shí)現(xiàn)的鍵盤掃描程序,掃描過程由一個(gè)for循環(huán)完成,每循環(huán)一次完成鍵盤一行的掃描。當(dāng)判斷出按下的鍵后,利用printf函數(shù)輸出該鍵對(duì)應(yīng)的符號(hào),實(shí)際應(yīng)用時(shí),可將printf函數(shù)替換為按鍵對(duì)應(yīng)的子函數(shù)或功能代碼。如圖9所示。

圖9
本文針對(duì)C5000系列DSP的GPIO較少的問題,采用CPLD設(shè)計(jì)了TMS320VC5509A與液晶和鍵盤的接口電路,詳細(xì)給出了CPLD圖形化編程實(shí)現(xiàn)方法和DSP的C語言編程的實(shí)現(xiàn)方法。該方法采用TMS320C5509A的數(shù)據(jù)總線和地址總線訪問液晶和鍵盤,避免了占用過多的GPIO的問題。本文的設(shè)計(jì)方法不僅可應(yīng)用在DSP系統(tǒng)中,在其它具有外部總線的微處理器構(gòu)成的系統(tǒng)中同樣適用。