<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è) > 嵌入式系統 > 設計應用 > 利用ISA總線(xiàn)實(shí)現對DSP芯片VC5402的軟配置

利用ISA總線(xiàn)實(shí)現對DSP芯片VC5402的軟配置

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

摘要:以PC機作為主機,通過(guò)PC的的HPI主機并口連接作為傳輸通道,對PC機插卡上的TMS320進(jìn)行實(shí)時(shí)在線(xiàn)程序裝載。

關(guān)鍵詞: HPI主機并口

一、引言

目前,隨著(zhù)微電子技術(shù)的飛速發(fā)展,在基于工業(yè)測控和數據采集領(lǐng)域的PC機板卡產(chǎn)品中,高速DSP的使用已經(jīng)是越來(lái)越普及。眾多廠(chǎng)家生產(chǎn)的DSP中以美國TI公司(德州儀器)生產(chǎn)的DSP芯片的應用最為普遍。同傳統的諸如單片機的程序裝載過(guò)程相比,DSP廠(chǎng)家為芯片提供了更多、更靈活的程序裝載方法。電子工程師在設計DSP系統中究竟采用那種程序裝載方法,應視產(chǎn)品類(lèi)型的不同而有所選擇。當前許多廠(chǎng)家所生產(chǎn)的DSP芯片中都集成了主機并行接口,主機并口可以完成主機和DSP之間的并行數據交換。例如TI公司的TMS320C54X系列的DSP芯片、AD公司ADSP21XX系列的DSP芯片等。而主機并口在完成主機與DSP進(jìn)行數據交換的同時(shí),還大都具有程序裝載的功能。在PC板卡類(lèi)電子產(chǎn)品上使用DSP芯片時(shí),實(shí)際上是一種主從模式的應用,即把PC機作為主機,DSP芯片作為從機。這時(shí)采用主機并口通過(guò)PC機的系統來(lái)完成程序的裝載就成了一種既經(jīng)濟實(shí)用又靈活方便的方式。下面以TI公司的TMS320為例(以下簡(jiǎn)稱(chēng)為),本文介紹了如何由PC的ISA總線(xiàn)來(lái)完成DSP程序的HPI(主機并行接口)裝載,并給出了軟硬件開(kāi)發(fā)的實(shí)例。

二、硬件設計

1.VC5402的HPI程序裝載過(guò)程

VC5402內部具有4K16位字的ROM,當系統上電復位后,如果VC5402的MP/MC引腳為低,那么VC5402的PC程序指針跳到地址為0XFF80的ROM處開(kāi)始執行復位向量段的程序。該段程序是廠(chǎng)家在出廠(chǎng)時(shí)就固化好的一段程序,它首先執行跳轉指令,跳到地址為0XF800處開(kāi)始執行,從0XF800開(kāi)始的ROM的內容被稱(chēng)為程序裝載器(Bootloader)。在那里DSP將要判斷用戶(hù)究竟采用了那種程序裝載方式,而判斷的依據是通過(guò)諸如中斷的有無(wú)、數據或I/O空間固定地址單元內特定的標志字的有無(wú)等廠(chǎng)家已經(jīng)定義好的方式來(lái)識別的。值得注意的是,VC5402的HPI裝載方式與C54X系列的其它型號稍有不同。其不同有以下兩點(diǎn):

⑴ VC5402的HPI裝載過(guò)程是在復位過(guò)程(Reset)以后完成的,不是在復位過(guò)程中完成的。

⑵ /INT2標志位不是判斷HPI裝載模式的唯一方法,VC5402內地址為0X007F的RAM單元的內容也是判斷HPI裝載模式的一種方法。

PC機的ISA總線(xiàn)作為主機(以后稱(chēng)為HOST)可以通過(guò)HPI口把VC5402的程序裝載到VC5402內部雙存取RAM中開(kāi)始執行。

圖1 ISA總線(xiàn)與VC5402的HPI接口電路

2.硬件

ISA總線(xiàn)與VC5402的HPI硬件接口比較簡(jiǎn)單,需要注意的一點(diǎn)就是VC5402與ISA總線(xiàn)需要電平轉換。由于ISA總線(xiàn)電平是5V TTL電平,而VC5402是3.3V電平,所以?xún)烧卟荒苤苯咏涌?。我們可以使用PHILIPS公司的74LVC245電平轉換芯片,這種芯片采用3.3V供電,能允許5V和3.3V兩種電平的輸入信號。輸出為3.3V電平,可以和3.3V器件直接接口。電路原理圖見(jiàn)圖一:

由于需要PC對VC5402進(jìn)行實(shí)時(shí)的程序裝載,那么VC5402的復位就不能用簡(jiǎn)單的RC電路來(lái)完成,這里采用一片74HC74的D觸發(fā)器由PC控制完成VC5402的復位過(guò)程。圖中,我們把/HINT和/INT2連在一起,是因為VC5402在運行Bootloader時(shí)會(huì )自動(dòng)在/HINT引腳輸出一個(gè)低電平,這樣會(huì )使VC5402在復位結束后馬上能識別到當前的裝載模式為HPI模式,而忽略對其它模式的循環(huán)搜索。電路設計時(shí)需要注意對VC5402的HPI相關(guān)控制引腳的接法。對于控制引腳,采用不同的HOST時(shí),接法也會(huì )有所不同。這里需要了解一下HPI主機并口工作的時(shí)序,時(shí)序圖見(jiàn)圖二。圖中的/HCS信號是HPI使能輸入信號,當使用HPI時(shí),/HCS信號必須接地。/HAS是HPI的地址鎖存輸入信號,這個(gè)信號在地址總線(xiàn)與數據總線(xiàn)分時(shí)復用的處理器(例如8031)作為HOST時(shí)作為地址鎖存信號來(lái)使用;對于ISA總線(xiàn),其地址線(xiàn)和數據線(xiàn)是分開(kāi)的,所以/HAS只要接3.3V即可。/HDS1和/HDS2是兩個(gè)數據鎖存信號,事實(shí)上使用其中的一個(gè)就可以了,而另一個(gè)則必須接3.3V。本例子中使用了/HDS1,而/HDS2接了3.3V。應該指出,當不使用/HAS信號時(shí),/HDS1和/HDS2兩個(gè)輸入信號也具有地址鎖存作用,在它們的下降沿時(shí)刻,VC5402的HPI鎖存HCNTL0、HCNTL1、HBIL和HR/W四個(gè)控制輸入信號的值。通過(guò)這四個(gè)信號的值,VC5402可以確定當前是對那個(gè)寄存器進(jìn)行操作、是讀操作還是寫(xiě)操作、是對16位字長(cháng)的高八位還是低八位進(jìn)行傳輸,因此電路設計時(shí)必須確保在/HDS1或/HDS2下降沿時(shí)上述四個(gè)控制信號具有正確的邏輯電平,否則整個(gè)程序裝載過(guò)程將會(huì )失敗。

圖2 HPI操作時(shí)序圖

由于VC5402內部是16位的數據總線(xiàn),而其HPI主機并口卻是一個(gè)8位的數據總線(xiàn),所以通過(guò)HPI與HOST進(jìn)行一個(gè)16位字的數據交換需要分兩次來(lái)完成,HBIL信號來(lái)指出當前是第一個(gè)字節還是第二個(gè)字節。HR/W輸入信號來(lái)指出當前HOST的數據傳輸方向,由于這里只是對VC5402進(jìn)行程序裝載,即HOST只對HPI進(jìn)行寫(xiě)操作,所以把HR/W接地。至于HCNTL0、HCNTL1兩個(gè)輸入控制信號的作用,這里不妨簡(jiǎn)述如下:

HOST通過(guò)HPI與VC5402進(jìn)行數據交換時(shí),實(shí)際上只是對VC5402的三個(gè)寄存器進(jìn)行訪(fǎng)問(wèn),它們是HPI控制寄存器HPIC、HPI地址寄存器HPIA和HPI數據寄存器HPID。HOST對這三個(gè)寄存器的尋址,是通過(guò)輸入信號線(xiàn)HCNTL0和HCNTL1來(lái)完成的,具體過(guò)程如下表一。實(shí)際應用中通常是把HCNTL0、HCNTL1連同HBIL接到HOST的地址線(xiàn)上。

表一 HPI主機并口的地址分配

HCNTL0HCNTL1功 能 描 述
00HOST讀寫(xiě)HPI控制寄存器HPIC
01HOST讀寫(xiě)HPI控制寄存器HPID,同時(shí)HPIA具有自動(dòng)加1的功能,這種方式可以數據交換的速度
10HOST讀寫(xiě)HPI地址寄存器HPIA
11HOST讀寫(xiě)HPI數據寄存器HPID,HPIA寄存器不受影響

電路中用一片GAL16V8來(lái)完成PC的I/O地址譯碼。下面來(lái)對VC5402進(jìn)行I/O資源分配。分配情況見(jiàn)表二。根據資源分配,對照圖一所示電原理圖,寫(xiě)出GAL16V8的譯碼狀態(tài)方程:

IO4=A9*/A8*/A7*/A6*A5*A4*/A3*/A2*/A1*/A0*AEN*/IOW ;對VC5402復位譯碼

/IO1=/IOW ;送/HDS1進(jìn)行數據鎖存

/IO6=A9*/A8*/A7*/A6*A5*A4*A3*AEN ;HPI地址選通

為了防止74LVC245高阻輸出時(shí)的不穩定對/HDS1造成誤操作,使用10KΩ的電阻對/HDS1進(jìn)行上拉是必要的。

表二 PC對VC5402的I/O資源分配

I/O地址

操 作

230H對VC5402進(jìn)行復位,當寫(xiě)00H時(shí)是執行復位,當寫(xiě)入01H時(shí)是跳出復位狀態(tài)
238H寫(xiě)HPIC是第一個(gè)字節
239H寫(xiě)HPIC是第二個(gè)字節
23CH寫(xiě)HPIA是第一個(gè)字節
23DH寫(xiě)HPIA是第二個(gè)字節
23EH寫(xiě)HPID是第一個(gè)字節
23FH寫(xiě)HPID是第二個(gè)字節

三、軟件設計

1.軟件開(kāi)發(fā)步驟

基于ISA總線(xiàn)實(shí)現對VC5402的軟,軟件的關(guān)鍵在于HOST方軟件的編寫(xiě),至于VC5402的運行程序的編寫(xiě)當然不在討論的范疇。HOST方軟件所要完成的任務(wù)就是把VC5402的運行程序按照編程者事先指定好的地址進(jìn)行定位裝載然后運行。那么究竟應該把什么格式的文件裝載到VC5402的內部,又怎樣裝載呢?鑒于此,可以把HOST方軟件用下面四個(gè)步驟來(lái)概括:

⑴生成* .OUT形式的公用目標文件(COFF)。

當在TI公司的C54X集成開(kāi)發(fā)環(huán)境CCS 5000 下進(jìn)行C54X系列的程序開(kāi)發(fā)時(shí),都會(huì )經(jīng)過(guò)編譯,鏈接最后生成*.OUT文件。

⑵對*.OUT文件進(jìn)行提取,從中篩選出對最后裝載有用的代碼和地址信息。

第一步所產(chǎn)生的*.OUT文件由于是COFF格式的文件,也就是一種模塊化的經(jīng)過(guò)Bootload后就可執行的文件,它的可重定位特性使得用戶(hù)可以對程序在允許的地址范圍內靈活地安排。正因為如此,*.OUT文件還不是一個(gè)完完全全的可執行代碼,它里面包含有一些關(guān)于程序中各個(gè)段的諸如起始地址、段的長(cháng)度這樣的輔助信息,如果把這些信息連同程序代碼都裝入DSP內部,程序是不會(huì )被正常執行的。這時(shí)必須要對*.OUT進(jìn)行輔助信息與可執行代碼的提取與分離。完成這個(gè)任務(wù)是靠專(zhuān)門(mén)的程序完成的,是TI公司提供的,程序的名稱(chēng)是:Coff_both.exe。這個(gè)程序可以在TI的網(wǎng)站上免費下載,空間為120K。該程序對*.OUT文件進(jìn)行操作最后生成第三步所需的*.OUT.C的文件。

⑶把經(jīng)過(guò)提取的*.OUT.C文件按照文件提供的起始地址和程序代碼通過(guò)HPI裝載到VC5402內部。

第二步生成的*.OUT.C文件明確地告訴了程序有幾個(gè)段,每個(gè)段的大小,段的起始地址以及每個(gè)段的16進(jìn)制代碼。有了這個(gè)文件,就知道了該寫(xiě)些什么內容到VC5402里去才能夠開(kāi)始執行VC5402的程序了。接下來(lái)要做的就是通過(guò)編寫(xiě)自己的應用程序把*.OUT.C文件中的16進(jìn)制代碼通過(guò)HPI寫(xiě)入VC5402內部。

⑷把程序執行的首地址寫(xiě)入VC5402內部地址為0X007F的單元內部。

在把所有的代碼都裝載完畢后,最后必須要在VC5402內部0X007F的RAM單元內寫(xiě)入程序執行的首地址。當VC5402檢測到0X007F單元內的值為非0值時(shí),就知道HPI裝載過(guò)程已經(jīng)結束,并從0X007F單元指定的地址開(kāi)始執行程序,至此整個(gè)裝載過(guò)程結束。

2.軟件開(kāi)發(fā)實(shí)例

結合圖一的硬件電路,對照軟件開(kāi)發(fā)的每一個(gè)步驟,我們給出了一個(gè)簡(jiǎn)單的軟件開(kāi)發(fā)的例子,意在使對此感興趣的讀者能夠通過(guò)此例,真正明白用HPI進(jìn)行VC5402裝載的全過(guò)程。圖一中VC5402的XF輸出引腳接了一個(gè)發(fā)光二極管,VC5402程序的功能就是使該二極管不停的閃爍。下面按照上述的四步流程進(jìn)行:

⑴編寫(xiě)example.asm 和example.cmd 文件,用CCS 5000集成開(kāi)發(fā)軟件生成example.out文件。關(guān)于通過(guò)控制XF引腳來(lái)使發(fā)光二極管閃爍的VC5402程序的編寫(xiě),這里就不再贅述。

⑵把Coff_both.exe 和example.out文件放在同一目錄下,在DOS命令提示符下鍵入:Coff_both -out example.out 。這時(shí)就會(huì )生成example.out.c格式的文件。該文件的形式見(jiàn)圖三。這個(gè)程序只有一段程序,即.text段,這段程序一共由41個(gè)字組成,該程序段需要裝載到開(kāi)始地址為0X0080開(kāi)始的內部RAM中去運行。而這41個(gè)字的16進(jìn)制代碼則是最后真正被執行的VC5402的程序代碼。

⑶把example.out.c文件中的代碼由HPI寫(xiě)到VC5402的內部RAM中。 HOST主機軟件,需要用戶(hù)自己來(lái)編寫(xiě),可以采用VC或VB調用驅動(dòng)程序來(lái)完成,也可以通過(guò)TURB0 C 2.0直接通過(guò)I/O操作來(lái)完成,甚至可用MASM的匯編語(yǔ)言來(lái)編寫(xiě),程序的主要任務(wù)就是讀取example.out.c文件和寫(xiě)I/O端口。HOST主機軟件的流程圖見(jiàn)圖四。為了便于讀者編程驗證,我們用TURBO C 2.0編寫(xiě)了名為HOST_HPI.C的主機程序,讀者可以運行該程序來(lái)讀取example.out.c文件,把41字的代碼裝載入VC5402。使用方法如下:在DOS命令提示符下鍵入:HOST_HPI.exe后,屏幕將提示輸入example.out.c文件的路徑,例如:鍵入:C: imyprojectsexample.out.c后,HOST_HPI.exe將完成HOST裝載VC5402的任務(wù),如果看到發(fā)光二級管不停的閃爍,表明VC5402已經(jīng)開(kāi)始正常運行程序了。至此,整個(gè)裝載過(guò)程完畢。

3. HOST_HPI.C源程序

/*HOST_HPI.C*/

#include"stdio.h"

#include"dos.h"

#define SIZE 100

main()

{

FILE *fp;

Unsigned int DSP_RES,HPIC_H,HPIC_L;

Unsigned int HPIA_H,HPIA_L,HPID_H,HPID_L;

char *a,ch,filename;

unsigned int i,j,length,addr,start[10],*data;

printf("Please input the name file:");

scanf("%s",filename); /*輸入程序文件名*/

if((fp=fopen(filename,"r"))==NULL) /*打開(kāi)程序文件*/

{

printf("cannot open file:");

exit(0);

}

DSP_RES=0x240; /*設置DSP各寄存器的I/O地址*/

HPIC_H=0x230;

HPIC_L=0x231;

HPIA_H=0x234;

HPIA_L=0x235;

HPID_H=0x236;

HPID_L=0x237;

outportb(DSP_RES,0x00); /*DSP復位(DSP_RES寄存器置00H)*/

delay(2000); /*延時(shí)以保證DSP準確的復位*/

outportb(DSP_RES,0x01); /*DSP跳出復位(DSP_RES寄存器置01H)*/

outportb(HPIC_H,0x00); /*DSP的HPIC寄存器置0000H*/

outportb(HPIC_L,0x00);

i=0;

while(!feof(fp)) /*判斷程序文件是否結束*/

{

fgets(a,SIZE,fp);

fgets(a,SIZE,fp);

fscanf(fp,"%s",a);

fscanf(fp,"%s",a);

fscanf(fp,"%x",length); /*讀取數據的長(cháng)度*/

fgets(a,SIZE,fp);

fscanf(fp,"%s",a);

fscanf(fp,"%s",a);

fscanf(fp,"%x",addr); /*讀取程序的開(kāi)始地址*/

fgets(a,SIZE,fp);

fgets(a,SIZE,fp);

for(j=0;jlength;j++)

fscanf(fp,"%x,",data+j);

start[i]=addr; /*保存程序開(kāi)始地址*/

for(j=0;jlength;j++) /*為DSP裝入數據*/

{

/*給DSP的HPIA寄存器賦程序地址,先賦高位再賦低位*/

outportb(HPIA_H,addr>>8);

outportb(HPIA_L,addr0x00ff);

/*給DSP的HPID寄存器賦程序數據,先賦高位再賦低位*/

outportb(HPID_H,*(data+j)>>8);

outportb(HPID_L,*(data+j)0x00ff);

addr++; /*程序地址加1*/

}

for(j=0;j4;j++)

fgets(a,SIZE,fp);

i++; /*循環(huán)次數加1*/

}

fclose(fp); /*關(guān)閉程序文件*/

outportb(HPIA_H,0x00); /*給DSP的HPIA寄存器賦007FH*/

outportb(HPIA_L,0x7f);

/*將程序的起始地址start [0] 賦予DSP的HPID寄存器*/

outportb(HPID_H,start[0]>>8);

outportb(HPID_L,start[0]0x00ff);

printf("Write data to DSP success!"); /*返回寫(xiě)數據成功提示,程序結束*/

}

四、結論

通過(guò)本文可以看出,通過(guò)PCVC5402進(jìn)行HPI的程序裝載屬于一種基于RAM的在線(xiàn)編程,相比于使用并行或串行EEPROM進(jìn)行DSP程序裝載的方法,它不用對程序存儲器進(jìn)行燒寫(xiě),屬于一種軟。在基于PC的插卡式測試設備開(kāi)發(fā)過(guò)程中,這種方法避免了多次斷電、燒寫(xiě)程序的不便,使設備具有了在線(xiàn)開(kāi)發(fā)的特點(diǎn)。



評論


相關(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>