男女午夜激情_www.天堂av.com_亚洲综合小说区_亚洲欧美自拍视频_成年精品_久久www免费人成—看片_激情综合五月天_久久高潮视频_最新国产成人ab网站_国产精品卡一

機電之家資源網
單片機首頁|單片機基礎|單片機應用|單片機開發|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發
   位置: 機電之家下載站 >> 單片機技術網 >> 單片機開發 >> DSP >> 正文
培訓信息
贊助商
TMS320C62x HPI引導過程的實現
TMS320C62x HPI引導過程的實現
 更新時間:2009-6-5 9:09:46  點擊數:2
【字體: 字體顏色

摘 要:TMS320C62x和TMS320C67x DSPs提供了幾種不同的啟動模式,不同的啟動模式決定了DSP復位后的初始化以及代碼裝載方式。本文就TMS320C62x DSP的HPI啟動模式進行詳細的說明。

    關鍵詞:TMS320C62x    DSP     HPI   啟動模式

    1 緒言

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

    HPI與CPU存儲空間的互連是通過DMA控制器實現的。借助專門的地址和數據寄存器,通過DMA輔助通道,完成HPI對存儲空間的訪問。主機和CPU都可以對HPI控制寄存器HPIC進行訪問,主機一方還可以訪問HPI地址寄存器HPIA和HPI數據寄存器HPID。

    2 TMS320C62x引導模式

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

    (1) 沒有自舉過程:CPU直接從地址0開始執行代碼;

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

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

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

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

     3 TMS320C62x HPI引導模式的實現

    3.1 創建啟動代碼

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

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

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

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

文件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將兩個ASCII-Hex格式的文件:test.a00和test.a10分別轉換成兩個個包含數組的頭文件:code.h和init.h。工具hex2aray.exe為自編工具。在DOS命令行中分別執行hex2aray –i test.a00 –o code.h和hex2aray –i test.a10 –o init.h兩條命令將產生兩個頭文件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

    文件開始是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提供了三個16位寄存器:HPIC、HPIA、HPID和16位數據線與主處理器通信。主處理器通過HPIC、HPIA、HPID和16位數據線來與TMS320C62x進行數據交換,數據交換的過程如下:

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

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

      如圖1所示,假如Target 6201的/HCS連接到主機6201的CE1上。Target 6201的HPI寄存器映射到Host 6201DSP內存中,HCNTRL[1:0]和HHWIL連接到主機CPU的地址線上,那么HPIC、HPIA、HPID寄存器的地址分配如表2所示。,那么在C語言中,可以通過指針訪問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各寄存器的地址分配
             
       

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

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

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開始執行所下載的代碼

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

/* 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啟動過程如圖2所示。

     

<!--插入廣告JS代碼-->
  • 上一篇: TMS320LF2407 DSP控制器的串行通信設計
  • 下一篇: TMS320C54x系列DSP中的應用
  • 發表評論   告訴好友   打印此文  收藏此頁  關閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關文章
    網友評論:(只顯示最新5條。)
    關于我們 | 聯系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發消息66821730(技術支持)點擊這里給我發消息66821730(廣告投放) 點擊這里給我發消息41031197(編輯) 點擊這里給我發消息58733127(審核)
    本站提供的機電設備,機電供求等信息由機電企業自行提供,該企業負責信息內容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術支持

    主辦:杭州市高新區(濱江)機電一體化學會
    中國行業電子商務100強網站

    網站經營許可證:浙B2-20080178-1
    主站蜘蛛池模板: 云南省| 宜兰市| 乐陵市| 林口县| 天镇县| 泽普县| 宁明县| 红桥区| 毕节市| 固原市| 靖宇县| 哈巴河县| 虎林市| 望江县| 长汀县| 包头市| 丹棱县| 大荔县| 阜新市| 喀喇| 延庆县| 盱眙县| 利川市| 大港区| 新闻| 玉门市| 武川县| 格尔木市| 花莲县| 凤山县| 雷山县| 宜春市| 辽阳市| 湛江市| 枝江市| 榆树市| 屯留县| 葫芦岛市| 新乐市| 巫溪县| 屏边|