1 硬件設(shè)計(jì)
1.1 時(shí)序匹配
HPI8總共有18根信號(hào)線。其中數(shù)據(jù)線8根(HD0~HD7),其余10根都是控制線,如表1所列
接口信號(hào)及功能" border="0" hspace="0" onclick="return show_orginral(this)" src="http://files.chinaaet.com/images/20100812/933ef1df-9754-409c-8311-013b6c0d909c.jpg" style="CURSOR: pointer" title="點(diǎn)擊看大圖" width="580" />
①HAS:在數(shù)據(jù)線和地址復(fù)用的MCU中,與ALE信號(hào)連接,在下降沿鎖存HBIL、HCNTL0/1、HR/W,因數(shù)這些信號(hào)通常與地址線連接。如果MCU的數(shù)據(jù)線和地址線沒有復(fù)用,則應(yīng)該接高電平。
②HDS1、HDS2:數(shù)據(jù)傳輸?shù)臅r(shí)序控制。時(shí)序見圖1,即下降沿傳輸開始,上升沿傳輸結(jié)束。另外如果不使用HAS(即接高電平),也可以配合HCS對(duì)HBIL、HCNTL0/1、HR/W進(jìn)行鎖存。
③HCNTL0/:選擇HPI內(nèi)部寄存器,如表2所列。
1.2 電平匹配
54xxDSP的外部I/P引腳用的是3.3V的邏輯電平,而大部分51鄭易里片機(jī)用的是5V的邏輯電平。前者輸出高電平,最小值為2.4V;后者輸入高電平,最小值為2.0V。所以前者的輸出可以直接接到才者的輸入。但是前者允許輸入高電平最大值為3.6V,而后者的輸出高電平一般都在4.6V以上。所以前者的輸入和后者的輸出不能直接連接,需要做電平轉(zhuǎn)換。如果引腳數(shù)量少,可以直接用三極管電阻來(lái)轉(zhuǎn)換。這里由于引腳較多,所以選用TI74LVC16245A芯片來(lái)進(jìn)行電平轉(zhuǎn)換?! ?nbsp;
74LVC16245A是TI公司的一種16位雙向總線收發(fā)器。它可以接收高達(dá)5.5V的高電平,而輸出的高電平可以達(dá)到3.3V左右,內(nèi)部包括16路如圖2所示的結(jié)構(gòu)單元。
圖2中G為使能端,低電平有效;DIR為方向控制端,高電平A→B,低電平B→A。另外要注意,74LVC 16245A的操作電壓引腳VCC應(yīng)該接3.3V。整個(gè)硬件連接如圖3所示。
2 軟件設(shè)計(jì)
HPI的數(shù)據(jù)傳輸分為兩部分:外部傳輸和內(nèi)部傳輸。外部傳輸是指主機(jī)和HPI寄存器之間的傳輸,由主機(jī)發(fā)出指令完成。內(nèi)部傳輸是指HPI寄存器和DSP內(nèi)部RAM之間的傳輸,由DSP內(nèi)部的DMA控制器自動(dòng)完成。主機(jī)在進(jìn)行外部傳輸時(shí),要先檢查內(nèi)部傳輸是否完成,這是通過檢測(cè)HRDY信號(hào)實(shí)現(xiàn)的。外部傳輸操作的一般步驟是:
*檢查HRDY信號(hào)的電平。為高,表示可以進(jìn)行傳輸;為低,表示DSP正在進(jìn)行內(nèi)部傳輸,此時(shí)不能進(jìn)行外部傳輸?! ?br />
*主機(jī)發(fā)出指令,設(shè)置HCNTL0、HCNTL1、BHIL、HR/W信號(hào)的狀態(tài),以確定讀或?qū)懙募拇嫫饕约白止?jié)的選擇?! ?br />
*主機(jī)發(fā)出時(shí)序控制信號(hào),按照?qǐng)D1所示的時(shí)序進(jìn)行操作,從而完成一次外部傳輸?! ?
編程時(shí)還要注意以下問題:
①由于DSP的數(shù)據(jù)是16位,而單片機(jī)的數(shù)據(jù)是8位,所以單片機(jī)要分兩次將數(shù)據(jù)傳給DSP,即將16位的數(shù)據(jù)分成兩個(gè)字節(jié)來(lái)傳輸。這時(shí),可以通過控制HPI口的HBIL信號(hào)來(lái)指定此次傳輸?shù)氖堑?個(gè)還是第2個(gè)字節(jié)。另外,還要通過HPI的控制寄存器(HPIC)中的BOB位來(lái)指定第1個(gè)字節(jié)作為高8位還是低8位,所以主機(jī)在訪問HPI1時(shí),應(yīng)首先對(duì)HPIC進(jìn)行初始化,并注意對(duì)BOB位的設(shè)置。HPIC的各位設(shè)置如下:
②主機(jī)對(duì)地址寄存器(HPIA)的寫操作會(huì)初始化一次內(nèi)部傳輸。當(dāng)主機(jī)通過兩次對(duì)HPIA的寫操作后,HPIA就得到了主機(jī)要訪問的地址。這時(shí)內(nèi)部的DMA控制器就會(huì)根據(jù)這個(gè)地址將相應(yīng)單元的內(nèi)容讀到HPI內(nèi)部的數(shù)據(jù)鎖存器中,再對(duì)HPID進(jìn)行兩次讀操作就可以將數(shù)據(jù)讀出。如果將HPIA設(shè)置成自動(dòng)遞增模式,就會(huì)在數(shù)據(jù)傳輸?shù)耐瑫r(shí)完成HPIA加1,于是又啟動(dòng)了一次內(nèi)部傳輸。這樣有利于數(shù)據(jù)的連續(xù)轉(zhuǎn)移。
③注意設(shè)置HPIC中的XHPIA位。XHPIA=1時(shí),表示對(duì)DSP的7位擴(kuò)展地址進(jìn)行操作;XHPIA=0時(shí),表示對(duì)DSP的低16位地址進(jìn)行操作。由于DSP復(fù)位后,XHIPA的狀態(tài)是不確定的,所以必須首先對(duì)HXPIA進(jìn)行設(shè)置。
④主機(jī)和DSP可以互相中斷。主機(jī)通過向HPIC中的位DSPINT寫入1來(lái)中斷DSP。該痊總是被讀出為0,而且DSP對(duì)該位的寫操作是無(wú)用的。而DSP要中斷主機(jī)時(shí),向HPIC中的位HINT寫入1,這時(shí)HPI的接口引腳HINT被置低,從而使主機(jī)產(chǎn)生中斷。該位總是讀出為1,主機(jī)可以對(duì)該位寫1來(lái)清除中斷,這時(shí)HINT引腳就恢復(fù)高電平。
下面給出一段程序?qū)嵗簡(jiǎn)纹瑱C(jī)將DSP內(nèi)部RAM1000H單元的內(nèi)容讀出。硬件按照?qǐng)D1所示連接。
3 總結(jié)
當(dāng)然DSP與單片機(jī)之間還有許多其它的連接方式,例如利用雙口RAM,或者是通過串口,但是它們都占用DSP的處理時(shí)間,在要求苛刻的場(chǎng)合可能會(huì)影響到系統(tǒng)的實(shí)時(shí)性。而HPI接口是通過DSP片內(nèi)的DMA控制器來(lái)訪問片內(nèi)存儲(chǔ)器的,不需要DSP的干預(yù)??梢哉f(shuō),HPI接口是DSP的一個(gè)“后門”,單片機(jī)通過這個(gè)“后門”可以訪問到DSP的片內(nèi)存儲(chǔ)器。只有當(dāng)HPI接口和DSP同時(shí)對(duì)同一地址進(jìn)行訪問時(shí),由于HPI具有訪問優(yōu)先權(quán),這時(shí)DSP的執(zhí)行會(huì)被延遲一個(gè)周期,而這種情況對(duì)系統(tǒng)實(shí)時(shí)性的影響是非常小的。