基于F2812的監(jiān)測系統(tǒng)的設(shè)計
1. 引言
傳統(tǒng)的監(jiān)測系統(tǒng)大多都是在單片機基礎(chǔ)上開發(fā)的。單片機由于速度慢,運算能力弱,實時性差,在需要處理大量高速實時數(shù)據(jù)的情況下,往往不能達到要求,而DSP則非常擅長進行高速信號采集和數(shù)據(jù)處理。因此,本文將討論一種基于F2812并使用液晶顯示的監(jiān)測系統(tǒng)的設(shè)計方案。
2. 系統(tǒng)總體硬件結(jié)構(gòu)
本系統(tǒng)采用TI公司推出的32位定點DSP芯片TMS320F2812作為底層主處理器件,利用其片上16通道A/D轉(zhuǎn)換模塊將采集得到的數(shù)字信號進行處理,并將所有控制電路和地址譯碼,分配等功能設(shè)計在CPLD中,通過CPLD來控制讀寫液晶顯示模塊等外圍器件,其中,液晶顯示模塊采用臺灣晶采光電股份有限公司生產(chǎn)的一款內(nèi)嵌SED1335控制器的AT-320240Q1FIEW-33H型液晶模塊(320x240點陣)。此外,在DSP芯片外還擴展了RAM和FLASH。硬件結(jié)構(gòu)框圖如下:
3. F2812與液晶顯示模塊接口設(shè)計
在上圖中,RAM和FLASH ROM是F2812的外擴存儲器,CPLD是用來作為地址譯碼產(chǎn)生片選信號的,它們都映射到F2812的XINTF區(qū)域。F2812的XINTF包括5個存儲區(qū)域:
Zone0 存儲區(qū)域: 0x002000—0x003FFF,8K x 16位
Zone1 存儲區(qū)域: 0x004000—0x005FFF,8K x 16位
Zone2 存儲區(qū)域: 0x080000—0x0FFFFF,512K x 16位
Zone6 存儲區(qū)域: 0x100000—0x17FFFF,512K x 16位
Zone7 存儲區(qū)域: 0x3FC000—0x3FFFFF,16K x 16位
其中,Zone0和Zone1共用1個片選線XZCS0AND1,Zone6和Zone7共用1個片選線XZCS6AND7,Zone2單獨使用1個片選線XZCS2.如上圖所示。CPLD映射到Zone0(地址0x2000—0x3FFF),即當(dāng)訪問Zone0區(qū)域時,XZCS0AND1有效(CS1有效),此時選中CPLD;同樣,RAM和FLASH分別映射到Zone6和Zone2,當(dāng)訪問Zone6(0x100000—0x17FFFF)或Zone2(0x080000—0x0FFFFF),則XZCS6AND7(CS6)或XZCS2(CS2)有效,表明選中了RAM或FLASH。
可以注意到CPLD使用了F2812的4位地址線A12…A9作為譯碼信號,通過CPLD譯碼來實現(xiàn)LCDCS信號有效。在本系統(tǒng)中通過CPLD編程實現(xiàn)當(dāng)A12…A9為1100時經(jīng)CPLD譯碼后LCDCS有效,但應(yīng)注意前提是CPLD必須被選中。因為CPLD映射到Zone0,只有訪問0x2000—0x3FFF這個區(qū)域時,才能選中CPLD。這就要求A15…A13必須為001,其余A8…A1不參與譯碼,可取任意值,在此全部取為0。如此一來,只有A15…A0為0x3800和0x3801時LCDCS有效,此時F2812可以訪問LCD.
在液晶模塊接口中,A0腳為數(shù)據(jù)/指令寄存器的選擇信號.A0=1,訪問指令寄存器,A0=0,訪問數(shù)據(jù)寄存器。在硬件圖中我們可以看到液晶模塊接口的A0腳直接接F2812的XA0腳,再綜合上面所述,就可以確定0x3800為液晶模塊數(shù)據(jù)寄存器地址,0x3801為液晶模塊指令寄存器地址
4. 液晶模塊內(nèi)嵌控制器及其指令介紹
SED-1335是整個320x240液晶模塊的核心部分,接下來將簡要介紹一下其指令集。為便于瀏覽,特將SED-1335的所有指令列表如下。
帶有參數(shù)的指令代碼的作用之一就是選通相應(yīng)參數(shù)的寄存器,任一條指令的執(zhí)行(除SLEEP IN, CSRDIR, CSRR和MREAD外)都產(chǎn)生在附屬參數(shù)的輸入完成之后。MPU可用寫入新的指令代碼來結(jié)束上一條指令參數(shù)的寫入,此時已寫入的新參數(shù)與余下的舊參數(shù)有效地組合成新的參數(shù)組,需要注意的是雖然參數(shù)可以不必全部寫入,但所寫的參數(shù)順序不能改變,也不能省略。
在下面將列出部分初始化程序來說明指令的使用,但對于CSRDIR和CSRW指令,有必要詳細(xì)解釋一下。CSRDIR指令是用來設(shè)置光標(biāo)移動方向的,有上,下,左,右四個移動方向(4EH,4FH,4DH,4CH),CSRW指令則是用來設(shè)置光標(biāo)地址的。要特別注意這里的光標(biāo)是對應(yīng)顯存里面的一個字節(jié)(byte),而不是對應(yīng)字節(jié)里的一個位(bit),當(dāng)設(shè)置光標(biāo)向右移動時,每寫完一個字節(jié)數(shù)據(jù)到顯存,光標(biāo)地址就會加一,此時對應(yīng)顯存的字節(jié)地址加一;同理,設(shè)置光標(biāo)向左移動時,對應(yīng)顯存的字節(jié)地址減一。而當(dāng)設(shè)置光標(biāo)向下移動時,目標(biāo)光標(biāo)地址(字節(jié)地址)=當(dāng)前光標(biāo)地址(字節(jié)地址)+AP(液晶屏一行所對應(yīng)顯存的字節(jié)數(shù)),注:一般AP設(shè)置為完整顯示液晶屏一行所用字節(jié)數(shù)加1,即40+1=41. 如下圖所示,如果當(dāng)前光標(biāo)在字節(jié)地址Add1處,則寫完一個字節(jié)數(shù)據(jù)后光標(biāo)則移到了字節(jié)地址Add42處;同理,設(shè)置光標(biāo)向上移動時,如果當(dāng)前光標(biāo)在Add81處,則寫完一個字節(jié)數(shù)據(jù)后光標(biāo)則移到了Add40處
5. 液晶顯示的軟件設(shè)計
5.1初始化LCD程序:
#define LCD_DAT (*((volatile unsigned int *)0x3800)) //定義數(shù)據(jù)寄存器
#define LCD_COM (*((volatile unsigned int *)0x3801))//定義指令寄存器
void Lcd_init(void)
{
LCD_COM = 0x40;//顯示窗口設(shè)置指令,之后帶8個參數(shù)
LCD_DAT = 0x30;//單屏LCD模式,內(nèi)部字元發(fā)生器有效
LCD_DAT = 0x87;//顯示字符寬度8
LCD_DAT = 0x07;//顯示字符高度8
LCD_DAT = 0x27;//一行顯示40個字節(jié)
LCD_DAT = 0x46;
LCD_DAT = 0xEF;//總共顯示240行
LCD_DAT = 0x28;//AP=40+1
LCD_DAT = 0x00;
…………… //其他初始化指令
}
5.2 顯示一個32x32字符程序:
void Disp16x32Char(void)
{
LCD_COM = 0x4E;//設(shè)置光標(biāo)地址自動移動方向 向上
for(i=0;i<4;i++)//從左到右連續(xù)寫入4列數(shù)據(jù),每列32字節(jié),共128字節(jié)
{ // x1取值范圍1--40,y1取值范圍1--240
Set_Graphic_Csr(x1,y1); //根據(jù)光標(biāo)所在位置計算出對應(yīng)的字節(jié)地址
p = CharTab[1]; //指針指向字模數(shù)組
LCD_COM = 0x42; //寫顯示數(shù)據(jù)指令
//自下而上寫入32個字節(jié)
for(j=0;j<32;j++)
{
LCD_DAT = p[j+32*i+128*k];//從字模數(shù)組中取出一字節(jié)
}
x1++;//準(zhǔn)備寫右邊一列數(shù)據(jù)
}
}
5.3 顯示主程序
void main(void)
{
……// 初始化系統(tǒng),PIE, PIE中斷向量表,外設(shè)
Lcd_init(); // LCD初始化
clearscr1(); // 清空第一顯示緩沖區(qū)
clearscr2(); // 清空第二顯示緩沖區(qū)
clearscr3(); // 清空第三顯示緩沖區(qū)
Disp32x32Char(void); // 顯示一個32x32字符
……//其他字符顯示程序
While(1);
}
總結(jié):本文液晶顯示程序并未使用SED1335自帶的字符發(fā)生器,而是通過在程序中調(diào)用自定義的字模數(shù)組數(shù)據(jù),將其分別寫入顯存相應(yīng)位置。因此,首先必須用相應(yīng)的字模軟件對要顯示的字符或位圖取模,并特別注意寫數(shù)據(jù)到顯存的順序必須與取模的順序一致,比如顯示32x32字符,寫數(shù)據(jù)的順序為先在光標(biāo)所在處自上而下寫入32個字節(jié),再將光標(biāo)右移,連續(xù)自上而下分別寫入3列32個字節(jié)??紤]到字模數(shù)組占用內(nèi)存空間較大,應(yīng)該將字模數(shù)組存儲在ROM中,在需要使用時再從ROM中將字模數(shù)據(jù)調(diào)入RAM中執(zhí)行。
結(jié)束語:本文提出了一種基于F2812并使用320x240液晶顯示的監(jiān)測系統(tǒng)的設(shè)計方案,此方案已經(jīng)在軟硬件上得到實現(xiàn),經(jīng)過驗證后效果較好,從而為其他便攜式監(jiān)測系統(tǒng)的設(shè)計提供了借鑒。本文創(chuàng)新點在于使用了TI公司目前功能最為強大的2000系列DSP芯片TMS320F2812來構(gòu)建新型監(jiān)測系統(tǒng),改變了傳統(tǒng)的用單片機構(gòu)建監(jiān)測系統(tǒng)的思路。