<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > TMS320C62x HPI引導過(guò)程的實(shí)現

TMS320C62x HPI引導過(guò)程的實(shí)現

作者: 時(shí)間:2004-12-06 來(lái)源:網(wǎng)絡(luò ) 收藏
作者Email: cai_yang@etang.com

摘要和TMS320C67x DSPs提供了幾種不同的啟動(dòng)模式,不同的啟動(dòng)模式?jīng)Q定了DSP復位后的初始化以及代碼裝載方式。本文就 DSP的啟動(dòng)模式進(jìn)行詳細的說(shuō)明。

關(guān)鍵詞 DSP 啟動(dòng)模式

1 緒言

在TMS320C62x系列DSP中,主機口是一個(gè)16位寬度的并行端口。主機(也稱(chēng)上位機)掌管該接口的主控權,通過(guò)它可以直接訪(fǎng)問(wèn)CPU的存儲器空間。另外,主機還可以直接訪(fǎng)問(wèn)TMS320C62x片內的存儲映射的外圍設備。

HPI與CPU存儲空間的互連是通過(guò)DMA控制器的。借助專(zhuān)門(mén)的地址和數據寄存器,通過(guò)DMA輔助通道,完成HPI對存儲空間的訪(fǎng)問(wèn)。主機和CPU都可以對HPI控制寄存器HPIC進(jìn)行訪(fǎng)問(wèn),主機一方還可以訪(fǎng)問(wèn)HPI地址寄存器HPIA和HPI數據寄存器HPID。

2 TMS320C62x模式

TMS320C62x系列DSP提供了三種方式:

(1)沒(méi)有自舉:CPU直接從地址0開(kāi)始執行代碼;

(2)ROM自舉:由DMA/EDMA控制器從外部CE1空間中的ROM中拷貝固定數量的一段代碼到地址0,拷貝結束后,CPU從地址0開(kāi)始運行;

(3)HPI自舉:由外部主機通過(guò)HPI對芯片的存儲器空間進(jìn)行初始化,初始化結束后,外部主機通過(guò)HPI中斷喚醒CPU,CPU開(kāi)始從地址0運行。

所有這些設置項都是在芯片復位的時(shí)候才進(jìn)行檢查。一旦復位信號有效(reset=0),所有的三態(tài)輸出管腳恢復為默認狀態(tài),然后在reset信號的上升沿處檢查設置管腳BOOTMODE[4:0]的狀態(tài),自舉邏輯開(kāi)始生效。其中C6201/C6701有專(zhuān)門(mén)的管腳作為BOOTMODE[4:0],C6211/C6711則是利用主機口的HD[4:0],C6202/C6203利用擴展總線(xiàn)的XD[4:0]作為BOOTMODE[4:0]信號。

對于TMS320C62x的HPI自舉模式如下:首先需要設置Boot模式,Boot模式設置如表1所示。當DSP被復位時(shí),如果選擇了HPI boot模式,那么只有DSP的內核進(jìn)入復位狀態(tài),DSP其余模塊均保持激活狀態(tài)。這樣,主機就可以通過(guò)HPI接口訪(fǎng)問(wèn)DSP的整個(gè)存儲空間,包括片內、片外存儲器和片內的外設寄存器,對它們進(jìn)行初始化。主機對DSP做完了有關(guān)設置后,向HPIC寄存器的DSPINT位寫(xiě)1,將DSP從復位狀態(tài)喚醒,接下來(lái)CPU就從地址0開(kāi)始執行程序。主機對DSP可以進(jìn)行的操作包括:初始化CPU和EMIF,向DSP加載程序以及數據等。

表1 TMS320C62x HPI boot配置

BOOTMODE[4:0]

Memory Map

Memory at Address 0

Boot

00110

MAP 0

External; default values

HPI

00111

MAP 1

Internal

HPI

3 TMS320C62x HPI模式的

3.1 創(chuàng )建啟動(dòng)代碼

TMS320C62x HPI引導模式的第一步是生成HPI引導的DSP代碼,并把它與主處理器應用程序合并在一起,使DSP應用程序可以和主處理器應用程序一起遠程下載。為了簡(jiǎn)化,采用下列方案:把DSP應用程序轉換成頭文件中的數組,并和主處理器應用程序一起編譯連接。

具體實(shí)現分為兩步:1)利用轉換工具HEX6x把COFF文件轉換成ASCII-Hex格式十六進(jìn)制文件;2)利用自編工具hex2aray.exe將ASCII-Hex格式的文件轉換成包含數組的頭文件。

(1)利用轉換工具HEX6x把COFF文件轉換成ASCII-Hex格式十六進(jìn)制文件

利用轉換工具HEX6x把COFF文件轉換成十六進(jìn)制文件,使用轉換工具HEX6x需要一個(gè).cmd文件說(shuō)明具體的轉換格式,如下面文件hexcom.cmd所示:HEX6x把COFF文件test.out轉換成兩個(gè)ASCII-Hex格式的文件:一個(gè)是代碼段,包含在文件test.a00中;另一個(gè)是初始化的數據段,包含在文件test.a10中。在DOS命令行中執行hex6x hexcom.cmd將產(chǎn)生test.a00和test.a10兩個(gè)文件。

文件hexcom.cmd:
..object est.out
-a
-byte
-image
-memwidth 16
-romwidth 16
-order M

ROMS
{
/* Size of the internal pgm memory */
PGM: org = 0x00000000, length = 0x10000
/* Size of the internal data memory */
DATA: org = 0x80000000, length = 0x10000
}

(2)利用工具hex2aray.exe生成頭文件

然后利用hex2aray.exe將兩個(gè)ASCII-Hex格式的文件:test.a00和test.a10分別轉換成兩個(gè)個(gè)包含數組的頭文件:code.h和init.h。工具hex2aray.exe為自編工具。在DOS命令行中分別執行hex2aray Ci test.a00 Co code.h和hex2aray Ci test.a10 Co init.h兩條命令將產(chǎn)生兩個(gè)頭文件code.h和init.h。在文件hexcom.cmd中的選項:- a,指示HEX6x按ASCII-Hex格式轉換文件,ASCII-Hex文件格式如下所示:

^B
$AXXXX,
XX XX XX XX XX XX XX XX XX XX. . .
^C

文件開(kāi)始是ASCII STX 字符 (ctrl-B, 02h),結束是ASCII ETX 字符 (ctrl-C, 03h);$AXXXX,代表地址;其余為代碼。轉換后的頭文件格式如下:

const char code[]={0x12,0x18,0x01,0x00,0x28,0x00,0x00,0x00,0x2A,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,
0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

};

3.2 主機對HPI接口的操作

TMS320C62x提供了三個(gè)16位寄存器:HPIC、HPIA、HPID和16位數據線(xiàn)與主處理器通信。主處理器通過(guò)HPIC、HPIA、HPID和16位數據線(xiàn)來(lái)與TMS320C62x進(jìn)行數據交換,數據交換的如下:

1)首先初始化HPIC;
2)然后把地址寫(xiě)到HPIA;
3)最后通過(guò)HPID讀或寫(xiě)數據。

假設主機CPU也是TMS320C62x,那么主機與目標機之間的連接如圖1所示:

如圖1所示,假如Target 6201的/HCS連接到主機6201的CE1上。Target 6201的HPI寄存器映射到Host 6201DSP內存中,HCNTRL[1:0]和HHWIL連接到主機CPU的地址線(xiàn)上,那么HPIC、HPIA、HPID寄存器的地址分配如表2所示。,那么在C語(yǔ)言中,可以通過(guò)指針訪(fǎng)問(wèn)HPIC、HPIA、HPID,例如:

#define C6201_HPI 0x01400000 /* Host address on which C6x HPI is mapped */
int *hpi_ptr; /* define and initialize pointer*/
hpi_ptr = (int *)C6201_HPI;

/* Write dest_address to HPIA, with HOB=1 */
ptr_hpi[2] = (int)(dest_address 0x0ffff);
ptr_hpi[3] = (int)((dest_address>>16)0x0ffff);

表2 HPIC、HPIA、HPID各寄存器的地址分配

映射到主機的地址

HPI控制線(xiàn)

HPI寄存器訪(fǎng)問(wèn)

HCNTL[1:0]

HHWIL

HPI Base address + 0x00

00

0

HPIC 1st halfword

HPI Base address + 0x04

00

1

HPIC 2st halfword

HPI Base address + 0x08

01

0

HPIA 1st halfword

HPI Base address + 0x0C

01

1

HPIA 2st halfword

HPI Base address + 0x10

10

0

HPID 1st halfword

HPIA 自增

HPI Base address + 0x14

10

1

HPID 2st halfword

HPIA自增

HPI Base address + 0x18

11

0

HPID 1st halfword

HPIA不自增

HPI Base address + 0x1C

11

1

HPID 2st halfword

HPIA不自增

3.3 主機通過(guò)HPI下載代碼和數據段到目標DSP

一個(gè)程序由初始化區和非初始化區兩部分組成,主機處理器必須根據.cmd命令文件把這兩個(gè)區裝載到DSP正確的地址。下面這段代碼就是將代碼段和數據段兩部分分別下載到指定地址(即程序RAM和數據RAM)。它主要是從*source中讀出32位長(cháng)的數據,然后通過(guò)HPI將此數據寫(xiě)到DSP的dest_add地址(即程序RAM和數據RAM)中。*source中的數據就是DSP的啟動(dòng)代碼段和數據段中的數據。

void C6x_write_section(int *ptr_hpi, short *source, int dest_add, int length)
{
int i;
/* Write HPIC with HWOB=1,1st halfword transferred is least significant */
/* HCNTRL1 HCNTRL0 HHWIL */
ptr_hpi[0] = 0x0001; /* 1st halfword 0 0 0 */
ptr_hpi[1] = 0x0001; /* 2nd halfword 0 0 1 */
/* Write destination address to HPIA, 1st halfword is least significant */
/* HCNTRL1 HCNTRL0 HHWIL */
ptr_hpi[2] = (int)(dest_add 0x0ffff); /* 0 1 0 */
ptr_hpi[3] = (int)((dest_add>>16)0x0ffff);/* 0 1 1 */
for(i=0 ; i length ; i++)
{
/* Write source_word to HPID with address post-increment */
/* 1st half-word transferred is least significant */
/* HCNTRL1 HCNTRL0 HHWIL */
ptr_hpi[4] = (int) *source++; /* 1 0 0 */
ptr_hpi[5] = (int) *source++; /* 1 0 1 */
}
}

3.4 目標DSP開(kāi)始執行所下載的代碼

主機通過(guò)HPI下載代碼段和數據段到目標DSP以后,那么目標DSP就需要執行所下載的代碼了。通過(guò)寫(xiě)HPIC寄存器的DSPINT位為1讓DSP退出復位狀態(tài)后,DSP就開(kāi)始從地址0執行所下載的代碼了。具體實(shí)現代碼為:

/* Write HPIC with DSPINT=1 */
/* HCNTRL1 HCNTRL0 HHWIL */
/* 1st halfword 0 0 0 */
/* 2nd halfword 0 0 1 */
ptr_hpi[0] = 0x0002; /* 1st halfword */
ptr_hpi[1] = 0x0002; /* 2nd halfword */

4 總結

根據前面所述,TMS320C62x HPI啟動(dòng)過(guò)程如圖2所示。





評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>