某控制信號(hào)處理系統(tǒng)中,選用ADSP-BF561作為主控機(jī),外接鍵盤(pán),LCD顯示屏,標(biāo)準(zhǔn)RS232接口,實(shí)時(shí)時(shí)鐘等,通過(guò)DSP編程來(lái)實(shí)現(xiàn)對(duì)各個(gè)功能模塊控制,同時(shí)產(chǎn)生多路數(shù)字IO信號(hào)。該控制系統(tǒng)還包括電源、時(shí)鐘、CPLD、FLASH,JTAG調(diào)試器、復(fù)位電路等基本組成部分,系統(tǒng)框圖如圖1所示。
圖1 基于ADSP-BF561控制信號(hào)處理系統(tǒng)框圖
系統(tǒng)電源模塊選用TPS54350來(lái)實(shí)現(xiàn),外圍電路不同RC值,可以構(gòu)成不同輸出電壓,這里需要產(chǎn)生是5V、3.3V、1.25V三種電壓。時(shí)鐘電路由48MHz晶振電路來(lái)實(shí)現(xiàn),其輸出作為DSP外圍時(shí)鐘和CPLD時(shí)鐘。FLASH用于存儲(chǔ)用戶應(yīng)用程序,JTAG調(diào)試口在DSP電路設(shè)計(jì)中也是必不可少。后面對(duì)各個(gè)部分一一介紹,特別是對(duì)復(fù)位電路,數(shù)字IO信號(hào)產(chǎn)生,以及RS232接口進(jìn)行詳細(xì)介紹。
1.鍵盤(pán)
鍵盤(pán)選用是4×4掃描鍵盤(pán),如圖1所示,由BlackfinGPIO接口PF5~PF12來(lái)實(shí)現(xiàn)。其中,KEY_GP3~KEY_GP0為行線輸入端,初始化為帶上拉電阻輸入口,中斷使能(下降沿觸發(fā));KEY_GP7~KEY_GP4為列線輸出端,初始化為輸出低電平。鍵盤(pán)掃描方法同常規(guī)掃描鍵盤(pán)方法相同。
圖 1 掃描鍵盤(pán)結(jié)構(gòu)圖
2. LCD顯示屏
LCD顯示屏采用320x240LCD液晶模塊。320x240液晶模塊配用sed1335驅(qū)動(dòng)接口板,sed1335驅(qū)動(dòng)接口板上配用32KRAM。LCD除了讀寫(xiě)信號(hào)線由Blackfin讀寫(xiě)信號(hào)來(lái)控制以外, 8位數(shù)據(jù)線由Blackfin低8位數(shù)據(jù)線鎖存輸出,以及其使能信號(hào)由BlackfinAMS3控制,LCD地址分配為0x2C000000。電路連接如圖2所示。在對(duì)LCD進(jìn)行控制時(shí),除了要建立在LCD上顯示漢字和英文字庫(kù)以外,還要編寫(xiě)對(duì)sed1335底層驅(qū)動(dòng)程序。這可以在LCD自帶驅(qū)動(dòng)程序基礎(chǔ)上,進(jìn)行代碼移植,把它改寫(xiě)成適合BF561DSP程序。
圖 2 LCD連接示意圖
3.實(shí)時(shí)時(shí)鐘
控制系統(tǒng)實(shí)時(shí)時(shí)鐘選用了芯片DS1337來(lái)實(shí)現(xiàn)。DS1337是一個(gè)低功耗串行實(shí)時(shí)時(shí)鐘芯片,它有24h/12h制兩種模式,它可以輸出年、月、日、分、時(shí)、秒形式。它采用I2C協(xié)議,BlackfinPF0和PF1作為I2CCLK和DATA,而PF3作為實(shí)時(shí)時(shí)鐘中斷FLAG,其電路連接示意圖如圖3所示。
圖3 實(shí)時(shí)時(shí)鐘電路連接示意圖
4.復(fù)位電路
為了保證DSP在上電或按下復(fù)位鍵時(shí)能可靠復(fù)位,一般加一個(gè)復(fù)位延時(shí)電路,選用MAX708S來(lái)完成,如圖4所示。
圖4 復(fù)位電路
在上電過(guò)程中,RESET信號(hào)會(huì)在VCC達(dá)到穩(wěn)定電壓后一段時(shí)間內(nèi)(約200ms)保持為高,然后再變低。 信號(hào)為RESET“NOT”,即 會(huì)相對(duì)VCC延時(shí)一段時(shí)間后再變高,如圖5所示。這樣,在DSP各電源電壓已穩(wěn)定情況下,DSP復(fù)位信號(hào)仍為低有效,就可以保證DSP正常復(fù)位。
圖5 上電過(guò)程中 信號(hào)
在上電以后,如果手動(dòng)按下開(kāi)關(guān),使得MR上信號(hào)由高→低→高,產(chǎn)生一個(gè)低脈沖,這時(shí), 管腳上也會(huì)輸出一個(gè)低脈沖,只是其低電平持續(xù)時(shí)間比MR上低電平持續(xù)時(shí)間長(zhǎng)200ms左右,以保證DSP復(fù)位可靠完成,如圖6所示。
圖6 手動(dòng)復(fù)位時(shí) 信號(hào)
5. 數(shù)字IO信號(hào)產(chǎn)生
在該控制系統(tǒng)中,要求產(chǎn)生8路數(shù)字IO信號(hào)。如果把這8路數(shù)字IO信號(hào)看成一個(gè)8bit數(shù),則需產(chǎn)生一個(gè)有限長(zhǎng)度非方波編碼信號(hào),如下圖所示。在T0時(shí)刻需要產(chǎn)生數(shù)字IO信號(hào)為STAT0,比如說(shuō)10010101;在在T1時(shí)刻需要產(chǎn)生STAT1,…,在Tn時(shí)刻需要產(chǎn)生STATn,而且T0可能不等于T1或Tn,STAT狀態(tài)也各不相同。
圖7數(shù)字IO信號(hào)狀態(tài)
這里選用BF561看門(mén)狗定時(shí)器(Watchdog Timer)來(lái)實(shí)現(xiàn)。在看門(mén)狗定時(shí)器操作中,先將計(jì)數(shù)值寫(xiě)入寄存器WDOG_CNT中,然后看門(mén)狗定時(shí)器自動(dòng)將WDOG_CNT值寫(xiě)入寄存器WDOG_STAT。接著通過(guò)寄存器WDOG_CTL使能Watchdog Timer,看門(mén)狗定時(shí)器開(kāi)始計(jì)數(shù),逐次減小WDOG_STAT值,直至為0,這時(shí)預(yù)先編寫(xiě)程序事件就會(huì)發(fā)生。要想輸出一個(gè)8bit數(shù)據(jù),只需往某地址單元寫(xiě)數(shù),對(duì)應(yīng)數(shù)據(jù)線就會(huì)寫(xiě)出該數(shù)據(jù)。為了把該數(shù)據(jù)保持一段時(shí)間(Tx長(zhǎng)度),還需使用鎖存器將該數(shù)據(jù)鎖住。所以在BF561DSP程序中先定義了數(shù)字IO信號(hào)對(duì)應(yīng)中斷事件,且中斷優(yōu)先級(jí)較高,這是為了保證定時(shí)精確度,防止別事件干擾。
register_handler(ik_ivg9, DIO_WDOGA_ISR);
然后在中斷事件里,把當(dāng)前要寫(xiě)入數(shù)據(jù)寫(xiě)到某地址單元上,然后使能Watchdog Timer,再將定時(shí)器值寫(xiě)入WDOG_CNT中。定時(shí)器計(jì)數(shù)是以sclk為基準(zhǔn),程序代碼如下:
*pDIO_Data_Port = codes;
*pWDOGA_CTL =DISABLE_WDOG;
*pWDOGA_CTL |=WDOG_EXPIRED_BIT;
*pWDOGA_CNT =times;
*pWDOGA_CTL = ENABLE_GPI;
codes和times就是當(dāng)前要產(chǎn)生數(shù)字IO編碼和長(zhǎng)度。由于是一系列編碼,可以用數(shù)組索引形式,將當(dāng)前值寫(xiě)入。而我們事先定義DIO_Data_Port地址為0x24000000,這對(duì)應(yīng)BF561AMS1地址空間,所以用AMS1作為鎖存器使能信號(hào),將數(shù)據(jù)線上數(shù)據(jù)通過(guò)鎖存器以后再輸出,如下圖所示
圖8 數(shù)字IO鎖存器
6.標(biāo)準(zhǔn)RS232接口
為了讓控制系統(tǒng)與計(jì)算機(jī)之間可以進(jìn)行數(shù)據(jù)相互傳遞,系統(tǒng)采用MAX3232芯片來(lái)實(shí)現(xiàn),如圖9所示:
圖9 BF561與計(jì)算機(jī)之間串口通信框圖
BF561UART遵循異步串行通信協(xié)議,包括:5-8個(gè)數(shù)據(jù)位;1、11/2、2個(gè)停止位;有/無(wú)奇偶檢驗(yàn)。而波特率滿足
其中,SCLK是DSP系統(tǒng)時(shí)鐘頻率,Divisor值介于1~65536,可以由timer寄存器相應(yīng)值得到,滿足關(guān)系式
在BF561初始化設(shè)置中,將UART設(shè)為8bit數(shù)據(jù)模式,同時(shí)將Timer2設(shè)置為WDTH_CAP模式,用Timer2去捕獲串口數(shù)據(jù)變化率,而Timer2位于TMRS8寄存器里,程序初始化代碼如下:
*pUART_LCR = WLS(8);
*pUART_MCR = LOOP_ENA;
*pTMRS8_DISABLE = TIMDIS2;
*pTMRS8_STATUS = TRUN2 | TOVL_ERR2 | TIMIL2;
*pTIMER2_CONFIG = TIN_SEL | IRQ_ENA | PERIOD_CNT | WDTH_CAP;
*pTMRS8_ENABLE = TIMEN2;
*pUART_GCTL = UCEN;
在程序一開(kāi)始,就會(huì)按照初始化設(shè)置進(jìn)行自動(dòng)波特率檢測(cè)。當(dāng)有字符輸入時(shí),timer會(huì)測(cè)量連續(xù)2次下降沿寬度,并返回到timer所對(duì)應(yīng)period寄存器里。比如說(shuō),如果發(fā)送”@”(0x40h)作為自動(dòng)波特率檢測(cè),發(fā)送時(shí)包括起始位,總共為8bit,如圖10所示。
圖10 自動(dòng)波特率檢測(cè)字符”@”(0x40h)
此處period大小如上圖所示,捕獲UART bits為8位,所以得到
再根據(jù)波特率公式,就可以求得波特率大小。此段程序代碼如下:
Period = *pTIMER2_PERIOD; //返回period值
Divisor = Period 》》 7; //右移7bit就相當(dāng)于除以16×8
BaudRate = SYSCLK/16/divisor; //得到波特率
結(jié)論
整個(gè)控制系統(tǒng)是以LCD顯示界面為基礎(chǔ),按提示進(jìn)行相應(yīng)鍵盤(pán)操作。經(jīng)過(guò)測(cè)試,該系統(tǒng)各部分工作正常,無(wú)相互干擾現(xiàn)象。實(shí)時(shí)時(shí)鐘定時(shí)精確,可以達(dá)到秒級(jí)。數(shù)字IO輸出波形編碼無(wú)亂碼,定時(shí)精度可達(dá)毫秒級(jí)。RS232接口傳輸數(shù)據(jù)時(shí),以高達(dá)115200bit/s波特率傳輸,誤碼率小于5%。該控制系統(tǒng)已成功應(yīng)用于某雷達(dá)系統(tǒng)控制子系統(tǒng)。
責(zé)任編輯:gt
評(píng)論
查看更多