日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式硬件

摘 要: TMS320VC5410的程序空間通常被限制在64K地址空間內(nèi),當(dāng)應(yīng)用程序超出64K時(shí),則需增加目標(biāo)系統(tǒng)存儲(chǔ)區(qū)和附加邏輯,實(shí)現(xiàn)對(duì)系統(tǒng)的擴(kuò)展。介紹了如何配置及使用DSP/BIOS接口來實(shí)現(xiàn)擴(kuò)展尋址功能,分析了API函數(shù)調(diào)用和中斷觸發(fā)過程,并以DSP并行自舉引導(dǎo)方式實(shí)現(xiàn)程序的脫離仿真運(yùn)行。

關(guān)鍵詞: DSP/BIOS 擴(kuò)展尋址 API 并行自舉引導(dǎo)

1 DSP/BIOS 接口

DSP/BIOS接口提供了基本的運(yùn)行服務(wù),如應(yīng)用程序?qū)崟r(shí)分析功能、時(shí)鐘周期函數(shù)、I/O模塊、優(yōu)先級(jí)的任務(wù)調(diào)度等。DSP/BIOS接口提供支持匯編語言和C語言的API接口函數(shù),這些API函數(shù)絕大部分都是用匯編語言實(shí)現(xiàn)的,因此匯編語言可以直接調(diào)用API,而C語言調(diào)用API則要通過DSP/BIOS的C封裝器。應(yīng)用程序通過調(diào)用API函數(shù)來使用DSP/BIOS接口,如軟件中斷、背景線程和中斷服務(wù)程序等都可以調(diào)用DSP/BIOS的函數(shù)。當(dāng)DSP/BIOS要調(diào)用用戶的C語言函數(shù)時(shí),則要通過函數(shù)鏈接器,如圖1所示。

2 擴(kuò)展程序空間

TMS320VC5410的16位地址空間被劃分為兩塊,低地址塊定義為公共區(qū)(或未映射區(qū)),高地址塊定義為映射區(qū)(或擴(kuò)展區(qū))。這兩塊的地址由目標(biāo)系統(tǒng)的外部寄存器和存儲(chǔ)區(qū)決定。值得注意的是,TMS320VC5410的數(shù)據(jù)區(qū)沒有擴(kuò)展存儲(chǔ)區(qū)。

用戶可以在映射區(qū)上定義多個(gè)物理存儲(chǔ)區(qū),它們覆蓋整個(gè)映射區(qū),但彼此間不重疊。當(dāng)使用存儲(chǔ)區(qū)的擴(kuò)展頁時(shí),內(nèi)部16位地址空間被擴(kuò)展為32位的地址進(jìn)行尋址,高16位代表擴(kuò)展頁的數(shù)目,低16位代表局部的16位地址。如使用擴(kuò)展程序映射存儲(chǔ)器(XPC)存放擴(kuò)展頁碼,則XPC存放在數(shù)據(jù)空間地址為0x1E的位置,它的值要與.CMD鏈接文件中定義的擴(kuò)展頁碼保持一致。圖2所示的是一個(gè)擴(kuò)展3頁的程序區(qū)結(jié)構(gòu)圖。公共區(qū)的范圍是0x0000~0x7FFF;映射區(qū)的范圍是0x8000~0xFFFF;映射區(qū)為第一頁,XPC要為0才能訪問該區(qū);映射地址空間存放兩個(gè)擴(kuò)展頁,擴(kuò)展程序映射寄存器限定了映射地址,使得每個(gè)擴(kuò)展頁的每個(gè)單元具有唯一的地址。當(dāng)訪問擴(kuò)展頁時(shí),映射區(qū)將被覆蓋。

TMS320VC5410的DSP/BIOS不僅支持64K程序頁內(nèi)的“近”訪問模式,而且支持?jǐn)U展程序的“遠(yuǎn)”訪問模式,只需設(shè)置DSP/BIOS的屬性即可實(shí)現(xiàn)擴(kuò)展程序的“遠(yuǎn)”訪問。要注意的是,匯編語言寫的API只能在PAGE0頁調(diào)用,而C語言寫的API可以在任何頁面調(diào)用。

3 中 斷

當(dāng)中斷產(chǎn)生時(shí),DSP的內(nèi)部結(jié)構(gòu)機(jī)制只能保存低16位頁內(nèi)的局部地址,而擴(kuò)展尋址時(shí)程序地址需要23位,這就意味著調(diào)用和返回時(shí)將超出64K(16位地址)的范圍,因此必須考慮怎樣保存和恢復(fù)擴(kuò)展地址。解決的方法是用中斷服務(wù)程序(ISR)保存XPC的值,確保能正確計(jì)算中斷向量,為此中斷向量表必須放在公共區(qū)或映射區(qū)的64K程序頁面上。當(dāng)DSP/BIOS在公共區(qū)上時(shí),ISR可以放在任何位置;如果不在公共區(qū)上,則ISR必須放在PAGE0上。

當(dāng)OVLY=0時(shí),為了能保證中斷正確執(zhí)行,必須在每一個(gè)頁面上都要有中斷向量表的拷貝。當(dāng)OVLY=1時(shí),只需在公共頁面上(如0x7F80)作一份中斷向量表的拷貝就可以了。

4 程序?qū)嵗?/p>

下面通過一個(gè)簡單的例子介紹DSP/BIOS如何實(shí)現(xiàn)程序地址的擴(kuò)展。本例中有三個(gè)軟中斷:時(shí)鐘中斷PRD_POST_SWI,每100ms觸發(fā)SWI_PAGE1(或SWI_PAGE2)一次;SWI_PAGE1,完成置XF高;SWI_PAGE2,完成置XF低。三個(gè)軟中斷執(zhí)行的函數(shù)分別放在程序空間的不同頁面上,即PRD_Post_SWI放在公共頁面上(XPC=0),Page1Func和Page2Func分別放在擴(kuò)展程序頁面1和2上(XPC為1和2)。

#include “testfarcfg.h”

#pragma CODE_SECTION(Page1Func,“.FarPage1”)

#pragma CODE_SECTION(Page2Func,“.FarPage2”)

int pagenumber;

void main(void) {pagenumber=0;}

void Page2Func (void) {asm(“rsbx xf”);pagenumber=0;}

void Page1Func (void) {asm(“ssbx xf”);pagenumber=1;}

void PRD_Post_SWI(void)

{ if(pagenumber) SWI_post(&SWI_PAGE2);

else SWI_post(&SWI_PAGE1);

}

5 DSP/BIOS的配置

如要把DSP/BIOS的程序映射到擴(kuò)展程序空間,需要對(duì)其進(jìn)行配置,步驟如下:

(1)建立一個(gè)新配置文件。啟動(dòng)仿真軟件(Code Composer Studio),建立testfar.pjt工程,通過File中的New ——DSP/BIOS Config創(chuàng)建配置文件,選用sd54.cdb(54X EVM)配置。

(2)添加軟件中斷。右鍵打開軟件中斷管理器(Software Interrupt Manager),選擇Insert SWI,創(chuàng)建SWI_PAGE1,屬性配置為:function:_Page1Func;priority:2。用同樣的方法創(chuàng)建function為_Page2Func的SWI_PAGE2。右鍵打開定時(shí)器功能管理器(Periodic Function Manager),選擇Insert PRD,創(chuàng)建PRD_POST_SWI,屬性配置為:period(ticks):50,function:_ PRD_Post_SWI,mode:continuous。

(3)設(shè)置OVLY位為1。打開System中的Global Settings的屬性頁,在PMST(6~0)項(xiàng)中填入使第5位為1的值,如MP=1,填入0x60。

(4)指定“遠(yuǎn)”調(diào)用模式。在Global Settings屬性頁面的Function Call Model選項(xiàng)中選擇far,使全局變量Callmodel設(shè)置為far。

(5)在公共區(qū)中重新分配中斷向量表。雙擊System中的MEM,右鍵打開VECT 的屬性頁,在base項(xiàng)中填入新的基地址,如0x7F80。

(6)配置擴(kuò)展程序地址段。對(duì)于54X EVM評(píng)估板,已經(jīng)有了兩個(gè)擴(kuò)展程序段EPROG0和EPROG1(如果沒有的話,則需添加這兩個(gè)段,選擇Insert MEM,添加兩個(gè)擴(kuò)展程序段,重命名為EPROG0和EPROG1)。EPROG0屬性為base:0x8000,len:0x4000,勾去create a heap in this memory選項(xiàng),space:code;EPROG1與EPROG0的屬性不同之處為base:0x18000。加入一個(gè)新的擴(kuò)展程序段EPROG2,屬性為base:0x28000,len:0x4000,space:code。

(7)將目標(biāo)代碼鏈接到擴(kuò)展程序段。pragma偽指令告訴編譯器的預(yù)處理器如何處理函數(shù),語法為#pragma CODE_SECTION(Page1Func,“.FarPage1”),在名為“.FarPage1”的段中分配Page1Func的程序空間。這樣,目標(biāo)代碼Page1Func就被鏈接到.FarPage1段的區(qū)域。

(8)創(chuàng)建一個(gè)新的鏈接命令文件(testfar.cmd)。其主要功能是把testfarcfg.cmd鏈接進(jìn)去,并且告訴鏈接器把不同目標(biāo)函數(shù)放在不同的擴(kuò)展頁面上。如:

-ltestfarcfg.cmd

SECTIONS

{ .FarPage1:{} > EPROG1 PAGE 0

.FarPage2:{} > EPROG2 PAGE 0

}

(9)保存配置文件為testfar.cdb,然后將testfar.cdb,testfar.cmd、testfar.c文件加入工程中。

(10)配置編譯器和匯編器支持遠(yuǎn)模式代碼。打開菜單Project中的Build Options窗體,選擇Compiler屬性頁,點(diǎn)擊Category中的Advanced選項(xiàng),勾選Use Far Calls (-mf)(C548 and higher)。此選項(xiàng)指定產(chǎn)生遠(yuǎn)調(diào)用代碼模式。

(11)在調(diào)試器內(nèi)描述并激活擴(kuò)展尋址功能。仿真器的調(diào)試軟件需要激活擴(kuò)展尋址功能才能支持長指令的執(zhí)行和擴(kuò)展存儲(chǔ)區(qū)的讀/寫,方便地對(duì)使用擴(kuò)展尋址的程序進(jìn)行調(diào)試。所以使用通用擴(kuò)展函數(shù)GEL_XMDef()來定義映射寄存器(如XPC)和映射擴(kuò)展空間的首地址。如當(dāng)OVLY=1時(shí),擴(kuò)展程序區(qū)從0x8000開始,7位XPC放置在數(shù)據(jù)空間的0x1E單元中,并把下面兩條語句加入到C5410.gel文件的C5410_Init()函數(shù)中。

GEL_XMDef(0,0x1e,1,0x8000,0x7f);

//0:映射程序空間;0x1e:XPC的地址;1:XPC 在數(shù)據(jù)空間中;

//0x8000:映射首地址;0x7f:XPC的大小,128頁;

GEL_XMOn(); //使能擴(kuò)展地址映射

6 DSP/BIOS函數(shù)調(diào)用和中斷觸發(fā)過程

6.1 DSP/BIOS函數(shù)調(diào)用過程

DSP/BIOS API 調(diào)用過程如圖3中的實(shí)線所示。具體過程如下:

(1)產(chǎn)生PRD_F_swi,短調(diào)用C語言封裝器的PRD_F_swi (),XPC=0。

(2)C語言封裝器觸發(fā)PRD_POST_SWI時(shí)鐘軟中斷,然后檢測SWI_PAGE1,產(chǎn)生執(zhí)行DSP/BIOS調(diào)度表的分支。

(3)DSP/BIOS調(diào)度表保存當(dāng)前PRD_POST_SWI上下文信息,調(diào)用函數(shù)鏈接器以觸發(fā)SWI_PAGE1。

(4)函數(shù)鏈接器遠(yuǎn)調(diào)用SWI_PAGE1,執(zhí)行相應(yīng)的函數(shù)(Page1Func),XPC=1。

(5)SWI_PAGE1執(zhí)行結(jié)束,遠(yuǎn)返回函數(shù)鏈接器。

(6)函數(shù)鏈接器又返回到DSP/BIOS調(diào)度表。

(7)DSP/BIO調(diào)度表恢復(fù)PRD_POST_SWI信息,返回到C語言封裝器。

(8)執(zhí)行上述(1)和(2),第(3)步觸發(fā)SWI_PAGE2,函數(shù)鏈接器遠(yuǎn)調(diào)用SWI_PAGE2,執(zhí)行函數(shù)(Page2Func),XPC=2。

(9)SWI_PAGE2執(zhí)行結(jié)束,遠(yuǎn)返回函數(shù)鏈接器,然后順序執(zhí)行上述的第(6)和(7)。

6.2 中斷觸發(fā)過程

中斷觸發(fā)過程如圖3中的虛線所示。

(1)PRD_F_swi發(fā)生,CPU把當(dāng)前的16位PC指針壓入堆棧,在中斷向量表中取指令。

(2)中斷向量程序把當(dāng)前的XPC壓入堆棧,產(chǎn)生一個(gè)配置中斷服務(wù)程序的分支指令,執(zhí)行中斷服務(wù)程序,XPC=0。

(3)中斷服務(wù)程序調(diào)用HWI_enter,觸發(fā)PRD_POST_SWI軟中斷,接著調(diào)用HWI_exit,HWI_exit檢測到SWI_PAGE1準(zhǔn)備好,開始調(diào)用DSP/BIOS調(diào)度表。

(4)DSP/BIOS調(diào)度表保存當(dāng)前的上下文信息,調(diào)用函數(shù)鏈接器以觸發(fā)SWI_PAGE1。

(5)函數(shù)鏈接器遠(yuǎn)調(diào)用SWI_PAGE1,執(zhí)行相應(yīng)的函數(shù),此時(shí)XPC=1。SWI_PAGE1執(zhí)行完,遠(yuǎn)返回調(diào)用函數(shù)鏈接器,再到DSP/BIOS調(diào)度表,調(diào)度表恢復(fù)上下文信息,把程序指針交給PRD_POST_SWI軟中斷。PRD_POST_SWI結(jié)束。

(6)執(zhí)行上述(1)、(2)步后,第(3)步檢測到SWI_PAGE2準(zhǔn)備好,第(4)步觸發(fā)SWI_PAGE2,第(5)步函數(shù)鏈接器遠(yuǎn)調(diào)用SWI_PAGE2,XPC=2,順序執(zhí)行下去,直到PRD_POST_SWI結(jié)束。

7 并行自舉引導(dǎo)的實(shí)現(xiàn)

TMS320VC5410上電復(fù)位后,檢查到DSP處于MC(微計(jì)算機(jī))工作方式,從片內(nèi)ROM的0FF80h起執(zhí)行程序。0FF80h地址存放的是中斷向量表,它實(shí)為一條分支轉(zhuǎn)移指令(BD 0F800h),使程序跳轉(zhuǎn)至0F800h執(zhí)行自舉引導(dǎo)程序(Bootlooader)。并行自舉引導(dǎo)是DSP自舉引導(dǎo)常用的一種方式,Bootlooader首先從地址為0FFFFh的I/O口讀取自舉表首地址的內(nèi)容,如果此內(nèi)容不符合8位或16位的引導(dǎo)方式,就從地址為0FFFFh的數(shù)據(jù)存儲(chǔ)器讀取,進(jìn)行8位或16位并行自舉引導(dǎo)。若要完成自舉引導(dǎo)功能,必須建立正確的自舉表。

自舉表的內(nèi)容不僅包括欲加載的各段代碼,而且包括各段代碼的長度、各代碼段存放的目標(biāo)地址、程序入口地址等信息。自舉表可由hex500格式轉(zhuǎn)換器自動(dòng)生成。hex500是一個(gè)通用程序,它將公共目標(biāo)文件格式—COFF文件轉(zhuǎn)換成各種FLASH(或EPROM)的編程格式。因此,在使用hex500工具之前,首先把testfar.pjt進(jìn)行編譯、鏈接,生成COFF格式的testfar.out文件,然后再通過設(shè)置適當(dāng)?shù)倪x項(xiàng)生成用戶所要求的自舉表,如轉(zhuǎn)換文件的格式、外部數(shù)據(jù)存儲(chǔ)器的字寬等選項(xiàng)。把testfar.out轉(zhuǎn)換為testfar.hex文件后,再使用C語言編寫一個(gè)轉(zhuǎn)換程序,將hex文件轉(zhuǎn)換為DSP燒寫FLASH程序能識(shí)別的文件格式。根據(jù)文件信息就可以完成自舉表的內(nèi)容,如表1所示。最后使用FLASH的擦除、讀寫等操作指令把表1的內(nèi)容燒入FLASH中。DSP上電復(fù)位,便可完成并行自舉引導(dǎo)。

整個(gè)引導(dǎo)過程為:上電復(fù)位后,判斷MP/MC=0處于微計(jì)算機(jī)工作方式,從片內(nèi)ROM的0FF80h處執(zhí)行中斷向量表的分支轉(zhuǎn)移指令(BD 0F800h),使程序跳轉(zhuǎn)至0F800h處執(zhí)行自舉引導(dǎo)程序。自舉引導(dǎo)程序完成初始化后讀取數(shù)據(jù)空間的0FFFFh地址的內(nèi)容,找到自舉表首地址8000h,從8000h處開始讀取內(nèi)容,首先是16位自舉標(biāo)記(10AA),然后分別是寄存器SWWSR及BSCR的內(nèi)容、程序入口地址、代碼段長度、存放代碼段的目標(biāo)地址等信息,根據(jù)這些信息把FLASH中的8008H~A594H的程序搬運(yùn)到片內(nèi)RAM中,然后把Page1Func和Page2Func的代碼搬運(yùn)到0x180000和0x28000處,最后跳轉(zhuǎn)至片內(nèi)RAM的26FDH,即PC為26FDH,XPC為0,開始執(zhí)程序。這樣即完成程序的并行自舉過程。

使用DSP/BIOS可以很好地實(shí)現(xiàn)擴(kuò)展尋址功能,把程序燒寫入FLASH后,復(fù)位DSP使其處于MC工作方式,便可使用示波器測試XF引腳,觀察程序運(yùn)行正確與否。

參考文獻(xiàn)

1 張雄偉,陳 亮,徐光輝. DSP集成開發(fā)與應(yīng)用實(shí)例.北京:電子工業(yè)出版社,2002.6

2 Interrupt Handling Using Extended Addressing of theTMS320C54x Family. Application Report SPRA492,1998.11

3 TMS320VC5410 Bootloader. SPRA609A Copyright (c).TI,April 2000

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉