TMS320VC33系列講座資料開發(fā)技巧_第1頁
TMS320VC33系列講座資料開發(fā)技巧_第2頁
TMS320VC33系列講座資料開發(fā)技巧_第3頁
TMS320VC33系列講座資料開發(fā)技巧_第4頁
TMS320VC33系列講座資料開發(fā)技巧_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

TMS320VC33系列講座資料第一講VC33的電源設計這里主要結合實際項目來講解VC33的最小系統(tǒng)設計,這一講為電源電路設計,主要分為一下幾個部分進行:DSP系統(tǒng)需要的電源種類DSP系統(tǒng)電源供電的特殊要求:上電次序數(shù)字/模擬混合系統(tǒng)電源處理方法電源電路設計與器件選型電源在PCB設計時的一些注意事項1、給TIDSP供電,TIDSP有5類典型電源引腳:CPU核電源引腳,I/O電源引腳PLL電路電源引腳Flash編程電源引腳(僅C2000系列DSP有)模擬電路電源引腳(僅C2000系列DSP有)2、上電次序,CPU內核先于I/O上電,后于I/O掉電(TMS320F281X例外,剛好相反)CPU內核與I/O供電應盡可能同時,二者時間相差不能太長(一般不能>1s,否則會影響器件的壽命或損壞器件)為了保護DSP器件,應在內核電源與I/O電源之間加一肖特基二極管3、數(shù)字與模擬部分單獨供電最后通過磁珠接在一點即可4、電源電路設計主要的考慮因素用哪種類型的電源器件:轉換效率、成本和空間,輸入電壓,輸出電壓(輸出電壓是否可調、輸出電壓的路數(shù))輸出電流:控制/狀態(tài):EN控制、PowerGood狀態(tài)5、電源器件選型,這里列出一些常用的LDO,供大家在設計時選擇雙路輸出輸入電壓輸出電壓輸出電流輔助功能TPS767D318:5V3.3V/1.8V1A/1AENTPS767D301:5V3.3V/可調1A/1AEN單路輸出TPS76333:5V3.3V150mAENTPS76801:5V可調1AEN、PGTPS75701:5V可調3AEN、PGTPS75501:5V可調5AEN、PG我在做VC33設計中用到的電源器件是雙路輸出的TPS767D318。實際中的連接電路大家可以參照Datasheet。6、電源在PCB時的注意事項:數(shù)字地、模擬地分開,單點連接,強烈推薦采用多層板,為電源和地分別安排專用的層。同層上的多個電源、地用隔離帶分割,每個電源引腳附近放置10~100nF旁路濾波電容,以平滑電源的波動。在PCB四周均勻分布一些4.7~10uF大電容。旁路電容一般采用瓷片電容第二講VC33的復位監(jiān)控與時鐘電路設計一、復位監(jiān)控電路設計:為了使系統(tǒng)被復位信號正確地初始化,復位信號的脈沖寬度必須至少10個H1周期以上(即當C3x運行于33.33MHz時需要600ns)。上電之后,系統(tǒng)的振蕩器達到穩(wěn)定工作狀態(tài)需要20ms,甚至更長時間。一般上電復位時,在復位引腳上置一個100ms~200ms的低電平脈沖是比較合適的。簡單的復位電路可以采用分離器件組合而成。我的設計中采用了MAXIM公司的集成微處理器監(jiān)控復位電路MAX706s,減少了監(jiān)控電路的元器件和復雜性,并同時實現(xiàn)了復位功能。與由分離器件組裝的電路比較起來,提高了系統(tǒng)的可靠性和精確度。MAX706s是可工作在3.3V下的uP監(jiān)控電路,能夠實現(xiàn)四個方面的功能:①在電路上電、掉電與異常時產(chǎn)生一個長達200ms的復位信號;②有一個獨立的看門狗,當1.6s以上沒觸發(fā)看門狗輸入WDI時,看門狗輸出信號WDO變低;③有一個1.25V的電壓門檻檢測器,用于掉電報警、電池欠壓或監(jiān)控高于2.93V的電壓;④一個低電平有效的手動輸入MR,用以實現(xiàn)手動復位功能。大家設計復位電路時直接根據(jù)Datasheet來就可以了。MAX706s的第7腳復位輸出連接到DSP芯片的復位輸入引腳,看門狗輸入由CPLD中的邏輯控制,SW-WDT開關可選擇是否啟用電路的看門狗功能。在調試系統(tǒng)的程序時,不將看門狗輸出連接到MR腳,更易于程序的調試。(強烈建議DSP系統(tǒng)中用CPLD)二、時鐘電路設計:在講時鐘電路設計前,先講幾個基本的概念。別小看這幾個概念,很多人都沒有弄清楚的。1、晶體Crystal:晶體諧振器的簡稱,是一種壓電石英晶體器件,具有一個固有的諧振頻率,在恰當?shù)募钭饔孟?,以其固有頻率振蕩。2、振蕩電路Oscillator,為晶體提供激勵和檢測的電路。3、晶振CrystalOscillator將晶體、振蕩器和負載電容集成在一起,其輸出直接為一方波時鐘信號。4、鎖相環(huán)電路PLL用于對輸入時鐘信號進行分頻或倍頻的電路。TMS320C3x的時鐘,既可以在XOUT和XIN之間外接無源晶體利用片內振蕩器得到,也可以利用外部時鐘來提供。雖然使用片內的振蕩器比較方便而且成本也較低,但由此得到的時鐘頻率不是很穩(wěn)定,精確度不高。因此采用了外部有源晶振,晶振的時鐘信號輸入到DSP芯片的EXTCLK引腳。這時DSP芯片的XIN引腳應該接地。VC33片內有一個鎖相環(huán)(PLL)電路。PLL把由片內振蕩器產(chǎn)生的時鐘或由外部時鐘源產(chǎn)生的時鐘視作參考時鐘,然后把這一參考時鐘乘以一個比例系數(shù)后,再為芯片系統(tǒng)提供驅動時鐘。因此,時鐘源的頻率可以比CPU的頻率低。PLL的倍頻系數(shù)與功耗狀態(tài)由引腳CLKMD0、CLKMD1決定,共有四種模式。設計中將這兩引腳接高電平,在12Mhz的外部時鐘下可得到60Mhz的CPU運行頻率。第三講一、存儲器結構:VC33的總存儲器空間是16M32位字。程序、數(shù)據(jù)和I/O空間都包含在這16M字地址空間中,允許在RAM或ROM中保存表、系數(shù)、程序代碼或數(shù)據(jù)。這樣,存儲器利用最大并且可根據(jù)需要定位存儲器空間,但應注意片內可供用戶使用的存儲空間只有RAM,片內的ROM在芯片出廠時已固化了引導程序,用戶不能對其修改。VC33中可供用戶使用的片內RAM共4塊,RAM0和RAM1均為1K×32位,RAM2和RAM3各位16K×32位,4塊RAM的總容量為34K×32位。存儲器還有一塊64×32位的高速緩沖器(Cache)<這個以后單獨做專題講>,供指令快速譯碼使用,另有一塊4K×32位的ROM,存放引導程序。大家注意了:上述RAM和Cache的位置是固定的,但ROM、中斷向量以與被引導的外部程序的起始地址在16M空間中的位置是由用戶設定的存儲器工作方式?jīng)Q定的。大家看下面的關系(a)微處理器方式(b)微計算機引導方式0h中斷矢量、復位向量、陷阱矢量0h存放引導程序的片內ROM03Fh和保留單元(64)FFFh040h1000h引導1400000h引導2外部存儲空間(8M-64K)外部存儲空間(8M-4K)7FFFFFh7FFFFFh800000h800000hRAM2(16K)RAM2(16K)803FFFh803FFFh804000h804000hRAM3(16K)RAM3(16K)807FFFh807FFFh808000h808000h外圍總線存儲器映射外圍總線存儲器映射寄存器(16K)寄存器(16K)8097FFh8097FFh809800h809800hRAM0(1K)RAM0(1K)809BFFh809BFFh809C00h809C00hRAM1(1K)中斷陷阱分支指令809FC1h63809FFFh809FFFh80A000h80A000h外部存儲空間(8M-40K)FFF000h引導3外部存儲空FFFFFFhFFFFFFh間(8M-40K)總之,微處理器方式和微計算機引導方式最大的差異在于是否允許引導,如果不引導,則為微處理器方式,否則就為微計算機引導方式。在大多數(shù)情況下,程序總是放在外部ROM中的,為了實現(xiàn)程序的高速運行,必須將用戶程序由外部ROM裝載到DSP內部的高速RAM中,所以必須采用微計算機引導方式,但引導成功后,為了避免中斷向量的搬遷,可通過DSP的I/O口引腳將工作方式切換到微處理器方式。在實際中,大家可直接置為引導方式,當然做板時也可以用跳線來選擇是處理器方式還是引導方式。VC33存儲器的擴展。這里我們主要以異步存儲器為主。下面是異步存儲器接口控制信號。片選:PAGE[3:0]讀/寫控制:STRB、R/W,等待就緒:RDY.注意的問題:a、硬件信號的正確連接;b、時序的相互匹配1、SRAM的擴展:常用的SRAM:CY7C1021V33-12ZC(64K×16位、3.3V、12ns)CY7C1041V33-12ZC(256K×16位、3.3V、12ns)IS61LV25616AL-10T(256K×16位、3.3V、10ns)我用到的就是第三種,實際中我用兩片SRAM擴展為32位的。其他的信號線不用我教了吧,呵呵,這個大家都會連。2、FLASH的擴展:FLASH的基本操作:a、讀FLASH存儲單元數(shù)據(jù);b、讀FLASH狀態(tài)信息;c、扇區(qū)擦除;d、整片擦除;e、寫數(shù)據(jù)到FLASH存儲單元中常用FLASH:SST39VF400A-70-4C-EK(256K×16、3.3V、70ns)Am29LV800B(1M×8位/512K×16位、3.3V、70ns)注意Bootloader的定位就可以了。片選接PAGE1。技巧提示:數(shù)據(jù)、地址線在PCB布線時的等價交換DSP外部存儲器接口的數(shù)據(jù)總線為DD[i],存儲器芯片的數(shù)據(jù)總線為MD[j].。DSP外部存儲器接口的地址總線為DA[k]。存儲器芯片的地址總線為MA[l]。數(shù)據(jù)總線可以等價交換時:i不等于j地址總線可以等價交換時:k不等于l。注意了:SRAM的數(shù)據(jù)總線和地址總線可以等價交換,而FLASH的則不能。第四講VC33中CMD文件的寫法呵呵,又來了哦!前段時間忙著本科生的畢業(yè)設計,沒時間寫,今天我們的講課又開始咯。做好準備了嗎:-)前面主要講了一下DSP的硬件設計,讓大家大致了解了一下。從今天開始,我將向大家介紹VC33的軟件設計。這一講向大家介紹VC33中CMD文件的寫法。所謂CMD文件就是Command文件,即連接命令文件。1、段。一般來講,通用目標文件格式(COFF)一般有三種:*.obj、*.lib和*.out。1)匯編語言中的段1>未初始化段.bss——定義變量存放空間.usect——用戶自定義未初始化段2>已初始化段.text——可執(zhí)行的指令碼.data——初始化數(shù)據(jù)或表格.sect——用戶自定義段.asect——類上2)C語言中的段1>未初始化段.bss——定義變量存放空間、存放全局、靜態(tài)變量.stack——存放C中的棧.system——存放C中的堆(heap).const——存放特殊的常數(shù)、字符2>初始化段.text——指令代碼.cinit——存放全局/靜態(tài)變量執(zhí)行初始化的常數(shù)數(shù)據(jù).switch——存放C中switch語言產(chǎn)生的表格明白了嗎?呵呵。慢慢來:-)2、CMD文件1)輸入/輸出定義:-lrts30.lib-oDEMO1.out這兩項可由菜單設置。2)MEMORY命令——指令存儲空間格式如下:MEMORY{PAGE0:name1[atlr]:Origin=C1,l=C2PAGE1:…………}舉個例子:MEMORY{RAM0:O=800000h,l=8000h//片內RAM0RAM1:O=809800h,l=800h//片內RAM1RAM_EX:O=A00000h,l=1000h//片外SRAM}3)SECTIONS——描述“段”定義在哪個物理地址格式如下:SECTIONS{name:[propertry,propertry,……]}其中propertry屬性是什么?1>load——定義段存放在何處load=(或>)800100h2>run——定義段在何處運行run=(或>)800300h舉個例子:SECTIONS{.text:>RAM.bss:>RAM.stack:>RAM_EX}注意:偽指令MEMORY和SECTIONS只能大寫!下面給出一個完整的CMD文件。-w-stack400h-heap400h-lrts30.libMEMORY{RAM:o=800000h,l=8000hRAM1:o=809800h,l=800hSRAM:o=1000h,l=3efffhFLASH:o=400000h,l=3fffffh}SECTIONS{.text:>RAM.data:>RAM.bss:>RAM.cinit:>RAM.stack:>RAM1.const:>RAM}大家會了嗎?總之,CMD它是用來分配rom和ram空間用的,告訴鏈接程序怎樣計算地址和分配空間。其實要是在支持BIOS的DSP中,根本不用寫CMD文件,直接利用圖像配置界面自動生成的CMD文件即可。但是像2407和VC33不支持BIOS的DSP,只能手寫CMD文件了。第5講由于VC33的資料很少,將VC33的BootLoader講得很詳細的幾乎沒有,大家很多看了的都不明白怎么回事,我將介紹VC33BootLoader的詳細步驟,大家按照這個步驟來就OK了^_^。我們的目的是自啟動點亮LED燈,那么我們得有兩個工程文件,一個為led.mak,另一個為flash.mak,這里可以視flash工程文件為一個工具,僅僅將led工程中的某種文件導入到flash中,然后掉電重啟后由flash裝入RAM中運行,實現(xiàn)自啟動。所以我們需要做的只是要生成某種文件即bin文件。先說明一下大體的步驟。1、在led工程中編寫hex.cmd文件;2、通過hex30工具將.out文件轉化為.hex文件;3、通過hexbin工具將.hex文件轉化為.bin文件。下面給出具體的操作:第一步:我們首先要明白hex.cmd文件里面包含哪些內容,我們應該怎么來寫。下面是一個完整的hex.cmd文件。led.out//輸入coff文件-oled.hex//輸出hex文件-mapled.mxp//輸出mxp文件-i//設置為Intel格式的hex文件-boot-bootorg0-cg10f8h//設置全局控制寄存器-romwidth8//ROM字寬-memwidth8//Flash字寬-e0x8001af//程序入口地址可以看出,輸入的是led.out文件,輸出的文件有l(wèi)ed.hex和led.mxp。這里幾乎是固定的寫法,我們僅僅需要做的是查看程序的入口地址,然后改過來就可以了。如何查看程序入口地址?在led工程文件中,執(zhí)行Project—>Option—>linker,輸入生成的map文件名led.map接下來,我們led工程中打開led.map文件可以看到,led程序的入口地址為80002e,所以只需要將上述hex.cmd中最后一項改為-e80002e就行了。第二步:將out文件轉化為hex文件。使用命令提示符,輸入命令進行如下操作:這時我們看led工程中已經(jīng)生成了led.hex文件了。第三步:將hex文件轉化為bin文件。接著第二步輸入如下命令:

回車后:這時我們看到已經(jīng)生成了led.bin文件了。第四步:最后一步就是將bin文件燒到Flash中,以實現(xiàn)自啟動。下面的一個工程文件包含一個完整的Flash燒寫程序,F(xiàn)lash型號為29LV800BA,如果大家的Flash型號也是這個或兼容的,可以下載運行,當出現(xiàn)“PleaseInputyourfile:”的提示時輸入“l(fā)ed.bin”,燒寫完畢出現(xiàn)提示“OK”。\o"完整的Flash燒寫程序"完整的Flash燒寫程序第六講VC33有兩個特點:流水線操作、并發(fā)I/O和CPU操作。

流水線操作是體現(xiàn)VC33高性能的主要特征。任何一條指令都要經(jīng)過取指令、譯碼、讀操作數(shù)、執(zhí)行等4個過程,對同一條指令不能同時進行上述4個過程的操作,但可以對不同的指令同時進行這4種操作,即每一個CPU周期中,有4條指令分別處于取指令、譯碼、讀操作數(shù)和執(zhí)行階段。這種作業(yè)方式就稱為流水線操作。流水線作業(yè)不僅提高了運算和處理速度,同時也減少了總線擁擠的現(xiàn)象,提高了CPU的吞吐量。

VC33流水線結構的四個主要單元和他們的功能如下:

(1)取指令單元(F):從寄存器中取指令字并更新程序計數(shù)器(PC)。

(2)譯碼單元(D):譯碼指令字并產(chǎn)生地址。而且,在間接尋址中譯碼單元控制ARn寄存器的修改,當發(fā)生棧操作時(PUSH/POP)修改棧指針。

(3)讀操作數(shù)單元(R):從存儲器或寄存器中讀操作數(shù)。

(4)執(zhí)行單元(E):從存儲器或寄存器中讀出操作數(shù)后,執(zhí)行相應的操作,并向目的地址寫結果。

上面這個圖說明了流水線的結構,其中X、Y、W、Z代表具體的指令。我們從圖中可以看出,在第m個周期,這四個階段完全處于并行狀態(tài),即完全重疊在一起,從而進入了正常的流水線作業(yè)過程。

流水線操作中,DMA可能也要工作,這時,優(yōu)先級順序由高到低為:執(zhí)行、讀操作數(shù)、譯碼、取指令、DMA。盡管DMA控制器的優(yōu)先級最低,但可以通過合適的數(shù)據(jù)結構使DMA與CPU的沖突最少甚至消除,這時因為DMA有它自己的數(shù)據(jù)和地址線。

我們可以看到,流水線操作真正工作是在第m個周期,即完全重疊。但是如果遇到了跳轉和資源競爭等特殊情況,那么流水線操作就有可能不能完全處于重疊,這種沖突往往導致一個或幾個CPU周期中沒有任何一條指令處于被執(zhí)行的狀態(tài)。第七講DSP系統(tǒng)應用中FLASH在線編程方法摘要:介紹了在TI公司TMS320VC33DSP應用系統(tǒng)中,通過JTAG口對DSP外部FLASH存儲器實現(xiàn)在線編程的方法,給出了DSP系統(tǒng)加電后的自動裝載運行。FLASH存儲器是一種高密度、非易失性的電可擦寫存儲器,存儲量大,使用方便,適用于低功耗、高性能的系統(tǒng)。在高速DSP應用系統(tǒng)中,為了充分發(fā)揮DSP性能,在加電后需要將用戶代碼裝載到高速RAM存儲器中運行。下面介紹SST29LE020型FLASH存儲器的燒寫方法,以與如何實現(xiàn)TMS320VC33上電后用戶程序的自舉引導(Bootload)。1SST29LE020的特點與操作SST29LE020是SST公司生產(chǎn)的一種256K×8FLASH,它有10萬次以上的擦寫壽命,其內部分為2048個頁面,每個頁面128字節(jié),頁面寫周期為5ms。如果頁面中一個數(shù)據(jù)需要改變,則這個分區(qū)的所有數(shù)據(jù)必須重新裝入。FLASH支持軟件數(shù)據(jù)保護功能(SoftwareDataProtection),當執(zhí)行三字節(jié)DSP寫指令時,保護功能將自動加上,任何后續(xù)的寫操作必須帶上三字節(jié)DSP寫指令。SST29LE020的讀操作與傳統(tǒng)EPROM讀操作一致;在進行數(shù)據(jù)編程操作時,它支持內部定時(InternalTimer)、數(shù)據(jù)查詢(Data#Polling)、跳變位(ToggleBit)三種方式,以測試內部編程操作是否完成。FLASH軟件擦除指令為6字節(jié)加載指令,該指令執(zhí)行后,最多等待20ms整個芯片便被擦除,即將FLASH每個數(shù)據(jù)位都恢復為1狀態(tài)的全FF狀態(tài)。SST29LE020軟件指令序列可在SST公司的數(shù)據(jù)手冊上查到,在FLASH編程之前,需對FLASH進行擦除,擦除操作需要六個總線周期。FLASH頁面寫操作在使用內部定時方式時的流程如圖1所示。

2TMS320VC33簡介TMS320VC33是美國TI公司推出的TMS320C3X系列的32位浮點數(shù)字信號處理器,它是在TMS320C31浮點DSP的基礎上開發(fā)的一個價格更低的DSP,該產(chǎn)品具有高速、低功耗、低成本、易于開發(fā)等顯著優(yōu)點。TMS320VC33采用內部1.8V,外部3.3V供電,因而它的功耗比原有型號TMS320C31的功耗降低了大約一個整量級,而且能支持高達150M/FLOPS的運行速率。其主要特性如下:CPU是32bit的高性能CPU:可進行16/32b整數(shù)和32/40b的浮點操作;內含8個擴展精度寄存器;有2個地址發(fā)生器、8個輔助寄存器和2個輔助寄存器算術單元(ARAU)。片內存儲器為32bit指令字、24bit地址線、34K×32b(1.1Mb)的雙靜態(tài)RAM。外圍接口具有啟動程序裝載功能;內含5倍頻的鎖相環(huán)(PLL)時鐘發(fā)生器;片內存儲器可映射外設,其中包括一個串行口、兩個32bit定時器和一個DMA;具有四個內部譯碼頁選,可大大簡化TMS320VC33與I/O與存儲器的接口。3TMS320VC33程序引導功能TMS320VC33具有兩種存儲器映射方式,即MP(MicroprocessorMode)方式和MC/BL(Microcomputer/BootloaderMode)方式,兩種方式下中斷向量的位置不同。常用的是MC方式。在該方式下,MCBL/MP引腳接高電平,內部ROM被映射到000~FFF之間。這段ROM中今有器件生產(chǎn)廠家固化的引導程序(BootLoader),該引導程序可以將DSP實時運行的程序和數(shù)據(jù)從外部低速ROM或串行口裝入到高速RAM中。TMS320VC33復位后即運行內部固化的引導程序,引導程序通過查詢四個中斷引腳來確定裝入方式。這些引腳為低電平有效,查詢順序依次為INT3、INT0、INT1、INT2;當INT3有效時,為串行裝入方式;當INT0有效時,從外部地址0x001000處裝入(BOOT1);當INT1有效時,從外部地址0x400000處裝入(BOOT2);當INT2有效時,從外部地址0xfff000處裝入(BOOT3)。TMS320VC33具有四個快速頁選信號,用于對外部地址空間尋址。使用外部存儲器裝入數(shù)據(jù)時,外部存儲器數(shù)據(jù)頭位置需包含以下信息:(1)外部存儲器寬度(8/16/32位);(2)程序代碼塊的長度;(3)裝入數(shù)據(jù)的目的起始地址;(4)存儲器訪問的定時控制參數(shù)。頭信息之間是用戶的程序代碼,程序代碼按低位在前、高位在后的順序排列。程序代碼之后,必須有一個全零字,即0x00000000,用以指示引導程序用戶程序代碼已結束。引導完成后,即從裝入的目的地址處開始執(zhí)行用戶程序。4FLASH在線編程方法TMS320VC33的調試使用CCforC3x/4X(CodeCOmposer)集成編程環(huán)境,通過JTAG頭仿真用戶板,用戶代碼先放在外部RAM中調試,調試成功后,就可以將用戶程序代碼寫入FLASH了。下面介紹在并行裝入BOOT2方式下的在線編程方法。SST29LE020與TMS320VC33的連接方式比較簡單,F(xiàn)LASH片選CE引腳直接連接至TMS320VC33的PAGE1引腳;FLASH的輸出使能OE引腳的最簡單的處理方法是采用跳線方式(當向FLASH寫入數(shù)據(jù)時,接高電平;通常情況下,接地)。在調試用戶程序時,需根據(jù)用戶板的存儲器空間分配制作CMD文件,假設用戶擴展的外部RAM為32bit,起始地址為0x00c00000,長度為32K;外部FLASH起始地址為0x00400000(使用BOOT2方式),長度為256K。其CMD文件如下:MEMORY{INTRAM1:origin=0x00800000,length=0x00008000INTRAM2:origin=0x00809800,length=0x000007c1VEC:origin=0x00809fc1,length=0x3fEXTRAM:origin=0x00c00000,length=0x00008000/*32k*/FLASH:origin=0x00400000,length=0x00040000/*256*/}SECTIONS{/*用戶程序代碼與初始化數(shù)據(jù)放在外部RAM*/.vectors>VEC/*VC33規(guī)定的中斷向量地址*/.text:LOAD=EXTRAM.cinit>EXTRAM.data:RUN=EXTRAM.bss:RUN=INTRAM2.stack>INTRAM1}第一步:在CC下編譯后,裝入用戶.OUT文件,用戶程序代碼即被寫入EXRAM空間。第二步:依據(jù)TMS320VC33的BOOT格式,并根據(jù)CC產(chǎn)生的用戶.MAP文件找出程序入口地址、各加載塊的入口地址以與長度,編寫FLASH燒寫文件。示例源程序清單如下:#defineMEM_WIDE0x00000008/*Flash存儲器寬度*/#defineCG_REGISTER0x000010c8/*全局存儲器配置參數(shù)*/#defineENTER_POINT0x00c00064/*程序代碼入口地址*/volatileint*flash_add=(volatileint*)0x400000;/*外部Flash的映射地址*/#defineBOOTORG0xc00064/*.MAP文件中的程序入口地址#defineBOOTBLK3/*.MAP文件中的加載塊數(shù)量*/#defineBOOTSRC1_ADD0x00809fc1/*第1個加載塊地址*/volatileint*bootblk1_add=(volatileint*)0x00809fc1;#defineBOOTBLK1_LEN0x3a/*第1個加載塊長度*/#defineBOOTSRC2_ADD0x00C00000/*第2個加載塊地址*/volatileint*bootblk2_add=(volatileint*)0x00c00000;#defineBOOTBLAK2_LEN0xa3/*第2個加載塊長度*/#defineBOOTSRC3_ADD0x00C000a3/*第3個加載塊地址*/volatileint*bootblk3_add=(volatileint*)0x00c000a3;#defineBOOTBLK3_LEN0x17/*第3個加載塊長度*/////////////////////////////////////////////unsignedintflashaddnum,bytenum;/*定義Flash地址與頁面字節(jié)數(shù)變量*/voidwaite(intms)/****軟件1ms子程序****/{…………;}voidsdp_flash()/******軟件數(shù)據(jù)保護子程序*********/{flash_add[0x5555]=0xaa;/*3字節(jié)芯片SDP指令*/flash_add[0x2aaa]=0x55;flash_add[0x5555]=0xa0;}voidera_flash()/******擦除芯片子程序*********/{flash_add[0x5555]=0xaa;/*6字節(jié)芯片擦除指令*/flash_add[0x2aaa]=0x55;flash_add[0x5555]=0x80;flash_add[0x5555]=0xaa;flash_add[0x2aaa]=0x55;flash_add[0x5555]=0x10;waite(20);/*20ms等待芯片擦除完成*/}voidwrite_flash(intbootdata)/***寫一個int型數(shù)據(jù)***/{unsignedinti;for(i=0;i<3;i++)/*一個int型數(shù)分成四個字節(jié)寫入*/{if(bytenum==0)/*如果是頁面第1個字節(jié),先寫SDP指令*/{sdp_flash();}flash_add[flashaddnum]=bootdata;/*向Flash地址寫一個字節(jié)*/flashaddnum++;/*Flash地址加1*/bytenum++;/*頁面字節(jié)加1*/if(bytenum>127)/*一個頁面寫完,頁面字節(jié)置0,等待11ms*/{bytenum=0;waite(11);}bootdata>>=8;/*待寫數(shù)據(jù)右移8位*/}}voidmain()/***主程序***/{unsignedinti,j,lenth;bytenum=0;flashaddnum=0;/*Flash地址與頁面字節(jié)數(shù)置*/waite(1);/*等待1ms*/era_flash();/*擦除Flash芯片*/write_flash(MEM_WIDE);/*寫外部Flash存儲器寬度*/write_flash(CG_REGISTER);/*寫寄存器配置參數(shù)*/write_flash(1);/*第1個boot的數(shù)據(jù)長度為1*/write_flash()ENTER_POINT;/*寫入boot的目的地址*/write_flash(0);/*第1個boot的數(shù)據(jù)*/for(i=0;i<BOOTBLK;i++)/*分別燒寫需要boot的數(shù)據(jù)塊*/{if(i==0)/*每個數(shù)據(jù)塊燒寫的起起2字節(jié)分別是長度和源地址*/{lenth=BOOTBLK1_LEN;write_flash(BOOTHBLK1_LEN);write_flash(BOOTSRC1_ADD);}elseif(i==1){lenth=BOOTBLK2_LEN;write_flash(BOOTBLK2_LEN);write_flash(BOOTSRC3_ADD);}else{;}for(j=0;j<lenth;j++)/*將數(shù)據(jù)塊內容寫入Flash*/{if(i==0){write_flashbootblk1_add[j]};}elseif(i==1){write_flash(bootblk2_add[j]);}elseif(i==2){write_flash(bootblk3_add[j]);}else{;}}}write_flash(0);/*代碼最后位置寫全零*/write(10);/*等待10ms,保證Flash寫完成*/}第三步:修改.CMD文件SECTION段,將燒寫程序鏈接到內部RAM區(qū)。.CMD文件中SECTION段如下:SECTIONS{/*Flash燒寫代碼與初始化數(shù)據(jù)放在TMS320VC33內部RAM*/.text:LOAD=INTRAM1.bss:RUN=INTRAM1.cinit>INTRAM1.stack>INTRAM1}第四步:運行燒寫程序,用戶代碼即被寫入FLASH中,將FLASH的OE引腳跳線連通至的位置,利用CC可以查看FLASH存儲器內容是否與要燒寫的內部一致,并脫機檢驗。FLASH在線編程方法已在用戶板上得到了驗證,達到了預期的目的。通過JTAG仿真器對TMS320VC33用戶系統(tǒng)外部FLASH的在線編程,可以省去HEX轉換工具與EPROM編程器等工具,且具有方便、易行的特點。該現(xiàn)場在線編程的方法可推廣至其它系列DSP用戶系統(tǒng),是DSP開發(fā)中需要掌握的一項新技術。第八講從JTAG接口對DSP外部Flash的編程方法摘要:采用一種簡單可行的方法,在TI公司TMS320C6XDSP集成開發(fā)環(huán)境CCS2.0下,通過JTAG口實現(xiàn)對DSP外部Flash可擦寫存儲器的在線編程;將用戶數(shù)據(jù)文件燒寫到DSP的外部Flash中,并在TMS320C6711DSP板上多次測試通過。

關鍵詞:嵌入式系統(tǒng)DSPFlashJTAG在線編程CCS2.0引言

在采用TI數(shù)字信號處理器(DSP)的嵌放式硬件系統(tǒng)開發(fā)完成,軟件也有CCS2.0集成開發(fā)環(huán)境下仿真測試通過后,怎樣將編譯、鏈接后生成的可執(zhí)行文件(.Out),經(jīng)過轉換后的十六進制文件(.Hex)寫入硬件系統(tǒng)的Flash存儲器中,讓系統(tǒng)脫機運行,這是許多DSP開發(fā)人員與初學者遇到并需要解決的問題。

從JTAG接口對DSP外部Flash的編程方法不只一種。本文以TMS320C6711-150DSK板為例,介紹“在線仿真狀態(tài)下”對Flash的編程。1Flash存儲器的擦除

Flash編程之前,應對Flash進行擦除,使其每個數(shù)據(jù)位都恢復為1狀態(tài),即全FF狀態(tài)。對Flash的擦除操作需要6個總線周期,總線時序如圖1。

從圖1可知,各總線周期的操作為:

第一總線周期——向2AAAH地址的存儲單元寫入數(shù)據(jù)55H;

第二總線周期——向2AAAH地址的存儲單元寫入數(shù)據(jù)55H;

第三總線周期——向5555H地址的存儲單元寫入數(shù)據(jù)80H;

第四總線周期——向5555H地址的存儲單元寫入數(shù)據(jù)AAH;

第五總線周期——向2AAAH地址的存儲單元寫入數(shù)據(jù)55H;

第六總線周期——向5555H地址的存儲單元寫入數(shù)據(jù)10H。

完成上述操作后,F(xiàn)lash存儲器被完全擦除,內部數(shù)據(jù)恢復為初始狀態(tài),全為FFH。

在TMS320C6711中,用C語言完成上述操作為:

voiderase_flash()

{

*(unsignedvolatilechar*)FLASH_ADR1=0x00aa;

*(unsignedvolatilechar*)FLASH_ADR2=0x0055;

*(unsignedvolatilechar*)FLASH_ADR1=0x0080;

*(unsignedvolatilechar*)FLASH_ADR1=0x00aa;

*(unsignedvolatilechar*)FLASH_ADR2=0x0055;

*(unsignedvolatilechar*)FLASH_ADR1=0x0010;

}

在TMS320C6711系統(tǒng)中,F(xiàn)lash所在地址段為CE1空間,其開始地址為0x90000000。這樣,其中的FLASH_ADR1、FLASH_ADR2在頭文件中被定義為:

#defineFLASH_ADR10x90005555

#defineFLASH_ADR20x90002AAA

需要說明的是,在對Flash進行擦除時,應對DSP與EMIF外存儲器接口進行初始化,CE1空間定義為8位讀寫模式。

初始化函數(shù)如下:

voidc6x11_dsk_init(){/*DSP和EMIF初始化*/

CSR=0x100;/*禁止所有中斷*/

IER=1;/*禁止除NMI外的所有中斷*/

ICR=0xffff;/*清除所有未完成的中斷*/

*(unsignedvolatileint*)EMIF_GCR=0x3300;

*(unsignedvolatileint*)EMIF_CE0=0x30;

*(unsignedvolatileint*)EMIF_CE1=0xffffff03;

*(unsignedvolatileint*)EMIF_SDCTRL=0x07227000;

*(unsignedvolatileint*)EMIF_SDRP=0x61a;

*(unsignedvolatileint*)EMIF_SDEXT=0x54529;

}

2Flash存儲器的編程對Flash存儲器進行字節(jié)編程之前,需要對它進行3個周期的編程指令操作,總線時序如圖2。

從圖2可知,各總線周期的操作如下:

第一總線周期——向5555H地址的存儲單元寫入數(shù)據(jù)AAH;

第二總線周期——向2AAAH地址的存儲單元寫入數(shù)據(jù)55H;

第三總線周期——向5555H地址的存儲單元寫入數(shù)據(jù)A0H;

第四總線周期——向地址的存儲單元寫入編程數(shù)據(jù);

……

在TMS320C6711中,用C語言完成上述操作為:

/**/

/*入口參數(shù):pattern[]:數(shù)組,用于存儲編程數(shù)據(jù)*/

*/start_address:所要編程的起始地址指針*/

/*page_size:所要編程的Flash的頁面尺寸*/

/*出口參數(shù):無*/

/**/

voidflash_page_prog(unsignedcharpattern[],unsignedvolatilechar*start_address,intpage_size){

volatileinti;

unsignedvolatilechar*flash_ptr=start_address;

*(unsignedvolatilechar*)FLASH_ADR1=FLASH_KEY1;

*(unsignedvolatilechar*)FLASH_ADR2=FLASH_KEY2;

*(unsignedvolatilechar*)FLASH_ADR1=FLASH_KEY3;

for(i=0;i<PAGE_SIZE;I++)<P>

*flash_ptr++=pattern[i];

}

其中,F(xiàn)LASH_KEY1、FLASH_KEY2、FLASH_KEY3的定義如下:

#defineFLASH_KEY10xAA

#defineFLASH_KEY20x55

#defineFLASH_KEY30xA03校驗和的計算與編程原理

(1)校驗和的計算

在程序中,應對Flash編程的正確性進行自動檢查,把編程前數(shù)據(jù)的校驗和編程后Flash中讀出數(shù)據(jù)的校驗和進行比較:如果相同,則編程成功;如果不相同,則編程失敗。需要注意的是,在對Flash進行編程的過程中,不能用CCS2.0中的“VIEW/MEMORY…”功能看Flash中的編程數(shù)據(jù),這樣會導致一會地址編程的失敗。

其C語言程序如下:

/**/

/*入口參數(shù):start_address:所要校驗的起始地址*/

/*size_in_byte:所要校驗的Flash數(shù)據(jù)字節(jié)數(shù)*/

/*出口參數(shù):lchecksum:校驗和*/

/**/

intflash_checksum(intstart_address,intsize_in_byte){

inti;

intlchecksum;

unsignedvolatilechar*flash_ptr=(unsignedvolatilechar*)

start_address;

inttemp;

i=0;

lchecksum=0;

while(i<SIZE_IN_BYTE-4){<P>

temp=*flash_ptr++;

temp&=0xff;

lchecksum=lchecksum+temp;

i++;

}

returnlchecksum;

}

(2)編程原理

基本原理是:在仿真狀態(tài)下,在PC機上運行DSP編程軟件,由運行的DSP通過JTAG口從PC機上讀入待編程的十六進制數(shù)據(jù)文件,由DSP將其寫入到其外部Flash中,即完成用戶數(shù)據(jù)文件的燒寫工作。

4編程數(shù)據(jù)的讀入與編程編程時,由DSP程序從終端仿真計算機上打開要編程的十六進制文件,從十六進制文件中依次讀入編程數(shù)據(jù),并由DSP將其寫入到其外部Flash中,程序段如下:

while(data_flag=0){

display_count++;

if(display_count==DISPLAY_SIZE){

display_count=0;

/*printf(".");*/

}

for(i=0;i<FLASH_WRITE_SIZE;I++){<P>

j=fscanf(hex_fp,“%x”,&data);/*從文件中讀入編程數(shù)據(jù),每次取一個字節(jié)*/

if(j==EOF||j==0){

data_flag=1;

break;

}

host_buffer[i]=data;

checksum+=data;

flash_addr+=1;

if(falsh_addr>0x90020001){

printf("ERROR:beyondvalidflashaddress!");

}

}

//寫入Flash

ptr=(unsignedvolatilechar*)(flash_addr-0x80);

if(data_flasg==0){

length=FLASH_WRITE_SIXZE;

flash_page_prog(host_buffer,ptr,length);

printf("Programmingaddress:%x",flash_addr-0x80);

}

}

注意:所采用的十六進制文件應使用“Hex6x.exe”命令,并在hex.cmd命令文件中使用“-a”參數(shù)生成的文件;指定的存儲器長度必須能被128整數(shù)(len參數(shù)能被128整除)。因為AT29LV010A以扇區(qū)為操作單位,每個扇區(qū)為128字節(jié),共1024個扇區(qū),其格式如下:

-maphex.map

-a

-image

-zero

-memwidth8

ROMS

{

FLASH:org=0x90000000,len=0x20000,romwidth=8,files={test.hex}

}

5仿真運行

將上述程序組成一個完整的程序,經(jīng)過編譯、鏈接(Project/Build命令)后,使用“File/LoadProgram...”將編程代碼Load到DSP中,運行程序,經(jīng)過幾分種后即編程完畢。

結語

對DSP外部Flash編程雖不是一項關鍵技術,但它在整個DSP嵌入式系統(tǒng)開發(fā)中卻有著至關重要的作用。如果開發(fā)者在設計之初就掌握了這項技術,就會大大方便系統(tǒng)的調試,縮短開發(fā)時間。

由于篇幅所限,本文僅給出部分核心程序代碼,讀者可利用上述代碼編寫一個完整的程序。第九講DSP片外高速海量SDRAM存儲系統(tǒng)設計摘

要:介紹使用同步動態(tài)RAM(SDRAM)擴展嵌入式DSP系統(tǒng)高速超大容量外部存儲空間的設計方法;結合已成功實現(xiàn)的、基于TMS320C6201的數(shù)字信號處理系統(tǒng),論述使用IS42S16400SDRAM芯片設計DSP片外同步存儲系統(tǒng)的具體實現(xiàn)方案;詳細討論TMS320c6201的EMI與SDRAM的接口設計與編程方法。

在數(shù)字圖像處理、航空航天等高速信號處理應用場合,需要有高速大容量存儲空間的強力支持,來滿足系統(tǒng)對海量數(shù)據(jù)吞吐的要求。通過使用大容量同步動態(tài)RAM(SDRAM)來擴展嵌入式DSP系統(tǒng)存儲空間的方法,選用ISSI公司的IS42S16400高速SDRAM芯片,詳細論述在基于TMS320C6201(簡稱C6201)的數(shù)字信號處理系統(tǒng)中此設計方法的具體實現(xiàn)。1IS42S16400芯片簡介

IS42S16400是ISSl公司推出的一種單片存儲容量高達64Mb(即8MB)的16位字寬高速SDRAM芯片。SDRAM的主要特點是:①同步訪問,讀寫操作需要時鐘;

②動態(tài)存儲,芯片需要定時刷新。IS42S16400采用CMOS工藝,它的同步接口和完全流水線的內部結構使其擁有極大的數(shù)據(jù)傳輸速率,可以工作在高達133MHz的時鐘頻率下,刷新頻率每64ms為4096次。該SDRAM芯片內部有4個存儲體(bank),通過行、列地址分時復用系統(tǒng)地址總線,對不同存儲體內不同頁面的具體存儲單元進行讀寫訪問尋址。在進行讀操作之前,必須預先激活SDRAM內對應的存儲體,并選擇存儲器的某一行,然后送人列地址讀取需要的數(shù)據(jù)。從輸出列地址到SDRAM返回相應數(shù)據(jù)之間存在一個存取延遲。如果訪問新的頁面,則先需要關閉所有的存儲體,否則已打開的頁面將一直有效。在寫操作之前,由于已經(jīng)預先激活了有關的行地址,因此可以在輸出列地址的同時輸出數(shù)據(jù),沒有延遲。IS42S16400提供自刷新模式的設置,可以使芯片運行在低功耗的狀態(tài)下,從而大大減少嵌入式系統(tǒng)的功率消耗。2C6201與SDRAM的外部存儲器接口

DSP芯片訪問片外存儲器時必須通過外部存儲器接口EMlF(ExternalMemoryInterface)。C6000系列DSPs的EMIF具有很強的接口能力,不僅具有很高的數(shù)據(jù)吞吐率(最高達1200MB/s),而且可以與目前幾乎所有類型的存儲器直接接口。在C6201系統(tǒng)中,提供了4個彼此獨立的外存接口(CEX)。除CEl空間只支持異步接口外,所有的外部CEx空間都支持對SDRAM的直接接口。表1總結了C620XDSPs的EMIF所兼容的SDRAM配置。表2給出了C6000系列DSPs的EMIF所支持的SDRAM控制命令。

2.1SDRAM的刷新

為了提高存儲容量,SDRAM采用硅片電容來存儲信息。隨著時間的推移,必須給電容重新充電才能保持電容里的數(shù)據(jù)信息,這就是所謂的“刷新”。它的存在也使得SDRAM的應用變得略顯復雜,帶來了一定的應用難度。

C6000系列DSPs有專門的SDRAM控制寄存器(SDTCL)和SDRAM時序控制寄存器(SDTIM),用來進行SDRAM的各種時序控制,大大減輕了設計人員的開發(fā)難度。SDCTL寄存器中的RFEN位控制是否由EMIF完成對SDRAM的刷新。如果RFEN=1,EMIF會控制向所有的SDRAM空間發(fā)出刷新命令(REFR);而SDTIM寄存器中的PERIOD位段則控制具體的刷新周期。

在REFR命令之前,會自動插入一個DCAB命令,以保證刷新過程中所有的SDRAM都處于未激活狀態(tài)。DCAB命令之后,EMIF開始按照SDTIM寄存器中PERD字段設置的值進行定時刷新。刷新前后,頁面信息會變?yōu)闊o效。

對于C620X,EMIFSDRAM控制模塊內部有一個2位的計數(shù)器,用來監(jiān)測提交的刷新申請的次數(shù)。每提交一個申請,計數(shù)器加1;每次刷新周期之后,計數(shù)器減1。復位時,計數(shù)器自動置為11b,以保證在存取訪問之前先進行若干次刷新。計數(shù)器的值為llb,代表緊急刷新狀態(tài),此時頁面信息寄存器變無效,迫使控制器關閉當前的SDRAM頁面。然后,EMIFSDRAM控制器在DCAB命令后執(zhí)行3次REFR命令,使計數(shù)器的值減為0,再繼續(xù)完成余下的存取操作。2.2SDRAM的初始化

當某個CE空間配置為SDRAM空間后,必須首先進行初始化。用戶不需要控制初始化的每一個步驟,只需要向EMIFSDCTL寄存器的INIT位寫1,申請對SDRAM作初始化。然后,EMIF就會自動完成所需要的各步操作。初始化操作不能在進行SDRAM存取過程中進行。整個初始化過程包括下面幾個步驟:對所有的SDRAM空間發(fā)出DCAB命令;執(zhí)行3個REFR命令;對所有的SDRAM空間發(fā)出MRS命令。2.3頁面邊界控制

SDRAM屬于分頁存儲器,EMIF的SDRAM控制器會監(jiān)測訪問SDRAM時行地址的情況,避免訪問時發(fā)生行越界。為了完成這一任務,EMIF在內部有四個頁面寄存器,自動保存當前打開的行地址,然后與后續(xù)存取訪問的地址進行比較。需要說明的是,當前存取操作結束并不會引起SDRAM中已經(jīng)激活的行被立即關閉,EMIF的控制原則是維持當前的打開狀態(tài),除非必須關閉。這樣做的好處是可以減少關閉/重新打開之間的命令切換時間,使接口在存儲器訪問的控制過程中充分利用地址信息。

對于C620X,每個CE空間包含1個頁面寄存器(只對配置為SDRAM空間有效),因此C620X每個CE空間1次只能激活1頁。進行比較的地址位數(shù)取決于SDCTL寄存器中SDWID位的值。如果SDWID=O,該CE空間構成頁面的大小為512,比較的邏輯地址是位23~11;如果SDWID=1,該CE空間SDRAM構成頁面的大小為256,比較的邏輯地址是位23~10。一旦發(fā)現(xiàn)存取訪問發(fā)生了頁面越界,EMIF會自動執(zhí)行DCAB操作,然后再開始新的行訪問。2.4訪問地址的移位

由于SDRAM行邏輯地址與列邏輯地址復用相同的EMIF引腳,所以EMIF接口需要對行地址與列地址進行相應的移位處理。地址的移位處理由SDCRL寄存器中的SDWlD位控制。

另外,對于SDRAM,因為輸入地址也是控制信號,因此需要說明以下幾點:

①RAS有效期間的高位地址信號會被EMIF內部SDRAM控制器鎖存,以保證執(zhí)行READ和WRT命令時選通正確的bank;

②READ/WRT操作期間,EMIF會保持pre-charge信號為低(C620X是SDAl0),以防止READ/WRT命令執(zhí)行后發(fā)生autopre—charge操作。2.5接口時序的設計

對于C620X,EMIF與SDRAM的接口時序由SDCTL寄存器控制。EMIF提供了5個時序參數(shù),其中3個在SDCTL寄存器中

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論