摘? 要: 介紹了通用單片機(jī)(MCU)AT89C51與信號(hào)處理單片機(jī)(DSP)TMS320C32通過(guò)共享片外隨機(jī)存儲(chǔ)器實(shí)現(xiàn)板間通信的方法,,并給出了總線隔離硬件電路與軟件控制流程,。文中還簡(jiǎn)要分析了AT89C51與微機(jī)進(jìn)行串行通信的軟硬件設(shè)計(jì),通過(guò)擴(kuò)展AT89C51間接實(shí)現(xiàn)了TMS320C32與通用單片機(jī)或微機(jī)之間的通信,。
關(guān)鍵詞: 單片機(jī) DSP? 數(shù)字信號(hào)處理器? 共享存儲(chǔ)器? 串口通信
?
TMS320系列數(shù)字信號(hào)處理單片機(jī)(DSP)在測(cè)控,、儀器儀表、圖象處理,、計(jì)算機(jī)視覺(jué)與聲信號(hào)處理等領(lǐng)域得到了越來(lái)越廣泛的應(yīng)用,。DSP獲取原始采集數(shù)據(jù)和輸出處理結(jié)果一般有兩種途徑:一是通過(guò)串行口,另一是通過(guò)數(shù)據(jù)總線讀寫片外存儲(chǔ)器,。本文介紹了基于DSP的信號(hào)處理目標(biāo)板與基于單片機(jī)AT89C51的多路同步數(shù)據(jù)采集板通過(guò)共享片外隨機(jī)存儲(chǔ)器實(shí)現(xiàn)板間通信,,來(lái)獲取原始采集數(shù)據(jù)的方法,并給出了總線隔離硬件電路與軟件控制流程,。并介紹了把DSP的處理結(jié)果傳送給基于MCS-51單片機(jī)或基于微機(jī)的控制系統(tǒng)的方法,。文中還簡(jiǎn)要分析了AT89C51與微機(jī)進(jìn)行串口通信的軟硬件設(shè)計(jì),通過(guò)擴(kuò)展AT89C51間接實(shí)現(xiàn)了TMS320C32與單片機(jī)或微機(jī)之間的通信,,比直接通過(guò)TMS320C32的串口與單片機(jī)或微機(jī)進(jìn)行通信要簡(jiǎn)單可靠得多,。下面如無(wú)特別說(shuō)明,MCU指AT89C51,,DSP指TMS320C32,。
1 板間共享存儲(chǔ)器的硬件接口電路和軟件控制流程
1.1 信號(hào)處理板硬件接口電路
基于DSP的信號(hào)處理板可以根據(jù)應(yīng)用要求運(yùn)行許多信號(hào)處理算法,如信號(hào)預(yù)處理,、目標(biāo)識(shí)別與跟蹤定位,、Kalman濾波等。待處理的原始信號(hào)數(shù)據(jù)通過(guò)板間通信從數(shù)據(jù)采集板獲得,。這里采用板間共享存儲(chǔ)器的方法來(lái)完成數(shù)據(jù)交換,,DSP既可以從共享存儲(chǔ)器讀取采集數(shù)據(jù),也可以把處理結(jié)果(如新的程控放大倍數(shù)值,,跟蹤定位結(jié)果等)寫到共享存儲(chǔ)器中供MCU讀取,。
TMS320C32有一個(gè)雙向串行口,可以設(shè)置每幀同時(shí)收發(fā)8/16/24/32位數(shù)據(jù),,同步時(shí)鐘可以由內(nèi)部串口定時(shí)器產(chǎn)生或由外部輸入,。通過(guò)設(shè)置串口全局控制寄存器來(lái)控制串口的總體功能和工作模式;通過(guò)設(shè)置FSX/DX/CLKX端口控制寄存器和FSR/DR/CLKR端口控制寄存器來(lái)控制串口6個(gè)引腳的功能,可以軟件設(shè)置每個(gè)引腳為通用的I/O引腳或串口通信引腳,。TMS320C32有兩根通用的I/O引腳為XF0和XF1,,由于共享存儲(chǔ)器接口電路需要4根控制線來(lái)進(jìn)行DSP與MCU間的握手通信,這里把串口的2個(gè)引腳FSR0和FSX0設(shè)置為通用的I/O引腳用作控制線,。接口電路原理圖如圖1所示,。
????圖中RAM0~RAM3是四片容量為512K的8位高速RAM(芯片型號(hào)為CY7C1049-17VC),組成32位數(shù)據(jù)寬度的存儲(chǔ)器,DSP運(yùn)行時(shí)的程序和數(shù)據(jù)都在這四片RAM中,。FLASH(芯片型號(hào)為Am29F016)用于存儲(chǔ)程序和初始化數(shù)據(jù),,即使掉電內(nèi)容也不丟失,DSP上電時(shí)由自帶的BOOT LOADER程序從FLASH中取出程序到四片RAM中運(yùn)行,。從共享存儲(chǔ)器讀取的采集數(shù)據(jù)也暫存到這四片RAM中,。
1.2? 數(shù)據(jù)采集板硬件接口電路
基于單片機(jī)AT89C51的數(shù)據(jù)采集板在單片機(jī)的全局控制下,通過(guò)對(duì)多路聲傳感器輸出的微弱信號(hào)進(jìn)行程控放大,、低通濾波,、同步采樣保持、A/D變換,,實(shí)時(shí)同步采集多路信號(hào),,并把采集到的信號(hào)數(shù)據(jù)存放在數(shù)據(jù)采集板上的128K共享存儲(chǔ)器(芯片型號(hào)為CY7C109-12VC)中。
共享存儲(chǔ)器及其總線隔離電路設(shè)計(jì)在數(shù)據(jù)采集板上,。在某一時(shí)刻,,共享存儲(chǔ)器只能被某一方訪問(wèn),否則會(huì)產(chǎn)生總線沖突,。這里由MCU切換選通DSP總線或單片機(jī)總線,,分時(shí)訪問(wèn)共享存儲(chǔ)器??偩€隔離芯片選用常見(jiàn)的雙向總線隔離/驅(qū)動(dòng)芯片74HC245,,它有一個(gè)輸出使能引腳(E)和一個(gè)數(shù)據(jù)傳輸方向(DIR)引腳,MCU通過(guò)控制這兩個(gè)引腳來(lái)完成總線隔離與數(shù)據(jù)傳輸方向控制功能,。接口電路原理圖如圖2所示。圖中,,MCU端的總線隔離由一片74HC373和兩片74HC245完成,,DSP端由三片74HC245完成數(shù)據(jù)總線和地址總線的隔離。由P1.2控制選通哪組總線,,當(dāng)P1.2為低電平時(shí),,共享存儲(chǔ)器只能被MCU訪問(wèn);當(dāng)P1.2為高電平時(shí),只有當(dāng)P1.3也為高電平時(shí)(表示MCU同意讓出共享存儲(chǔ)器),,共享存儲(chǔ)器才能被DSP訪問(wèn),。由于DSP需要讀或?qū)懝蚕泶鎯?chǔ)器,所以需要軟件設(shè)置數(shù)據(jù)總線隔離芯片74HC245的數(shù)據(jù)傳輸方向,,這里通過(guò)設(shè)置DSPDIR信號(hào)線的電平狀態(tài)來(lái)完成(高電平時(shí)為讀,,低電平時(shí)為寫)。由于地址總線的數(shù)據(jù)傳輸方向始終是單向的,,所以其隔離芯片的DIR端可以固定接低電平或高電平,,視74HC245的實(shí)際接線而定。
?
1.3? 軟件控制流程
信號(hào)處理板上的DSP需要采集信號(hào)數(shù)據(jù)時(shí)就向數(shù)據(jù)采集板上的MCU發(fā)出請(qǐng)求信號(hào),,單片機(jī)接收到請(qǐng)求信號(hào)后,,如果同意讓出共享存儲(chǔ)器,,則向DSP發(fā)出應(yīng)答信號(hào),同時(shí)隔離MCU端的總線,,暫停數(shù)據(jù)采集,。DSP接收到應(yīng)答信號(hào)后就可以訪問(wèn)共享存儲(chǔ)器,DSP快速讀,、寫完數(shù)據(jù)后,,向單片機(jī)發(fā)結(jié)束信號(hào),單片機(jī)接收到結(jié)束信號(hào)后,,收回共享存儲(chǔ)器,,同時(shí)隔離DSP端總線,繼續(xù)采集,。這樣數(shù)據(jù)采集與信號(hào)處理就可以同時(shí)進(jìn)行,,不同于一般的采集一段處理一段的串行工作模式,實(shí)現(xiàn)了數(shù)據(jù)采集零等待,,增加了系統(tǒng)的吞吐能力,。參見(jiàn)圖3的接線圖,一次完整的通信過(guò)程詳述如下,,注意在DSP程序初始化時(shí)應(yīng)把XF0,、XF1、FSR0設(shè)置為相應(yīng)的無(wú)效狀態(tài),。
?
(1)DSP需要采集信號(hào)數(shù)據(jù)時(shí)向MCU發(fā)請(qǐng)求信號(hào)(置XF0為低電平),,觸發(fā)MCU的INT0中斷,等待MCU應(yīng)答(DSP循環(huán)檢測(cè)XF1的狀態(tài)),。
????(2)如果MCU同意讓出共享存儲(chǔ)器,,則響應(yīng)中斷,否則等待,。在中斷服務(wù)程序中,,置P1.3(即DSPACK)為高電平,表示應(yīng)答,。同時(shí)置P1.2為高電平,,選通DSP總線。MCU接著循環(huán)檢測(cè)P1.4(即DSPEOR)的狀態(tài),。
??? (3)DSP收到應(yīng)答信號(hào)(即檢測(cè)到XF1為高電平),,立即快速讀寫共享存儲(chǔ)器,在讀操作前,,置FSX0為高電平,,在寫操作前,置FSX0為低電平。讀寫完后,,向MCU發(fā)結(jié)束信號(hào)(置FSR0為高電平),,DSP緊接著進(jìn)行其它處理操作。
??? (4)MCU收到結(jié)束信號(hào)后(即檢測(cè)到P1.4為高電平),,置P1.2為高電平,,隔離DSP總線,收回共享存儲(chǔ)器,,繼續(xù)采集,。
2 信號(hào)處理板與控制系統(tǒng)的通信
信號(hào)處理板從數(shù)據(jù)采集板獲取采集數(shù)據(jù)后,經(jīng)過(guò)對(duì)其進(jìn)行一系列信號(hào)處理算法的運(yùn)算處理,,得到的處理結(jié)果需要傳送給基于單片機(jī)或微機(jī)的控制系統(tǒng),。由于這里的處理結(jié)果數(shù)據(jù)量很小,所以利用串口通信的方法進(jìn)行數(shù)據(jù)傳輸最為簡(jiǎn)單,。我們可以直接對(duì)信號(hào)處理板上DSP的串口編程來(lái)與控制系統(tǒng)進(jìn)行通信,。但由于DSP的串口為同步串口,而單片機(jī)或微機(jī)的串口通常都為異步串口,,這樣就需要用軟件來(lái)模擬DSP串口的異步通信時(shí)序,,軟件工作量大而且通信不可靠。這里通過(guò)擴(kuò)展單片機(jī)與共享存儲(chǔ)器的方法很好地解決了這個(gè)問(wèn)題,。DSP把處理結(jié)果寫到共享存儲(chǔ)器中,,立即進(jìn)行下一輪處理,由單片機(jī)從共享存儲(chǔ)器中取出處理結(jié)果并傳送給控制系統(tǒng),。這就省去了DSP進(jìn)行串口通信所需的時(shí)間,,最大限度地利用了DSP的高速數(shù)據(jù)處理的能力。在實(shí)時(shí)性要求很高的場(chǎng)合,,這顯得尤為重要,。通過(guò)擴(kuò)展少量的硬件,不但提高了系統(tǒng)的速度,,優(yōu)化了整體性能,而且軟件實(shí)現(xiàn)也簡(jiǎn)單了許多,。
2.1?信號(hào)處理板與控制系統(tǒng)的串口通信硬件電路
信號(hào)處理板利用擴(kuò)展的單片機(jī)AT89C51與基于微機(jī)或MCU的控制系統(tǒng)進(jìn)行全雙工通信,。圖4為AT89C51的串口通信電路,通過(guò)“串口選擇”撥碼開(kāi)關(guān)選擇是與基于微機(jī)的控制系統(tǒng)通信,,還是與基于MCU的控制系統(tǒng)通信,。
?
?
????在IBM PC/XT微機(jī)系統(tǒng)中,其串口符合RS-232C接口標(biāo)準(zhǔn),。為提高抗干擾能力,,RS-232C標(biāo)準(zhǔn)采用負(fù)邏輯,低電平在-5V~-15V之間(通常用-12V表示)為邏輯“1”,高電平在+5V~+15V之間(通常用+12V表示)為邏輯“0”,,上述電平稱為EIA電平,,它與TTL電平和CMOS電平不同。為了使AT89C51能與微機(jī)進(jìn)行串行通信,,可以利用常見(jiàn)的MC1488和MC1489進(jìn)行電平轉(zhuǎn)換,。MC1488把TTL電平轉(zhuǎn)換為RS-232C電平,MC1489把RS-232C電平轉(zhuǎn)換為TTL電平,。但由于MC1488和MC1489需要±12V的供電電壓,,增加了電源電路的復(fù)雜性,如圖4所示,,這里選用只需單一+5V電壓的MAX232來(lái)完成電平轉(zhuǎn)換,,簡(jiǎn)化了硬件電路。
????當(dāng)信號(hào)處理板與基于MCU的控制系統(tǒng)通信時(shí),,只需三根線,,一根發(fā)送線(TXD),一根接收線(RXD),,一根共地線(GND),,將雙方的地線連在一起,將雙方的發(fā)送線與接收線交叉連接即可,。當(dāng)信號(hào)處理板與基于微機(jī)的控制系統(tǒng)通信時(shí),,利用微機(jī)的九針串口進(jìn)行通信,它們的串口電纜連線如圖5所示,。這里的發(fā)送線與接收線沒(méi)有交叉,,是因?yàn)樵谶M(jìn)行電平轉(zhuǎn)換時(shí)已經(jīng)交叉過(guò)了(參見(jiàn)圖4)。
?
?
2.2 信號(hào)處理板與控制系統(tǒng)的串口通信軟件編程
????單片機(jī)與單片機(jī)或微機(jī)進(jìn)行串口通信的軟件編程有兩種:查詢方式和中斷方式,。這里發(fā)送方(信號(hào)處理板)采用查詢方式,,接收方(控制系統(tǒng))采用中斷方式。通信程序主要完成對(duì)串口初始化(包括選擇串口模式,、設(shè)置數(shù)據(jù)傳輸格式,、設(shè)置波特率等)、建立連接,、傳輸數(shù)據(jù)和斷開(kāi)連接等功能,。為確保通信可靠,雙方約定如下通信協(xié)議,。
(1) 信號(hào)處理板上電后,,一直發(fā)送請(qǐng)求聯(lián)機(jī)信號(hào)‘R’,等待控制系統(tǒng)發(fā)應(yīng)答信號(hào)‘A’,,如果信號(hào)處理板收到應(yīng)答,,表示雙方硬件連接正確,,聯(lián)機(jī)成功。
(2) 運(yùn)行控制系統(tǒng)的串口通信程序,。如果是與微機(jī)通信,,則先自動(dòng)檢測(cè)連接的是哪個(gè)串口(COM1或COM2),檢測(cè)到后向信號(hào)處理板發(fā)應(yīng)答信號(hào)‘A’;若沒(méi)檢測(cè)到則顯示錯(cuò)誤信息,,提示檢查接線是否有誤,。若是與單片機(jī)通信,如果在規(guī)定的時(shí)間內(nèi)(如10s內(nèi))還沒(méi)有收到應(yīng)答,,則讓指示燈閃爍,,認(rèn)為出錯(cuò),需重新復(fù)位,。
??? (3)信號(hào)處理板收到應(yīng)答后,,先向控制系統(tǒng)發(fā)送總共要傳輸?shù)臄?shù)據(jù)個(gè)數(shù),然后依次發(fā)送每個(gè)數(shù)據(jù),,直到發(fā)完為止,。
??? (4)控制系統(tǒng)發(fā)完聯(lián)機(jī)應(yīng)答信號(hào)后,就處于接收狀態(tài),。先接收總共的數(shù)據(jù)個(gè)數(shù),,然后依次接收每個(gè)數(shù)據(jù)??刂葡到y(tǒng)每接收到一個(gè)數(shù)據(jù)都向信號(hào)處理板發(fā)確認(rèn)信號(hào),,信號(hào)處理板只有收到確認(rèn)信號(hào)后才發(fā)下一個(gè)數(shù)據(jù)。
??? 另外,,在單片機(jī)與微機(jī)之間進(jìn)行通信時(shí),,雙方要正確選擇一致的波特率,而且SMOD位的選擇影響單片機(jī)波特率的準(zhǔn)確度,,即影響波特率的誤差范圍,。因而在單片機(jī)波特率設(shè)置時(shí),對(duì)SMOD的選取也要適當(dāng)考慮,。為了保證通信的可靠性,,通常波特率相對(duì)誤差不要大于2.5%,當(dāng)單片機(jī)與微機(jī)之間進(jìn)行通信時(shí),,尤其要注意這一點(diǎn),。例如,單片機(jī)的時(shí)鐘fOSC=12MHz,,串口模式為方式1,假設(shè)單片機(jī)與微機(jī)的波特率都選為9600bps,。當(dāng)SMOD=0時(shí),,波特率相對(duì)誤差為8.5%,,當(dāng)SMOD=1時(shí),波特率相對(duì)誤差為6.99%,。實(shí)驗(yàn)表明,,不論SMOD=0或1,單片機(jī)與微機(jī)在這種條件下均不能實(shí)現(xiàn)正常的發(fā)送與接收,。若雙方的波特率都取4800bps,,且SMOD=1時(shí),波特率相對(duì)誤差為0.16%,,實(shí)驗(yàn)證明通信完全可靠,。
?
參考文獻(xiàn)
1 Texas Instrument.TMS320C3x User's Guide.USA:Texas Instruments Incorporated,1998
2 Maxim Corporation.±15kV ESD-Protected,,+5V RS-232?Transceivers. USA:Maxim Integrated Products,,1996
3 王福瑞.單片微機(jī)測(cè)控系統(tǒng)設(shè)計(jì)大全.北京:北京航空航天大學(xué)出版社,1998
4 李華.MCS-51系列單片機(jī)實(shí)用接口技術(shù).北京:北京航空航天大學(xué)出版社,,1993