摘 要: TMS320VC54x系列DSP的內(nèi)部ROM固化了一個(gè)稱為Bootloader程序,。在DSP上電時(shí)Bootloader將外部Flash中的用戶程序搬移到DSP的片上RAM或片外RAM程序區(qū)中,并將程序指針指向用戶程序運(yùn)行時(shí)的首地址執(zhí)行。在16 bit并行自舉方式下,,DSP提供的這個(gè)Bootloader程序要求用戶程序代碼長(zhǎng)度不能超過(guò)32 KB,。文介紹了一種用戶Bootloader的設(shè)計(jì)方法,通過(guò)二次自舉可實(shí)現(xiàn)對(duì)應(yīng)用程序代碼長(zhǎng)度超過(guò)32 KB的加載。
關(guān)鍵詞: TMS320VC54x,;數(shù)字信號(hào)處理器,;自舉;二次自舉
TMS320VC54x系列DSP上電時(shí),,需要通過(guò)掩膜在DSP片上ROM的Bootloader(自舉)程序完成對(duì)用戶應(yīng)用程序的加載過(guò)程,,即DSP上電后自動(dòng)將固化在Flash中的應(yīng)用程序讀入到DSP的片上RAM或片外RAM映射成的存儲(chǔ)區(qū)間的一個(gè)過(guò)程[1]。由于片上Bootloader程序在外擴(kuò)Flash并行自舉方式下,用戶應(yīng)用程序可執(zhí)行代碼長(zhǎng)度不能超過(guò)32 KB,所以在實(shí)際應(yīng)用中常常會(huì)遇到可執(zhí)行代碼超過(guò)32 KB的問(wèn)題,。因此,,用戶必須設(shè)計(jì)自己的Bootloader程序,通過(guò)二次自舉的方法完成對(duì)應(yīng)用程序的自舉。
1 TMS320VC54x系列DSP的自舉
1.1 自舉方式
TI公司的TMS320VC54x系列DSP所提供的自舉功能非常強(qiáng)大,,它支持多種自舉方式,,可以滿足用戶多種不同的需求。
這些方式包括串行口(標(biāo)準(zhǔn)串口,、時(shí)分串口,、緩沖串口)輸入方式、并行口輸入方式,、HPI口輸入方式,、I/O口等方式。此外,,按照數(shù)據(jù)進(jìn)入DSP時(shí)的字長(zhǎng)又分為8 bit方式和16 bit方式[2]8-11,。
1.2 自舉過(guò)程
當(dāng)MP/MC=0時(shí),TMS320C54x被置于微計(jì)算機(jī)模式,。上電或復(fù)位時(shí),,程序指針指向片內(nèi)ROM區(qū)的0xff80單元。該單元放置了一條跳轉(zhuǎn)指令,,使程序跳轉(zhuǎn)到0xf800單元,,而0xf800單元的內(nèi)容就是Bootloader引導(dǎo)程序的起始地址。Bootloader將存放在外部Flash中的應(yīng)用程序搬移到DSP內(nèi)部或外部的RAM區(qū),,搬移完成后跳轉(zhuǎn)到該程序的入口處執(zhí)行,。存放在外部Flash的用戶程序與一些必要的引導(dǎo)信號(hào)組合在一起稱為自舉表。自舉表內(nèi)容不僅包括了欲加載的各段代碼,而且包括各段代碼長(zhǎng)度,、各代碼段存放的目標(biāo)地址,、程序入口地址等信息。TMS320VC54x 系列DSP的自舉表結(jié)構(gòu)[3]如表1所示,。
2 用戶Bootloader設(shè)計(jì)
2.1 外擴(kuò)Flash并行自舉的局限性及解決方法
采用外擴(kuò)Flash的16 bit并行自舉是一種比較方便的使用方式,。由于TMS320VC54x DSP系列CPU的數(shù)據(jù)空間只有64 KB,其中低端32 KB(地址從0000h-7fffh)映射到內(nèi)部,,映射到外部數(shù)據(jù)空間的只有高端32 KB(地址從8000h-ffffh),。TI掩膜自舉程序的處理方式是僅在這32 KB空間內(nèi)進(jìn)行尋址搬移[4]。如果用戶應(yīng)用程序超過(guò)了32 KB,,則無(wú)法完成自舉過(guò)程,。
文中設(shè)計(jì)的TMS320VC5410A目標(biāo)平臺(tái)采用的Flash為39VF800,存儲(chǔ)容量512 KB×16 bit,,用來(lái)存儲(chǔ)超過(guò)32 KB的用戶主程序,。由于TI的5410 ADSP的外部數(shù)據(jù)空間只有32 KB(地址從8000h-ffffh)。因此,,將Flash分為16頁(yè),,每頁(yè)32 KB,重用8000h-ffffh地址空間,。頁(yè)編號(hào)從0開(kāi)始,在訪問(wèn)Flash時(shí)需要先指定頁(yè)號(hào),,然后讀取數(shù)據(jù),。將用戶自舉程序放在Flash上電默認(rèn)頁(yè)(即第0頁(yè))的最后2 KB,因此需要在Flash的第0頁(yè)的ffffh位置寫(xiě)上F800h,。用戶自舉程序從F800h開(kāi)始連續(xù)存放,。fffdh中存放主程序常用區(qū)起始頁(yè),供Bootloader程序?qū)ぶ?,F(xiàn)lash資源分配示意如表2所示,。
2.2 二次自舉
所謂二次自舉是指上電時(shí)CPU片上自舉程序首先將用戶的自舉程序搬移到片內(nèi)RAM中運(yùn)行,用戶自舉程序取得控制權(quán)后,再將用戶的應(yīng)用程序自舉到RAM中運(yùn)行,。由于用戶自舉程序是自己編制的,,在需要時(shí)可以控制Flash換頁(yè),因此也就突破了32 KB的限制,。
2.3 可自舉文件的生成
用戶的自舉過(guò)程完全仿照TI的處理方法,,只是增加了處理超過(guò)32 KB時(shí)的尋址切換問(wèn)題。首先,利用CCS5000的集成開(kāi)發(fā)環(huán)境編寫(xiě)調(diào)試自舉程序和應(yīng)用程序,,并生成 .out文件[5],。然后利用TI公司提供的Hex轉(zhuǎn)換工具Hex500.exe程序?qū)?out文件轉(zhuǎn)換為ASCII碼文件,生成的ASCII碼文件是一個(gè)嚴(yán)格按照自舉表格式排列的可執(zhí)行代碼。同時(shí)生成的還有該文件的MAP文件,,可以從MAP表中找到程序的入口地址[2]352-380,用戶需將ASCII碼文件進(jìn)一步轉(zhuǎn)換為二進(jìn)制文件,,最后,將二進(jìn)制的用戶自舉程序和用戶主程序分別燒寫(xiě)到Flash中相應(yīng)的位置(如表1所示)即可,。
可以利用編程器對(duì)Flash進(jìn)行燒寫(xiě),。此外,CCS5000的集成開(kāi)發(fā)環(huán)境提供了豐富的BIOS函數(shù),使得文件讀寫(xiě)變得極為方便。用戶也可以自己編寫(xiě)Flash的文件燒結(jié)程序,,并通過(guò)仿真器將用戶程序燒制到Flash中,。
2.4用戶Bootloader實(shí)現(xiàn)
如圖1所示,用戶的自舉程序需要完成CPU初始化,、自舉表格式實(shí)現(xiàn),、Flash讀寫(xiě)操作、Flash分頁(yè)切換等工作,。當(dāng)?shù)刂吩黾佑?xffffh變?yōu)?x0000h時(shí),則表明地址溢出,需要換頁(yè),。自舉程序從數(shù)據(jù)空間讀取用戶主程序數(shù)據(jù)寫(xiě)入到程序空間,搬移完畢后,,用戶自舉程序?qū)⒖刂茩?quán)交給用戶主程序,,從而完成自舉過(guò)程。
TMS320VC54x系列DSP具有低功耗,、高速度和多總線結(jié)構(gòu),,在嵌入式開(kāi)發(fā)中具有廣泛的應(yīng)用。本文介紹的二次自舉方法,可以很好地解決用戶程序代碼超過(guò)32 KB的問(wèn)題,,這種方法具有較好的通用性和實(shí)用性,,對(duì)DSP的技術(shù)開(kāi)發(fā)人員有一定的參考啟發(fā)。
參考文獻(xiàn)
[1] 張勇,陳天麒.C/C++語(yǔ)言硬件程序設(shè)計(jì)——基于TMS320VC54x系列DSP[M].西安:西安電子科技大學(xué)出
版社,2003:205-207.
[2] 劉益成.TMS320VC54x DSP應(yīng)用程序設(shè)計(jì)與開(kāi)發(fā)[M]. 北京:北京航空航天大學(xué)出版社,2002.
[3] 自動(dòng)化在線. TMS320VC54x DSP在線燒寫(xiě)Flash存儲(chǔ)器并實(shí)現(xiàn)自舉引導(dǎo)的方法[J/OL]. (2009-4-21)[2011-11-25].http://www.autooo.net/classid124-id45154.html.
[4] 鄭紅,,吳冠.TMS320VC54x DSP應(yīng)用系統(tǒng)設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,,2002.
[5] 尹勇,歐光軍,,關(guān)榮鋒.DSP集成開(kāi)發(fā)環(huán)境CCS開(kāi)發(fā)指南[M].北京:北京航空航天大學(xué)出版社,,2003.