《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于ARM的TMS320C6455 DSP HPI的動(dòng)態(tài)程序加載設(shè)計(jì)與實(shí)現(xiàn)
基于ARM的TMS320C6455 DSP HPI的動(dòng)態(tài)程序加載設(shè)計(jì)與實(shí)現(xiàn)
來源:電子技術(shù)應(yīng)用2013年第6期
趙建波1,胡文若2,習(xí) 勇1,陳路輝1
1.國防科技大學(xué) 電子科學(xué)與工程學(xué)院,湖南 長沙410073; 2.江西新余學(xué)院 數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院,江西 新余338004
摘要: 設(shè)計(jì)了ARM與DSP HPI(Host Port Interface 主機(jī)接口)的通信接口,并通過該接口完成了ARM對(duì)DSP程序的動(dòng)態(tài)加載。該方法減少了DSP對(duì)于外部非易失性存儲(chǔ)器的需求,同時(shí)提高了DSP加載方式的靈活性,對(duì)于軟件無線電波形組件的動(dòng)態(tài)加載有重要的意義。
中圖分類號(hào): TP399
文獻(xiàn)標(biāo)識(shí)碼: B
文章編號(hào): 0258-7998(2013)06-0014-03
Design and implementation of TMS320C6455 DSP HPI dynamic program loading based on ARM
Zhao Jianbo1,Hu Wenruo2,Xi Yong1,Chen Luhui1
1.School of Electronic Science & Engineering, National University of Defense Technology, Changsha 410073,China; 2.School of Mathematics & Computer Science, Xinyu University,Xinyu 338004,China
Abstract: This article designs the communication interface between ARM and DSP HPI. The ARM processor can dynamically load the DSP program through this interface. This method reduces the requirements of external nonvolatile memory, and improves the flexibility of the DSP boot mode, which is also important for the loading of the software defined radio waveform components.
Key words : ARM;DSP HPI;interface design;dynamic program loading

    軟件無線電的基本思想是通過構(gòu)造一個(gè)通用、標(biāo)準(zhǔn)、模塊化的硬件平臺(tái)并加載不同的軟件來實(shí)現(xiàn)不同的通信功能,使用不同的通信標(biāo)準(zhǔn)(如工作頻段、調(diào)制解調(diào)類型、數(shù)據(jù)格式、加密模式、通信協(xié)議等),構(gòu)成具有高度靈活性的通信設(shè)備(如多模手機(jī)、多功能基站、多波形電臺(tái)等)[1]。

    典型的軟件無線電通信設(shè)備包含CPU、DSP和FPGA等波形處理單元。一般來說,CPU完成系統(tǒng)控制與波形的網(wǎng)絡(luò)協(xié)議功能,而DSP和FPGA完成波形的物理層和部分協(xié)議功能。軟件無線電通信設(shè)備具有波形可動(dòng)態(tài)加載的特點(diǎn),這對(duì)系統(tǒng)設(shè)備的軟硬件設(shè)計(jì)提出了要求,要求CPU能夠?qū)SP和FPGA波形組件程序進(jìn)行動(dòng)態(tài)加載。
    BCNG-SDR-2012是自主研發(fā)的軟件無線電通信平臺(tái),由一片Samsung公司的S3C2440 ARM920T CPU、一片TI公司的TMS320C6455 DSP和兩片Xilinx公司的高性能FPGA(VIRTEX-5和SPARTAN-6)以及可配置的寬頻段射頻模塊組成,具有強(qiáng)大的通信信號(hào)處理能力。本文利用TMS320C6455 HPI口,在上述平臺(tái)上實(shí)現(xiàn)了ARM對(duì)DSP的程序動(dòng)態(tài)加載功能,從而為軟件無線電的實(shí)現(xiàn)提供了有力的支撐。
1 TMS320C6455 HPI啟動(dòng)流程
1.1 TMS320C6455 DSP簡介

    TMS320C6455是TI公司推出的高性能定點(diǎn)數(shù)字信號(hào)處理器[2],最高主頻為1.2 GHz,在該主頻下最高性能可達(dá)9 600 MIPS(Million Instructions Per Second)。該芯片的外設(shè)包括用于處理器間通信的 Serial RapidIO總線、千兆以太網(wǎng)存儲(chǔ)接入控制器(MAC) 、66 MHz外設(shè)組件互連(PCI)總線接口、用戶可配置的16 bit或者32 bit的主機(jī)接口HPI等。C6455 DSP建立在增強(qiáng)型C64x+DSP內(nèi)核基礎(chǔ)之上,該內(nèi)核添加了專用的新指令,與基于TI的高級(jí)C64x DSP架構(gòu)的代碼相比,其代碼尺寸平均縮短了20%~30%,周期效率提高了20%。
    該芯片集成了大量的片上存儲(chǔ)器,這些存儲(chǔ)器被組織為一個(gè)兩級(jí)存儲(chǔ)系統(tǒng)。其中,第一級(jí)(L1)為2個(gè)32 KB存儲(chǔ)器,可配置為數(shù)據(jù)Cache和程序Cache;第二級(jí)(L2)為一塊2 MB的存儲(chǔ)器,可作為程序或者數(shù)據(jù)存儲(chǔ)器。
1.2 TMS320C6455 DSP的HPI特性
    主機(jī)接口HPI(Host Port Interface)是一個(gè)并行端口,主要用于DSP與其他總線或CPU進(jìn)行連接,可實(shí)現(xiàn)高速、并行的數(shù)據(jù)通信。HPI使一個(gè)外部主機(jī)可以通過16 bit或者32 bit的并行接口直接訪問DSP的內(nèi)部或外部存儲(chǔ)器。HPI有3個(gè)寄存器,分別為HPIC控制寄存器、HPIA地址寄存器、HPID數(shù)據(jù)寄存器,均為32 bit。如圖1顯示了HPI在主機(jī)與DSP數(shù)據(jù)交互中的位置[3],通過HPI DMA邏輯以及資源交換控制邏輯,主機(jī)CPU可以訪問DSP的內(nèi)存、EMIF以及其他設(shè)備。

1.3 使用HPI的啟動(dòng)流程
    TMS320C6455復(fù)位和上電時(shí)的引導(dǎo)模式[4]主要有NO BOOT模式、HPI引導(dǎo)模式、Flash引導(dǎo)模式等。具體采用哪種引導(dǎo)模式是由復(fù)位或上電時(shí)管腳BOOTMODE[3:0]的狀態(tài)決定的[5]。本文使用的平臺(tái)中,BOOTMODE[3:0]管腳可通過撥碼開關(guān)來設(shè)置。
    如圖2顯示了使用HPI的啟動(dòng)流程。系統(tǒng)上電復(fù)位后,首先采樣管腳BOOTMODE[3:0]的狀態(tài)確定啟動(dòng)方式(即引導(dǎo)模式)。由于本文采用的是HPI引導(dǎo)模式,上電后DSP內(nèi)核處于掛起狀態(tài);接下來外部主機(jī)通過HPI口直接將代碼和數(shù)據(jù)加載到DSP的內(nèi)存中,在這期間DSP內(nèi)核保持掛起狀態(tài)不變;當(dāng)主機(jī)完成程序加載后,主機(jī)向HPIC中的DSPINT位寫1,向DSP發(fā)出中斷;DSP收到中斷后,DSP內(nèi)核從掛起狀態(tài)喚醒,從L2的基地址(0x800000)處開始執(zhí)行程序。

2 硬件設(shè)計(jì)與寄存器讀寫驅(qū)動(dòng)
    在本文的硬件平臺(tái)設(shè)計(jì)中,ARM與DSP HPI的接口連線如圖3所示。從ARM端看,由數(shù)據(jù)線、地址線、讀寫控制線和片選線組成,其中數(shù)據(jù)線通過162245總線隔離器進(jìn)行雙向傳輸。

 

 

    本文使用地址線作為HPI的控制信號(hào),各信號(hào)對(duì)應(yīng)的地址線如圖3所示。表1顯示了信號(hào)線的組合對(duì)應(yīng)的訪問類型。
    需要特別注意的是,由于本文中的數(shù)據(jù)總線是16 bit的,使得ARM訪問的地址必須是偶數(shù),因此不使用ADDR[0],從而有了表1中的偶數(shù)偏移地址??紤]到這一點(diǎn),結(jié)合表1,下面以HPIC為例,給出其在ARM加載程序中的地址定義,其中_F和_S對(duì)應(yīng)HHWIL信號(hào),指明是第1個(gè)半字還是第2個(gè)半字。
    unsigned long Write_HPIC_F_ADDR=CS3_BASE_ADDR+0x0;
    unsigned long Write_HPIC_S_ADDR=CS3_BASE_ADDR+0x2;
    unsigned long Read_HPIC_F_ADDR=CS3_BASE_ADDR+0x4;
    unsigned long Read_HPIC_S_ADDR=CS3_BASE_ADDR+0x6;
    根據(jù)上述定義,從ARM來看,對(duì)于每個(gè)寄存器都有4個(gè)地址,在數(shù)據(jù)訪問中必須選擇正確的地址來操作。上述定義中,CS3_BASE_ADDR對(duì)應(yīng)著DSP HPI的片選基地址,由于HPI 掛到了ARM的nGCS3片選上,根據(jù)S3C2440數(shù)據(jù)手冊(cè)[6]可知其為0x18000000。
    對(duì)HPIA和HPID的地址定義類似。定義了寄存器的地址后,再定義如下宏函數(shù)[7]來實(shí)現(xiàn)對(duì)相應(yīng)寄存器的讀寫操作:
    #define IOWrite(reg, data)   *(unsigned short *)(reg)=data
//寫寄存器宏定義
    #define IORead(reg)         *(unsigned short *)(reg)
//讀寄存器宏定義
3 HPI啟動(dòng)軟件實(shí)現(xiàn)流程
    主機(jī)通過HPIC、HPIA、HPID和16 bit數(shù)據(jù)線與DSP進(jìn)行數(shù)據(jù)交換和中斷控制。HPI加載軟件實(shí)現(xiàn)流程如圖4所示。

    (1)初始化HPIC
    設(shè)置相應(yīng)比特位,在這里僅僅設(shè)置了HPIC的HWOB位,該比特位設(shè)置第一個(gè)半字是所傳32 bit數(shù)據(jù)的高16 bit(MSB16)還是低16 bit(LSB16)。在這里需要注意HHWIL信號(hào)線與HWOB位所起作用的不同,兩者的共同協(xié)作才能確保數(shù)據(jù)的正確傳輸。操作如下:
      temp1=IORead(Read_HPIC_F_ADDR);
//讀HPIC的第1個(gè)半字
      temp2=IORead(Read_HPIC_S_ADDR);
//讀HPIC的第2個(gè)半字
      IOWrite(Write_HPIC_F_ADDR,temp1|0x1);
//設(shè)置HPIC中的HWOB位
      IOWrite(Write_HPIC_S_ADDR,temp2|0x1);
//設(shè)置HPIC中的HWOB位
      需要注意的是,HPIC的高16 bit和低16 bit內(nèi)容是相同的,所以寫入相同的數(shù)據(jù)進(jìn)行設(shè)置。
      (2)初始化HPIA
      將操作地址寫到HPIA中,由前所述,DSP要從L2的基地址(0x800000)處開始執(zhí)行程序。因此需要將程序加載到從L2的基地址開始的內(nèi)存中。對(duì)于TMS320C6455,L2的基地址為0x800000,芯片要求HPIA中寫入32 bit的字地址,因此要將字節(jié)地址轉(zhuǎn)為字地址,即0x200000,所以寫HPIA寄存器代碼如下:
    IOWrite(Write_HPIA_F_ADDR,0x0000);
    for(time_out=0;time_out<HRDY_TIMEOUT;time_out++);
    IOWrite(Write_HPIA_S_ADDR,0x20);
    for(time_out=0;time_out<HRDY_TIMEOUT;time_out++);
    根據(jù)TMS320C6455的芯片手冊(cè),HPIA的2個(gè)半字的寫操作之間需要增加一定的延時(shí)。因此,上面的代碼中設(shè)定了延時(shí)。具體時(shí)間參考TMS320C6455的芯片手冊(cè)[2]。
    (3)向HPID中寫入數(shù)據(jù)
    存取HPID時(shí),通過控制HCNTL[1:0]信號(hào)可選擇帶地址自增的讀寫操作或是不帶地址自增的讀寫操作。當(dāng)訪問連續(xù)的DSP存儲(chǔ)空間時(shí),使用帶地址自增的讀寫操作只需要對(duì)HPIA寄存器賦值一次即可,能夠給數(shù)據(jù)存取操作帶來很大的方便。本文操作的是連續(xù)地址,因此使用帶地址自增的HPID,這樣僅需要進(jìn)行一次設(shè)置HPIA,之后便不用再對(duì)其進(jìn)行設(shè)置。
    (4)向HPIC中的DSPINT位寫入1,向DSP發(fā)出中斷
    至此,加載數(shù)據(jù)全部寫入內(nèi)存。接下來通知DSP數(shù)據(jù)加載完畢,這需要通過設(shè)置HPIC中的DSPINT位來完成,實(shí)現(xiàn)代碼如下:
    temp3=IORead(Read_HPIC_F_ADDR);
    temp4=IORead(Read_HPIC_S_ADDR);
    IOWrite(Write_HPIC_F_ADDR,temp3|0x2);
    IOWrite(Write_HPIC_S_ADDR,temp4|0x2);
    這樣當(dāng)主機(jī)向DSP發(fā)送了DSPINT中斷后,DSP會(huì)從L2基地址處開始執(zhí)行。但是對(duì)于DSP的C程序來說,是要從_c_int00處開始執(zhí)行,因此需要在L2基地址處增加跳轉(zhuǎn)指令,使得程序跳轉(zhuǎn)到_c_int00處,這樣程序便可以正確運(yùn)行,從而實(shí)現(xiàn)DSP程序的動(dòng)態(tài)加載。
    需要注意的是,由于項(xiàng)目中電路板設(shè)計(jì)使用HPI16模式,因此對(duì)HPI任何一個(gè)寄存器的訪問,主機(jī)都需在HPI總線上進(jìn)行2次半字存取,否則可能會(huì)引起整個(gè)數(shù)據(jù)的丟失或是其他不可預(yù)料的錯(cuò)誤。
4 格式轉(zhuǎn)換
    使用DSP集成開發(fā)環(huán)境CCS生成的文件一般為.out文件,該文件是通用目標(biāo)文件格式(COFF)的目標(biāo)文件,COFF文件中包含一些定位符號(hào)以及一些頭信息等,而本文加載到內(nèi)存中的數(shù)據(jù)是CPU能夠直接運(yùn)行的代碼,不能包含任何的其他冗余信息,因此不能直接將COFF文件加載到內(nèi)存中。本文使用TI公司提供的工具h(yuǎn)ex6x.exe和hex2aray.exe進(jìn)行格式的轉(zhuǎn)換,其中hex6x.exe將COFF文件轉(zhuǎn)換為hex文件,hex2aray.exe將hex文件轉(zhuǎn)換為一個(gè)數(shù)組,這樣,直接讀取數(shù)組中的數(shù)據(jù)并將其加載到內(nèi)存中即可。
    本文在介紹DSP主機(jī)接口并通過HPI接口啟動(dòng)流程的基礎(chǔ)上,詳細(xì)介紹了在項(xiàng)目平臺(tái)上ARM通過DSP的HPI口動(dòng)態(tài)加載DSP的硬件設(shè)計(jì)與軟件實(shí)現(xiàn),同時(shí)詳細(xì)描述了設(shè)計(jì)的注意事項(xiàng)、啟動(dòng)跳轉(zhuǎn)以及格式轉(zhuǎn)換等問題。實(shí)際的測(cè)試表明,加載1 MB的內(nèi)存數(shù)據(jù)僅需要0.28 s,可見該加載方法加載速度快,靈活性好,很好地解決了軟件無線電設(shè)備對(duì)DSP波形組件可重構(gòu)的要求。
參考文獻(xiàn)
[1] MITOLA J.The software radio architecture[J].IEEE Communications Magazine,1995,15(5):26-38.
[2] Texas Instruments.TMS320C6455 fixed-point digital signal  processor[EB/OL].[2012-10-10].http://www.ti.com.
[3] Texas Instruments.TMS320C645x DSP host port interface (HPI) user&prime;s guide[EB/OL].[2012-10-10].http://www.ti.com.
[4] 吳海洲,劉恒甫,黃克武.基于TMS320C6455的DSP加載模式研究[J].電子測(cè)量技術(shù),2008,31(6):155-162.
[5] Texas Instruments.TMS320C645x/C647x DSP bootloader user&prime;s guide[EB/OL].[2012-10-10].http://www.ti.com.
[6] Texas Instruments.S3C2440A 32-BIT CMOS Microcontroller user&prime;s manual[EB/OL].[2012-10-10].http://www.samsungsemi.com.
[7] Texas Instruments.TMS320C6000 programmer&prime;s guide[EB/OL].[2012-10-10].http://www.ti.com.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。