《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 業(yè)界動態(tài) > ARM CPU S3C44B0X與C54X DSP的接口設(shè)計

ARM CPU S3C44B0X與C54X DSP的接口設(shè)計

2008-09-24
作者:陳 猛 趙繼敏

  摘? 要: 以SAMSUNG公司的ARM SOC芯片S3C44B0X和TI公司的TMS320C5416 DSP為例,,講述了ARM芯片與DSP的數(shù)據(jù)接口技術(shù),,并給出了硬件連接圖和軟件代碼,。

  關(guān)鍵詞: ARM S3C44B0X 主機接口(HPI)? TMS320C5416

?

  后PC時代,,嵌入式產(chǎn)品逐漸占領(lǐng)市場,。而這些嵌入式產(chǎn)品的核心——處理器決定了產(chǎn)品的設(shè)計和性能,。高性能" title="高性能">高性能,、低功耗" title="低功耗">低功耗,、低成本是嵌入式處理器的主要特點,。在32位嵌入式處理器市場中,,ARM占有78.6%的份額。而TI則占有DSP市場的絕大部分份額,。通常的嵌入式系統(tǒng)設(shè)計中,,由微控制器" title="微控制器">微控制器實現(xiàn)整個系統(tǒng)的控制,由DSP來執(zhí)行計算密集型操作,,然后通過一定的手段實現(xiàn)微控制器與DSP之間的通信和數(shù)據(jù)交換,。因此,如何高效地設(shè)計控制器(ARM)與DSP之間的接口以滿足嵌入式系統(tǒng)的實時性要求,在嵌入式系統(tǒng)設(shè)計中顯得尤為重要,。

1 ARM CPU S3C44B0X的特點

  ARM是一款32位的精簡指令集(RISC)處理器架構(gòu),,以其高性能、低功耗,、低成本占有市場,。由于ARM公司采用IP授權(quán)的方式經(jīng)營,全球幾乎所有的大半導(dǎo)體公司都有基于ARM的SOC芯片,。

  S3C44B0X是SAMSUNG(三星)公司一款基于ARM7TDMI的SOC芯片,。它一方面具有ARM處理器的所有優(yōu)點:低功耗、高性能;同時又具有非常豐富的片上資源,,非常適合嵌入式產(chǎn)品的開發(fā),。其特點如下:

  ·采用ARM7TDMI內(nèi)核,I/O" title="I/O">I/O電壓3.3V,,內(nèi)核電壓2.5V;

  ·內(nèi)置鎖相環(huán)(PLL),,系統(tǒng)主頻最高達66MHz;

  ·4種工作模式,可以實現(xiàn)電源管理以降低系統(tǒng)功耗;

  ·8KB的系統(tǒng)高速緩存(CACHE),,極大地提高了系統(tǒng)運行速度;

  ·支持8個MEMORY BANK,,最大外部存儲空間達256MB,并支持SDRAM;

  ·內(nèi)置彩色LCD控制器;

  ·2路異步串口(UART);

  ·71個通用I/O口;

  ·8通路模/數(shù)轉(zhuǎn)換器(ADC);

  ·實時時鐘(RTC)和看門狗電路(WATCHDOG),。

2 C54X DSP及其HPI接口

2.1 C54X DSP的特點

  以高速,、低功耗為特征的C54X系列DSP采用先進的改進型哈佛結(jié)構(gòu),具有分離的數(shù)據(jù)總線和程序總線,,片內(nèi)集成了ROM,、RAM和多個外設(shè),如通用I/O口,、定時器,、時鐘發(fā)生器、軟件可編程等待狀態(tài)發(fā)生器,、可編程塊切換邏輯,、串行口、直接存儲器存取控制器(DMA)和與外部處理器通信用的主機接口(HPI),。

2.2 C54X的主機接口(HPI)

  C54X中的主機接口(HPI)主要有三種:標(biāo)準8位HPI8接口,、增強型" title="增強型">增強型8位HPI8接口和16位HPI16接口。其中C542~C549內(nèi)含標(biāo)準型HPI8;C5402,、C5410內(nèi)含增強型HPI8;C5410以上為HPI16;C5409,、C5416的HPI可以由用戶設(shè)置為增強型HPI8或HPI16。增強型比標(biāo)準型更優(yōu)越之處主要在于:增強型允許主機訪問DSP內(nèi)部的所有片內(nèi)RAM,,而標(biāo)準型只能訪問RAM區(qū)中指定的2K字,。

以TMS320C5416(簡稱C5416)包含的增強型HPI8接口為例,,它與外部主機或微處理器的連接具有單獨的8根數(shù)據(jù)線HD0~HD7和10根控制線。主機主動通過HPI口訪問DSP的內(nèi)部RAM以及其它資源,。除了對主機發(fā)中斷(通過置HPIC寄存器的HINT位,,可以使HINT線有效)或清除主機發(fā)來的中斷(通過清HPIC寄存器的DSPINT標(biāo)志)需要DSP干涉外,C5416幾乎不用進行其他操作,,片內(nèi)的DMA通道會自動輔助完成RAM區(qū)與HPI數(shù)據(jù)寄存器的數(shù)據(jù)傳輸。主機由HCNTL0/1線來選擇HPI的某個控制寄存器,,如表1所列,。通過對這4個寄存器的訪問,就可以在所設(shè)安全機制的允許范圍下讀/寫DSP的所有或部分片內(nèi)RAM,。

?

?

  由于DSP最小的存儲單位是字(16bit),,因此對于HPI8,每個傳遞必須要有2個傳遞周期才能完成,。HBIL信號用于區(qū)分傳遞的字節(jié)是當(dāng)前字的第一字節(jié)還是第二字節(jié),。通過設(shè)置HPIC寄存器的BOB位,可以決定第一字節(jié)是這個字的高字節(jié)還是低字節(jié),。

2.3 時序圖

  C54X HPI8的時序如圖1所示,,該時序可滿足市場上大多數(shù)微控制器的時序特征。因此,,C54X可以通過HPI8很方便地與微控制器接口,,S3C44B0X也不例外。

?

3 S3C44B0X與C54X DSP的接口設(shè)計

3.1 硬件連線

  TMS320C5416與S3C44B0X連接的接口電路如圖2所示,。由圖2可見,,C54X通過HPI8與主機設(shè)備相連時,除了8位HPI數(shù)據(jù)總線及控制信號線外,,不需要附加其它的邏輯電路,,非常方便。

?

?

  從HPI寄存器的編址方式可以看出,,主機只需兩根地址線(A3,、A2)便可尋址到HPI端口的所有控制寄存器、地址寄存器和數(shù)據(jù)寄存器,。同時,,將HPI8接口安排在S3C44B0X的BANK2(即地址范圍0X04000000~0X05FFFFFF),而且S3C44B0X具有內(nèi)部譯碼器,,直接產(chǎn)生片選信號nGCS2,。由于C54X HPI8是一個8位的并行端口,而C5416的內(nèi)部結(jié)構(gòu)為16位,,因而主機必須讀/寫兩個連續(xù)的8位字節(jié),,而且主機還應(yīng)該提供HBIL信號指示當(dāng)前傳輸?shù)氖堑谝蛔止?jié)還是第二字節(jié),。在S3C44B0X中,可以直接使用地址線A1來完成此功能:當(dāng)向A1=0的地址寫入數(shù)據(jù)時,,表示為第一字節(jié);向A1=1的地址寫入數(shù)據(jù)表示第二字節(jié),。

  另外,還有幾個關(guān)鍵的控制信號線需要連接,。一個就是HR/W信號,,由于S3C44B0X沒有此信號,使用地址線A4來代替,。當(dāng)A4=1時,,代表讀操作,反之為寫操作,。在HPI8的操作中,,所有的地址線和控制線在HDS1/2的下降沿采樣,用S3C44B0X的讀/寫信號nOE和nWE來完成此功能,。

  由于S3C44B0X和C5416 HPI接口的控制邏輯不盡相同,,需要使用其它的一些信號線來進行模擬,此時要嚴格遵循HPI的讀寫時序(如圖1所示),。

3.2 軟件設(shè)計

  由于主機接口(HPI)傳送8位數(shù)據(jù)字節(jié),,而HPIC寄存器(通常是S3C44B0X首先要尋址的寄存器)是一個16位寄存器,在S3C44B0X這一邊可以相同內(nèi)容的高字節(jié)與低字節(jié)來管理HPIC寄存器(盡管某些位的尋址受到一定的限制),,在C54X這一邊高位不用,。

  當(dāng)主機開始存取DSP的數(shù)據(jù)時,首先要執(zhí)行以下兩步操作:

  ·HPIC寄存器的BOB位置1(高字節(jié)與低字節(jié)必須相同),。BOB位為字節(jié)選擇位,。BOB位置1,表示第一字節(jié)為低字節(jié),。BOB位影響數(shù)據(jù)和地址的傳送,。只有主機可以修改這一位,C54X對它既不能讀也不能寫,。

  ·將起始地址寫入HPIA寄存器,。

  此后可正常存取DSP內(nèi)部RAM的數(shù)據(jù)了。

  結(jié)合硬件設(shè)計和HPI的操作步驟,,便可以在S3C44B0X上編寫程序?qū)崿F(xiàn)與C5416的數(shù)據(jù)通信,。

  程序主要分為兩個部分:一部分是地址及數(shù)據(jù)的定義;一部分是實現(xiàn)代碼。具體程序如下:

  #define HPI_BASE ?????? 0x4000000

  /* HPIC reg */

  #define HPIC_W_F??????*(UINT8*)(HPI_BASE+0x0)

????????????????????????????????????????????????????????????? //000 0 0

  #define HPIC_W_S??????*(UINT8 *)(HPI_BASE + 0x2)?

???????????????????????????                ?? //000 1 0

  #define HPIC_R_F??????*(UINT8 *)(HPI_BASE + 0x10)?

                       ??????????????? //110 0 0

  #define HPIC_R_S??????*(UINT8 *)(HPI_BASE + 0x12)??

          ?????????????????????????????????????????? //110 1 0

  /* HPIA automatically change */

  #define HPID_W_A_F??? *(UINT8 *)(HPI_BASE + 0x4)

        ????????????????????????????????????????????? //001 0 0

  #define HPID_W_A_S??? *(UINT8 *)(HPI_BASE + 0x6)??????????????????

                 ???????????????????????????? //001 1 0

  #define HPID_R_A_F??? *(UINT8 *)(HPI_BASE + 0x14)??????????????????????

                     ???????????????????? //101 0 0

  #define HPID_R_A_S??? *(UINT8 *)(HPI_BASE + 0x16)

       ???????????????????????????????????????????????? //101 1 0

  /* HPIA reg */

  #define HPIA_W_F??????*(UINT8 *)(HPI_BASE + 0x8)???????????????????

                    ?????????????????????? //010 0 0

  #define HPIA_W_S??????*(UINT8 *)(HPI_BASE + 0xA)

           ?????????????????????????????????????????//010 1 0

  #define HPIA_R_F??????*(UINT8 *)(HPI_BASE + 0x18)?

              ???????????????????????????????????//110 0 0

??? #define HPIA_R_S??????*(UINT8 *)(HPI_BASE + 0x1A)????????????????????????????

????                        ?????????? //110 1 0

  上述這些宏定義了HPI8接口寄存器的地址,。對S3C44B0X來說,,HPI8占用其內(nèi)存的BANK2,即起始地址為0X04000000,。又由于HPI8的HR/W和HBIL信號用S3C44B0X的地址線實現(xiàn),,因此對同一個寄存器而言,,其讀寫地址不同。

  以下代碼從DSP讀出數(shù)據(jù):

  UINT16 read_dsp(UINT16 addr)

  {

????  ?? INT16 i,;

??????   INT8 j,;

??????

????  ?? set_hpia(addr);?????????? //設(shè)置起始地址

??????

??????   i = HPID_R_A_F,;??????   //讀出第一字節(jié)

??????   j = HPID_R_A_S,;??????   //讀出第二字節(jié)

??????

  ?????? return (i<<8)|(j&0xff);

  }

????    以下代碼向DSP寫入數(shù)據(jù):

  void write_dsp(UINT16 addr,, UINT16 dat)

  {

????  ?? set_hpia(addr-1),;??????????????????????? //設(shè)置起始地址

??????   HPID_W_A_F=(UINT8)((dat>>8) & 0xff);???? //寫入第一字節(jié)

  ?????? HPID_W_A_S=(UINT8)(dat & 0xff),;??????   //寫入第二字節(jié)

  }

  在嵌入式系統(tǒng)設(shè)計中,用S3C44B0X作為主控制器,,用TMS320C5416進行運算,,然后通過HPI接口進行通信和交換數(shù)據(jù)。事實證明,,用HPI接口在ARM和DSP間通信滿足嵌入式系統(tǒng)的實時性要求,。

?

參考文獻

1 李 剛. 數(shù)字信號微處理器的原理及其開發(fā)應(yīng)用. 天津: 天津大學(xué)出版社, 2000

2 TMS320C54X DSP REFERENCE SET VOL5.ENHANCED?PERIPHERALS TI

3 S3C44B0X USER MANUAL. SAMSUNG ELECTRONICS

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問題,請及時通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。