新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)共享片外存儲器及其與微機(jī)通信的方法

單片機(jī)共享片外存儲器及其與微機(jī)通信的方法

——
作者:北京理工大學(xué) 裴洪安 賈云得 甘景全 朱玉文 時(shí)間:2006-09-11 來源:半導(dǎo)體技術(shù) 收藏

1 板間共享的硬件接口電路和軟件控制流程 

1.1 信號
處理板硬件接口電路

基于DSP的信號處理板可以根據(jù)應(yīng)用要求運(yùn)行許多信號處理算法,如信號預(yù)處理、目標(biāo)識別與跟蹤定位、Kalman濾波等。待處理的原始信號數(shù)據(jù)通過板間通信從數(shù)據(jù)采集板獲得。這里采用板間共享的方法來完成數(shù)據(jù)交換,DSP既可以從共享讀取采集數(shù)據(jù),也可以把處理結(jié)果(如新的程控放大倍數(shù)值,跟蹤定位結(jié)果等)寫到共享存儲器中供MCU讀取。

TMS320C32有一個(gè)雙向串行口,可以設(shè)置每幀同時(shí)收發(fā)8/16/24/32位數(shù)據(jù),同步時(shí)鐘可以由內(nèi)部串口定時(shí)器產(chǎn)生或由外部輸入。通過設(shè)置串口全局控制寄存器來控制串口的總體功能和工作模式;通過設(shè)置FSX/DX/CLKX端口控制寄存器和FSR/DR/CLKR端口控制寄存器來控制串口6個(gè)引腳的功能,可以軟件設(shè)置每個(gè)引腳為通用的I/O引腳或串口通信引腳。TMS320C32有兩根通用的I/O引腳為XF0和XF1,由于共享存儲器接口電路需要4根控制線來進(jìn)行DSP與MCU間的握手通信,這里把串口的2個(gè)引腳FSR0和FSX0設(shè)置為通用的I/O引腳用作控制線。接口電路原理圖如圖1所示。

 

圖中RAM0~RAM3是四片容量為512K的8位高速RAM(芯片型號為CY7C1049-17VC),組成32位數(shù)據(jù)寬度的存儲器,DSP運(yùn)行時(shí)的程序和數(shù)據(jù)都在這四片RAM中。FLASH(芯片型號為Am29F016)用于存儲程序和初始化數(shù)據(jù),即使掉電內(nèi)容也不丟失,DSP上電時(shí)由自帶的BOOT LOADER程序從FLASH中取出程序到四片RAM中運(yùn)行。從共享存儲器讀取的采集數(shù)據(jù)也暫存到這四片RAM中。 

1.2 數(shù)據(jù)采集板硬件接口電路 

基于AT89C51的數(shù)據(jù)采集板在的全局控制下,通過對多路聲傳感器輸出的微弱信號進(jìn)行程控放大、低通濾波、同步采樣保持、A/D變換,實(shí)時(shí)同步采集多路信號,并把采集到的信號數(shù)據(jù)存放在數(shù)據(jù)采集板上的128K共享存儲器(芯片型號為CY7C109-12VC)中。

共享存儲器及其總線隔離電路設(shè)計(jì)在數(shù)據(jù)采集板上。在某一時(shí)刻,共享存儲器只能被某一方訪問,否則會產(chǎn)生總線沖突。這里由MCU切換選通DSP總線或總線,分時(shí)訪問共享存儲器??偩€隔離芯片選用常見的雙向總線隔離/驅(qū)動(dòng)芯片74HC245,它有一個(gè)輸出使能引腳(E)和一個(gè)數(shù)據(jù)傳輸方向(DIR)引腳,MCU通過控制這兩個(gè)引腳來完成總線隔離與數(shù)據(jù)傳輸方向控制功能。接口電路原理圖如圖2所示。圖中,MCU端的總線隔離由一片74HC373和兩片74HC245完成,DSP端由三片74HC245完成數(shù)據(jù)總線和地址總線的隔離。由P1.2控制選通哪組總線,當(dāng)P1.2為低電平時(shí),共享存儲器只能被MCU訪問;當(dāng)P1.2為高電平時(shí),只有當(dāng)P1.3也為高電平時(shí)(表示MCU同意讓出共享存儲器),共享存儲器才能被DSP訪問。由于DSP需要讀或?qū)懝蚕泶鎯ζ?,所以需要軟件設(shè)置數(shù)據(jù)總線隔離芯片74HC245的數(shù)據(jù)傳輸方向,這里通過設(shè)置DSPDIR信號線的電平狀態(tài)來完成(高電平時(shí)為讀,低電平時(shí)為寫)。由于地址總線的數(shù)據(jù)傳輸方向始終是單向的,所以其隔離芯片的DIR端可以固定接低電平或高電平,視74HC245的實(shí)際接線而定。

 


1.3 軟件控制流程

信號處理板上的DSP需要采集信號數(shù)據(jù)時(shí)就向數(shù)據(jù)采集板上的MCU發(fā)出請求信號,單片機(jī)接收到請求信號后,如果同意讓出共享存儲器,則向DSP發(fā)出應(yīng)答信號,同時(shí)隔離MCU端的總線,暫停數(shù)據(jù)采集。DSP接收到應(yīng)答信號后就可以訪問共享存儲器,DSP快速讀、寫完數(shù)據(jù)后,向單片機(jī)發(fā)結(jié)束信號,單片機(jī)接收到結(jié)束信號后,收回共享存儲器,同時(shí)隔離DSP端總線,繼續(xù)采集。這樣數(shù)據(jù)采集與信號處理就可以同時(shí)進(jìn)行,不同于一般的采集一段處理一段的串行工作模式,實(shí)現(xiàn)了數(shù)據(jù)采集零等待,增加了系統(tǒng)的吞吐能力。參見圖3的接線圖,一次完整的通信過程詳述如下,注意在DSP程序初始化時(shí)應(yīng)把XF0、XF1、FSR0設(shè)置為相應(yīng)的無效狀態(tài)。

 

1DSP需要采集信號數(shù)據(jù)時(shí)向MCU發(fā)請求信號(置XF0為低電平),觸發(fā)MCU的INT0中斷,等待MCU應(yīng)答(DSP循環(huán)檢測XF1的狀態(tài))。

2如果MCU同意讓出共享存儲器,則響應(yīng)中斷,否則等待。在中斷服務(wù)程序中,置P1.3(即DSPACK)為高電平,表示應(yīng)答。同時(shí)置P1.2為高電平,選通DSP總線。MCU接著循環(huán)檢測P1.4即DSPEOR)的狀態(tài)。

3DSP收到應(yīng)答信號(即檢測到XF1為高電平),立即快速讀寫共享存儲器,在讀操作前,置FSX0為高電平,在寫操作前,置FSX0為低電平。讀寫完后,向MCU發(fā)結(jié)束信號(置FSR0為高電平),DSP緊接著進(jìn)行其它處理操作。

4MCU收到結(jié)束信號后(即檢測到P1.4為高電平),置P1.2為高電平,隔離DSP總線,收回共享存儲器,繼續(xù)采集。

2 信號處理板與控制>系統(tǒng)的通信

信號處理板從數(shù)據(jù)采集板獲取采集數(shù)據(jù)后,經(jīng)過對其進(jìn)行一系列信號處理算法的運(yùn)算處理,得到的處理結(jié)果需要傳送給基于單片機(jī)或微機(jī)的控制系統(tǒng)。由于這里的處理結(jié)果數(shù)據(jù)量很小,所以利用串口通信的方法進(jìn)行數(shù)據(jù)傳輸最為簡單。我們可以直接對信號處理板上DSP的串口編程來與控制系統(tǒng)進(jìn)行通信。但由于DSP的串口為同步串口,而單片機(jī)或微機(jī)的串口通常都為異步串口,這樣就需要用軟件來模擬DSP串口的異步通信時(shí)序,軟件工作量大而且通信不可靠。這里通過擴(kuò)展單片機(jī)與共享存儲器的方法很好地解決了這個(gè)問題。DSP把處理結(jié)果寫到共享存儲器中,立即進(jìn)行下一輪處理,由單片機(jī)從共享存儲器中取出處理結(jié)果并傳送給控制系統(tǒng)。這就省去了DSP進(jìn)行串口通信所需的時(shí)間,最大限度地利用了DSP的高速數(shù)據(jù)處理的能力。在實(shí)時(shí)性要求很高的場合,這顯得尤為重要。通過擴(kuò)展少量的硬件,不但提高了系統(tǒng)的速度,優(yōu)化了整體性能,而且軟件實(shí)現(xiàn)也簡單了許多。

2.1 信號處理板與控制系統(tǒng)的串口通信硬件電路

信號處理板利用擴(kuò)展的單片機(jī)AT89C51與基于微機(jī)或MCU的控制系統(tǒng)進(jìn)行全雙工通信。圖4為AT89C51的串口通信電路,通過"串口選擇"撥碼開關(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)行串行通信,可以利用常見的MC1488和MC1489進(jìn)行電平轉(zhuǎn)換。MC1488把TTL電平轉(zhuǎn)換為RS-232C電平,MC1489把RS-232C電平轉(zhuǎn)換為TTL電平。但由于MC1488和MC1489需要



評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉