異種單片機共享片外存儲器及其與微機通信的方法
1.3 軟件控制流程
信號處理板上的DSP需要采集信號數據時(shí)就向數據采集板上的MCU發(fā)出請求信號,單片機接收到請求信號后,如果同意讓出共享存儲器,則向DSP發(fā)出應答信號,同時(shí)隔離MCU端的總線(xiàn),暫停數據采集。DSP接收到應答信號后就可以訪(fǎng)問(wèn)共享存儲器,DSP快速讀、寫(xiě)完數據后,向單片機發(fā)結束信號,單片機接收到結束信號后,收回共享存儲器,同時(shí)隔離DSP端總線(xiàn),繼續采集。這樣數據采集與信號處理就可以同時(shí)進(jìn)行,不同于一般的采集一段處理一段的串行工作模式,實(shí)現了數據采集零等待,增加了系統的吞吐能力。參見(jiàn)圖3的接線(xiàn)圖,一次完整的通信過(guò)程詳述如下,注意在DSP程序初始化時(shí)應把XF0、XF1、 FSR0設置為相應的無(wú)效狀態(tài)。
(1)DSP需要采集信號數據時(shí)向MCU發(fā)請求信號(置XF0為低電平),觸發(fā)MCU的INT0中斷,等待MCU應答(DSP循環(huán)檢測XF1的狀態(tài))。
(2)如果MCU同意讓出共享存儲器,則響應中斷,否則等待。在中斷服務(wù)程序中,置P1.3(即DSPACK)為高電平,表示應答。同時(shí)置P1.2為高電平,選通DSP總線(xiàn)。MCU接著(zhù)循環(huán)檢測P1.4(即DSPEOR)的狀態(tài)。
(3)DSP收到應答信號(即檢測到XF1為高電平),立即快速讀寫(xiě)共享存儲器,在讀操作前,置FSX0為高電平,在寫(xiě)操作前,置FSX0為低電平。讀寫(xiě)完后,向MCU發(fā)結構信號(置FSR0為高電平),DSP緊接著(zhù)進(jìn)行其它處理操作。
(4)MCU收到結束信號后(即檢測到P1.4為高電平),置P1.2為高電平,隔離DSP總線(xiàn),收回共享存儲器,繼續采集。
2 信號處理板與控制系統的通信
信號處理板從數據采集板獲取采集數據后,經(jīng)過(guò)對其進(jìn)行一系列信號處理算法的運算處理,得到的處理結果需要傳送給基于單片機或微機的控制系統。由于這里的處理結果數據量很小,所以利用串口通信的方法進(jìn)行數據傳輸最為簡(jiǎn)單。我們可以直接對信號處理板上DSP的串口編程來(lái)與控制系統進(jìn)行通信。但由于DSP 的串口為同步串口,而單片機或微機的串口通常都為異步串口,這樣就需要用軟件來(lái)模擬DSP串口的異步通信時(shí)序,軟件工作量大而且通信不可靠。這里通過(guò)擴展單片機與共享存儲器的方法很好地解決了這個(gè)問(wèn)題。DSP把處理結果寫(xiě)到共享存儲器中,立即進(jìn)行下一輪處理,由單片機從共享存儲器中取出處理結果并傳送給控制系統。這就省去了DSP進(jìn)行串口通信所需的時(shí)間,最大限度地利用了DSP的高速數據處理的能力。在實(shí)時(shí)性要求很高的場(chǎng)合,這顯得尤為重要。通過(guò)擴展少量的硬件,不但提高了系統的速度,優(yōu)化了整體性能,而且軟件實(shí)現也簡(jiǎn)單了許多。
2.1 信號處理板與控制系統的串口通信硬件電路
信號處理板利用擴展的單片機AT89C51與基于微機或MCU的控制系統進(jìn)行全雙工通信。圖4為AT89C51的串口通信電路,通過(guò)“串口選擇”撥碼開(kāi)關(guān)選擇是與基于微機的控制系統通信,還是與基于MCU的控制系統通信。
在IBM PC/XT微機系統中,其串口符合RS-232C接口標準。為提高抗干擾能力,RS-232C標準采用負邏輯,低電平在-5V~-15V之間(通常用- 12V表示)為邏輯“1”,高電平在+5V~+15V之間(通常用+12V表示)為邏輯“0”,上述電平稱(chēng)為EIA電平,它與TTL電平和CMOS電平不同。為了使AT89C51能與微機進(jìn)行串行通信,可以利用常見(jiàn)的MC1488和MC1489進(jìn)行電平轉換。MC1488把TTL電平轉換為RS-232C 電平,MC1489把RS-232C電平轉換為T(mén)TL電平。但由于MC1488和MC1489需要±12V的供電電壓,增加了電源電路的復雜性,如圖4所示,這里選用只需單一+5V電壓的MAX232來(lái)完成電平轉換,簡(jiǎn)化了硬件電路。
當信號處理板與基于MCU的控制系統通信時(shí),只需三根線(xiàn),一根發(fā)送線(xiàn)(TXD),一根接收線(xiàn)(RXD),一根共地線(xiàn)(GND),將雙方的地址連在一起,將雙方的發(fā)送線(xiàn)與接收線(xiàn)交叉連接即可。當信號處理板與基于微機的控制系統通信時(shí),利用微機的九針串口進(jìn)行通信,它們的串口電纜連線(xiàn)如圖5所示。這里的發(fā)送線(xiàn)與接收線(xiàn)沒(méi)有交叉,是因為在進(jìn)行電平轉換時(shí)已經(jīng)交叉過(guò)了(參見(jiàn)圖4)。
2.2 信號處理板與控制系統的串口通信軟件編程
單片機與單片機或微機進(jìn)行串口通信的軟件編程有兩種:查詢(xún)方式和中斷方式。這里發(fā)送方(信號處理板)采用查詢(xún)方式,接收方(控制系統)采用中斷方式。通信程序主要完成對串口初始化(包括選擇串口模式、設置數據傳輸格式、設置波特率等)、建立連接、傳輸數據和斷開(kāi)連接等功能。為確保通信可靠,雙方約定如下通信協(xié)議。
(1)信號處理板上電后,一直發(fā)送請求聯(lián)機信號‘R’,等待控制系統發(fā)應答信號‘A’,如果信號處理板收到應答,表示雙方硬件連接正確,聯(lián)機成功。
(2) 運行控制系統的串口通信程序。如果是與微機通信,則先自動(dòng)檢測連接的是哪個(gè)串口(COM1或COM2),檢測到后向信號處理板發(fā)應答信號‘A’;若沒(méi)檢測到則顯示錯誤信息,提示檢查接線(xiàn)是否有誤。若是與單片機通信,如果在規定的時(shí)間內(如10s內)還沒(méi)有收到應答,則讓指示燈閃爍,認為出錯,需重新復位。
(3)信號處理板收到應答后,先向控制系統發(fā)送總共要傳輸的數據個(gè)數,然后依次發(fā)送每個(gè)數據,直到發(fā)完為止。
(4)控制系統發(fā)完聯(lián)機應答信號后,就處于接收狀態(tài)。先接收總共的數據個(gè)數,然后依次接收每個(gè)數據??刂葡到y每接收到一個(gè)數據都向信號處理板發(fā)確認信號,信號處理板只有收到確認信號后才發(fā)下一個(gè)數據。
另外,在單片機與微機之間進(jìn)行通信時(shí),雙方要正確選擇一致的波特率,而且SMOD位的選擇影響單片機波特率的準確度,即影響波特率的誤差范圍。因而在單片機波特率設置時(shí),對SMOD的選取也要適當考慮。為了保證通信的可靠性,通常波特率相對誤差不要大于2.5%,當單片機與微機之間進(jìn)行通信時(shí),尤其要注意這一點(diǎn)。例如,單片機的時(shí)鐘fosc= 12MHz,串口模式為方式1,假設單片機與微機的波特率都選為9600bps。當SMOD=0時(shí),波特率相對誤差為8.5%,當SMOD=1時(shí),波特率相對誤差為6.99%。實(shí)驗表明,不論SMOD=0或1,單片機與微機在這種條件下均不能實(shí)現正常的發(fā)送與接收。若雙方的波特率都取4800bps,且 SMOD=1時(shí),波特率相對誤差為0.16%,實(shí)驗證明通信完全可靠
評論