新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ADSP-218X的IDMA接口自舉設(shè)計(jì)

ADSP-218X的IDMA接口自舉設(shè)計(jì)

作者: 時(shí)間:2005-03-30 來(lái)源:網(wǎng)絡(luò) 收藏

摘要:介紹系列DSP芯片的的自舉與應(yīng)用。硬件方面介紹特點(diǎn)以及它與主機(jī)的連接方式;軟件方面介紹如何DSP的程序與主機(jī)程序代碼結(jié)合起來(lái),并由主機(jī)通過(guò)下載程序。此種方法可簡(jiǎn)化系統(tǒng) ,降低成本。

關(guān)鍵詞:DSP ADSP-218X IDMA 主機(jī) 自舉

隨著DSP芯片技術(shù)的發(fā)展,其種類和型號(hào)日益增多。ADI公司推出了ADSP-218X系列16位定點(diǎn)DSP,它的IDMA接口極具特色。

1 IDMA接口介紹

IDMA接口是一個(gè)并行的I/O接口, 主機(jī)可通過(guò)IDMA接口為DSP下載程序、讀/寫(xiě)DSP的內(nèi)部存儲(chǔ)器。下面簡(jiǎn)稱ADSP-218X為218X。IDMA接口的讀/寫(xiě)訪問(wèn)是完全異步的。也就是說(shuō)在DSP全速運(yùn)行時(shí),主機(jī)可訪問(wèn)DSP的內(nèi)部程序空間和數(shù)據(jù)空間。

IDMA接口引腳定義如表1所列。其中I/O是針對(duì)DSP來(lái)說(shuō)的,I是輸入信號(hào),O是輸出信號(hào)。

表1 IDMA接口引腳定義

引腳名I/O

功 能 描 述

ISIIDMA接口片選信號(hào)
IRDIIDMA接口讀信號(hào)。當(dāng)IS和IRD同時(shí)有效時(shí),開(kāi)始一個(gè)IDMA讀周期
IWRIIDMA接口寫(xiě)信號(hào)。當(dāng)IS和IWR同時(shí)有效時(shí),開(kāi)始一個(gè)IDMA寫(xiě)周期
IALIIDMA接口地址鎖存信號(hào)。當(dāng)IS和IAL同時(shí)有效時(shí),開(kāi)始一個(gè)IDMA地址鎖存序列。此時(shí)主機(jī)應(yīng)將訪問(wèn)IDMA的起臺(tái)地址送到IAD0~15上
IACKOIDMA接口允許訪問(wèn)的確認(rèn)信號(hào)
IAD0~15I/OIDMA接口的16位地址/數(shù)據(jù)總線

當(dāng)IS與IAL同時(shí)有效時(shí),218X將IAD0~15總線上的地址寫(xiě)入IDMA控制寄存器。雖然主機(jī)送到IAD0~15上的是數(shù)據(jù),但對(duì)218X來(lái)說(shuō),它是要鎖存的地址。該地址的位14是主機(jī)通知218X它要訪問(wèn)的是程序空間(PM)還是數(shù)據(jù)空間(DM),而位0~13是它要訪問(wèn)的存儲(chǔ)器的起始地址。主機(jī)第一次訪問(wèn)218X的地址就是IDMA控制寄存器所保存的地址,以后每訪問(wèn)一次,就在該地址值的基礎(chǔ)上再加1。這個(gè)工作由218X自動(dòng)完成,直到主機(jī)通過(guò)IAL和IS鎖存新的地址。IDMA控制寄存器定義如圖1所示。

主機(jī)只要先通知218X它要訪問(wèn)的是程序空間還是數(shù)據(jù)空間以及要訪問(wèn)的起始地址,以后就可以連續(xù)讀寫(xiě)一段空間的數(shù)據(jù)。至于218X是如何實(shí)現(xiàn)的,對(duì)主機(jī)來(lái)說(shuō)是透明的。

2 218X與主機(jī)的IDMA接口

下面介紹218X如何通過(guò)IDMA接口自舉的系統(tǒng)設(shè)計(jì)。這樣可以減少一個(gè)程序片,讓218X與主機(jī)共用一個(gè)程序片。

ADSP-218X有多種型號(hào)。不同型號(hào)的DSP處理器,要設(shè)置不同的模式引腳,才能達(dá)到IDMA自舉功能。對(duì)ADSP-2181和ADSP-2183來(lái)說(shuō),要分別設(shè)置模式引腳MMAP=0,引腳BMODE=1。對(duì)于其它型號(hào)的ADSP-218X芯片來(lái)說(shuō),模式引腳分別設(shè)置為Mode A=1,Mode=1,Mode C=0。如果該型號(hào)的218X還有模式引腳Mode D的話,要設(shè)置為0。模式引腳如此設(shè)置,表示218X是通過(guò)IDMA接口進(jìn)行自舉的。

圖1

218X占用主機(jī)的一個(gè)片選信號(hào)。對(duì)于主機(jī)來(lái)說(shuō),218X只占用兩個(gè)I/O地址空間,一個(gè)是控制端口地址(此時(shí)IAL為1),另一個(gè)是數(shù)據(jù)端口地址(此時(shí)IAL為0),因此可將主機(jī)的地址線A1與218X的IAL相連。而218X的IACK與主機(jī)的一個(gè)輸入引腳相連,主機(jī)通過(guò)查詢它來(lái)判斷218X是否繁忙。其它信號(hào)接線如圖2所示。

3 218X程序與主機(jī)程序的連接

目前大多數(shù)主機(jī)系統(tǒng)提供C編譯器,因此主機(jī)采用C語(yǔ)言進(jìn)行編程,既便于理解又具有實(shí)用價(jià)值。本文以ADSP-2185為例說(shuō)明如何將218X目標(biāo)代碼鏈接到主機(jī)源程序中。

218X程序編完后,用ADI公司提供的VisualDSP++ for 21xx軟件將它編譯生成218X的目標(biāo)文件,后綴名為DEX。在VisualDSP++ for 21xx軟件中的還有一個(gè)轉(zhuǎn)換工具elfsp121,它將218X目標(biāo)代碼轉(zhuǎn)換成便于IDMA下載的文件。如果218X的目標(biāo)文件為EXAMPLE1.DEX,可以按下面格式調(diào)用。

c:EXAMPLE1.DXE DSP.OUT -idma

其中的開(kāi)關(guān)-idma表示要將EXAMPLE1.DXE轉(zhuǎn)換為IDMA下載格式,輸出文件為DSP.OUT。下面簡(jiǎn)單地表示一下DSP.OUT文件格式。

0040

4000

FFFF

FFFE

可以看出它不是C語(yǔ)言格式,因此要將DSP.OUT改寫(xiě)成DSP.H。它內(nèi)含C語(yǔ)言格式的常量數(shù)組,供主機(jī)下載程序代碼到218X使其自舉。

下面對(duì)DSP.H文件內(nèi)容進(jìn)行編寫(xiě),并分析其結(jié)構(gòu)。

注:在←及以后的內(nèi)容DSP.H文件中是沒(méi)有的,只是幫助說(shuō)明。

#define MAX_CODE_LEN 257

unsigned short DSP_ROM_CODE[MAX_CODE_LEN]={←32位機(jī)使用short,而16位機(jī)要將short改為int 0x0040, ←當(dāng)前一段要下載的代碼長(zhǎng)度為0x40,不包含IDMA控制字

0x4000, ←IDMA控制字。先初始化數(shù)據(jù)空間,地址為數(shù)據(jù)空間的0x0000,其中4表示訪問(wèn)的是DM數(shù)據(jù)空間

0xFFFF, ←第一個(gè)數(shù)據(jù)字

0xFFFE, ←第二個(gè)數(shù)據(jù)字

…………

0x001F,←第0x40個(gè)數(shù)據(jù)字

0x00B8,←當(dāng)前一段要下載的代碼長(zhǎng)度

0x0001,←IDMA控制字。下面下載程序代碼至PM程序空間,起始地址為0x0001

0x0000,←第1個(gè)程序代碼的高16位一個(gè)程序代碼由24位的字組成,因此要下載兩個(gè)字

0x0000,←第1個(gè)程序代碼的低8位

…………

0x000F,←最后一個(gè)程序代碼的低8位,相當(dāng)于下載的第0xB8個(gè)程序字

0x0002,←當(dāng)前段長(zhǎng)度為2,218X的IDMA口程序下載最后是對(duì)程序空間地址0寫(xiě)代碼。

0x0000, ←IDMA控制字。下載程序代碼至PM程序空間,起始地址為0x0000,一寫(xiě)完,218X就開(kāi)始運(yùn)行程序

0x1803,

0x000F,

0xffff};←0xffff表示下面沒(méi)有數(shù)據(jù)要主機(jī)下載了

從上面描述可以看出,主機(jī)下載218X程序時(shí),要多個(gè)段。如果218X程序在數(shù)據(jù)空間定義了常量數(shù)組,就要先下載數(shù)據(jù)段,然后下載程序段最后再對(duì)程序空間地址0x0000寫(xiě)代碼。如果218X工作在IDMA接口自舉模式下,在系統(tǒng)復(fù)位后,218X并不執(zhí)行程序。一旦主機(jī)對(duì)程序空間地址0x0000寫(xiě)了代碼,218X才開(kāi)始運(yùn)行程序。

4 主機(jī)下載218X程序

在主機(jī)的C程序中,將DSP.H作為頭文件,DSP_ROM_CODE是填充218X程序的常量數(shù)組,數(shù)組長(zhǎng)度由MAX_CODE_LEN宏定義。由主機(jī)將DSP_ROM_CODE中的數(shù)據(jù)按其格式下載到218X中。這樣主機(jī)源泉程序無(wú)需修改。下面給出主機(jī)下載218X程序的主要程序。

對(duì)主機(jī)來(lái)說(shuō),DSP_ADDR是218X的控制端口地址,注意其地址A1為1;DSP_DATA是218X的數(shù)據(jù)端口,地址A1為0。這是因?yàn)锳1接218X的IAL引腳。

#define DSP_ADDR (*(volatile unsigned short *)0x300002

#define DSP_DATA (*(volatile unsigned short*)0x300000)

//功能:判斷218X的IACK信號(hào)是否有效。主機(jī)每進(jìn)行一次IDMA訪問(wèn)前都要先判IACK。

Void wait_ack(void)

{unsigned char ch;

while(1)/*查詢I/O口,判斷IACK是否為低,為低則已獲利218X確認(rèn),退出*/

{ch=SIM_PORTF;

if((ch 0x20)!=0x20)break;

}

}

//功能:完成218X程序下載

void DownCodeToDSP(void)

{unsigned short iCount,ip,idata;

ip=0;

while(1)

{iCount=DSP_ROM_CODE[ip++];//讀要寫(xiě)的字節(jié)數(shù)

if(iCount==0xffff)break;

//當(dāng)字節(jié)數(shù)為0xffff時(shí),218X所有段都已下載完成,結(jié)束下載wait_ack();

DSP_ADDR=DSP_ROM_CODE[ip++];

//向218X的IDMA口寫(xiě)起始地址

while(iCount) //此循環(huán)完成寫(xiě)一個(gè)段

{idata=DSP_ROM_CODE[ip++];

//向218X的IDMA口數(shù)據(jù)或程序代碼

DSP_DATA=idata;

wait_ack();

iCount--;}

}

}

一般單片機(jī)的計(jì)算功能,特別是乘、除法性能比較差,開(kāi)發(fā)人員可根據(jù)自己所要設(shè)計(jì)的系統(tǒng)的要求,選擇相應(yīng)的主機(jī)CPU。要求至少是16位的單片機(jī),因?yàn)镮DMA接口為16位的地址/數(shù)據(jù)總線。在程序功能的分配上,讓主機(jī)完成一些復(fù)雜的邏輯運(yùn)算、通信等功能,主機(jī)通過(guò)IDMA接口與218X相連;由218X完成極為耗時(shí)的乘、除法計(jì)算。主機(jī)通過(guò)IDMA接口為218X下載程序,減少了218X的程序片;雙方通過(guò)IDMA接口交換數(shù)據(jù),這又減少了218X與主機(jī)之間的雙口RAM。對(duì)于主機(jī)來(lái)說(shuō),218X只不過(guò)是一個(gè)計(jì)算協(xié)處理器,系統(tǒng)設(shè)計(jì)成本低而又極為簡(jiǎn)潔。



關(guān)鍵詞: 設(shè)計(jì) 接口 IDMA ADSP-218X

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉