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