時(shí)間:2013-02-18 15:57:48來(lái)源:董賢君
1 引言
空瓶檢測(cè)機(jī)的機(jī)器視覺(jué)系統(tǒng)分為基于PC機(jī)、基于DSP和基于智能相機(jī)三種結(jié)構(gòu)。不論哪種結(jié)構(gòu),成像系統(tǒng)都是采用高速工業(yè)相機(jī)和光學(xué)照明系統(tǒng)對(duì)被檢測(cè)對(duì)象進(jìn)行清晰成像,然后圖像進(jìn)行后續(xù)的轉(zhuǎn)換和處理?;谥悄芟鄼C(jī)的嵌入式系統(tǒng),將圖像的采集、傳輸、處理都在智能相機(jī)內(nèi)部完成,系統(tǒng)集成化程度高,處理速度快,但是專(zhuān)用性強(qiáng),開(kāi)發(fā)周期長(zhǎng)。目前,主要應(yīng)用的是前兩種方式。
在對(duì)瓶口和瓶底圖像的處理中使用了包括低通濾波、邊緣提取等算法,這些卷積算法需要進(jìn)行大量的乘加運(yùn)算,而且要求很高的圖像處理速度。結(jié)合處理器速度和片上外設(shè)的要求,板上的處理器采用德州儀器(TI)的TMS320VC5502高性能數(shù)字信號(hào)處理器。
本文首先介紹了VC5502DSP的特點(diǎn),然后介紹了系統(tǒng)時(shí)鐘、擴(kuò)展內(nèi)存接口、串行通信接口等外設(shè)接口,闡述了啟動(dòng)模式和目標(biāo)程序內(nèi)存空間定址等內(nèi)容,最后給出了擴(kuò)展程序內(nèi)存的燒寫(xiě)時(shí)序。
2 VC5502DSP簡(jiǎn)介
2.1 TMS320VC5502的特點(diǎn)
TMS320VC5502是一款定點(diǎn)數(shù)DSP,它的主要特征:
基于高性能,低功耗的TMS320C55x的CPU內(nèi)核。3-/5-ns的指令周期,300/200MHz的時(shí)鐘速率;16K字節(jié)指令緩存;600/400兆次/秒的乘累加運(yùn)算(MMACS)。
內(nèi)部總線結(jié)構(gòu)包括1條內(nèi)部程序總線,3條內(nèi)部數(shù)據(jù)讀總線,2條內(nèi)部數(shù)據(jù)寫(xiě)總線。沒(méi)有外部總線競(jìng)爭(zhēng)時(shí),可以在一個(gè)時(shí)鐘內(nèi)實(shí)現(xiàn)三次數(shù)據(jù)讀和兩次數(shù)據(jù)寫(xiě),并行度很高。
兩個(gè)40位乘累加單元(MAC),每個(gè)都可在一個(gè)時(shí)鐘周期內(nèi)實(shí)現(xiàn)一次17bit×17bit運(yùn)算,一個(gè)40位的算術(shù)邏輯單元(ALU)輔以一個(gè)16位的算術(shù)邏輯單元。
使用可變長(zhǎng)度指令增加指令密度,指令單元(IU)每次取指32bit放入程序單元(PU)進(jìn)行排隊(duì)。PU進(jìn)行指令譯碼,執(zhí)行指令,分配任務(wù)到地址單元(AU)和數(shù)據(jù)單元(DU),并且維護(hù)完全保護(hù)性指令流水線。分支預(yù)測(cè)技術(shù)減少因?yàn)闂l件指令造成指令流水線的刷新。
EMIF接口提供對(duì)異步EPROM、SRAM、SDRAM和異步突發(fā)式SRAM(SBSRAM)的無(wú)縫連接。程序內(nèi)存和數(shù)據(jù)內(nèi)存統(tǒng)一編址,支持8M16位字的內(nèi)存空間,分為四個(gè)區(qū)域(CE)。
另外,TI還提供了一系列開(kāi)發(fā)工具和開(kāi)發(fā)包,包括eXpressDSP,CodeComposerStudio,DSP/BIOS,TI標(biāo)準(zhǔn)算法庫(kù),信號(hào)處理算法庫(kù),視頻和圖像處理算法庫(kù)等,提高了用戶的開(kāi)發(fā)效率。
2.2 系統(tǒng)時(shí)鐘設(shè)置
TMS320VC5502可以使用外部晶振和內(nèi)部的振蕩器作為時(shí)鐘源,也可以直接使用外部的時(shí)鐘源。VC5502內(nèi)部具有鎖相環(huán),可以被使能或旁路,上電復(fù)位時(shí)鎖相環(huán)缺省被旁路。DSP的時(shí)鐘源由復(fù)位時(shí)GPIO4引腳的狀態(tài)決定。
TMS320VC5502分為四個(gè)時(shí)鐘組:C55x核系統(tǒng)時(shí)鐘組,快速外設(shè)時(shí)鐘組,慢速外設(shè)時(shí)鐘組和EMIF接口時(shí)鐘組,分別對(duì)應(yīng)CLKOUT3、SYSCLK1、SYSCLK2、SYSCLK3四個(gè)內(nèi)部時(shí)鐘信號(hào)。快速外設(shè)時(shí)鐘SYSCLK1主要提供給DMA和HPI接口使用,慢速外設(shè)時(shí)鐘SYSCLK2在本應(yīng)用中主要供I2C模塊使用,EMIF接口時(shí)鐘SYSCLK3用作內(nèi)存訪問(wèn)時(shí)鐘。
在本圖像處理卡中,使用頻率為200MHz的MK1711作為外部時(shí)鐘源,MK1711是德州儀器推薦的DSP外部時(shí)鐘。GPIO4引腳在復(fù)位時(shí)接高電平,其狀態(tài)會(huì)被bootloader檢測(cè)并將CLKMD[0]位置1。
當(dāng)EMIF模塊使用內(nèi)部時(shí)鐘作為時(shí)鐘源時(shí),SYSCLK3的頻率必須小于或等于100MHz;當(dāng)EMIF模塊使用外部時(shí)鐘源時(shí),SYSCLK3的頻率必須小于或等于SYSCLK1,但是外部時(shí)鐘源CLKIN的頻率必須小于100MHz。SYSCLK2的頻率必須小于或等于SYSCLK1的頻率。
在本應(yīng)用中,系統(tǒng)正常工作時(shí)使用的各個(gè)時(shí)鐘的頻率如下表1:
修改C55x子系統(tǒng)時(shí)鐘控制寄存器(PLLCSR),PLL分頻寄存器(PLLDIV0)和PLL倍頻器(PLLM),需要遵從一定的順序。本系統(tǒng)修改如下:
1) 將PLLCSR的PLLEN位清零,使PLL處于旁路狀態(tài);
2) 將PLLCSR的PLLRST位置位,使PLL進(jìn)入復(fù)位狀態(tài);
3) 清零PLLDIV0的D0EN位,不使能PLL分頻器;
4) 修改PLLDIV0寄存器的分頻數(shù)值為100b;
5) 置位PLLDIV0的PLLEN位,使能PLL分頻器;
6) 修改PLLM寄存器的倍頻數(shù)值為100b;
7) 延時(shí)1微秒(仍按原來(lái)頻率計(jì));
8) 清零PLLCSR的PLLRST位,使鎖相環(huán)脫離復(fù)位狀態(tài);
9) 輪詢PLLCSR的LOCK位,直到該位為1表示鎖相成功,鎖相環(huán)具有穩(wěn)定的頻率輸出;
10) 將PLLCSR的PLLEN位置1,使系統(tǒng)進(jìn)入鎖相環(huán)使能模式。
缺省時(shí),SYSCLKx這三個(gè)時(shí)鐘的分頻系數(shù)都是4,為了加快訪問(wèn)外設(shè)的速度,需要進(jìn)行修改。在修改相應(yīng)的PLLDIVx寄存器時(shí),TI推薦首先使相應(yīng)接口進(jìn)入IDLE狀態(tài),以避免外設(shè)訪問(wèn)發(fā)生錯(cuò)誤。
通過(guò)修改PLLDIV1=2使SYSCLK1時(shí)鐘頻率運(yùn)行在100MHz;PLLDIV2使用缺省值4不作修改,SYSCLK2運(yùn)行在50MHz;修改PLLDIV3=2使EMIF接口時(shí)鐘SYSCLK3運(yùn)行在100MHz。
ECLKOUTx兩個(gè)時(shí)鐘僅在使用同步動(dòng)態(tài)內(nèi)存和同步突發(fā)式SRAM時(shí)需要,使用異步SRAM時(shí)不需要。為了減少電磁干擾,將此兩個(gè)時(shí)鐘引腳關(guān)閉,可以通過(guò)設(shè)置EMIF全局控制寄存器EMIFGCRx的EKxEN和EKxHZ為0來(lái)完成。
為了加快啟動(dòng)加載過(guò)程,鎖相環(huán)和各外設(shè)時(shí)鐘分頻寄存器可以在加載應(yīng)用程序代碼前通過(guò)啟動(dòng)表格由bootloaer做修改。但是在啟動(dòng)表格中無(wú)法進(jìn)行步驟6中LOCK位的輪詢,為此可以采用一定的延時(shí)(如1微秒),只要保證PLL能夠成功鎖相有穩(wěn)定頻率輸出即可。相應(yīng)命令文件代碼參見(jiàn)啟動(dòng)表格結(jié)構(gòu)節(jié)。
2.3 擴(kuò)展內(nèi)存接口EMIF
EMIF接口支持CPU/DMA對(duì)外部數(shù)據(jù)的8位、16位、32位訪問(wèn),支持的外設(shè)包括異步內(nèi)存(SRAM、ROM、FLASH內(nèi)存),同步動(dòng)態(tài)內(nèi)存(SDRAM)和同步突發(fā)式SRAM(SBSRAM)。內(nèi)存字節(jié)順序只支持大端模式。
在圖像處理卡中,EMIF的CE1內(nèi)存空間接DSP的程序FLASH,CE2空間通過(guò)CPLD內(nèi)存切換模塊接SRAM,內(nèi)存訪問(wèn)參考時(shí)鐘選擇ECLKOUT1,時(shí)鐘頻率100MHz。
EMIF可編程控制異步內(nèi)存的時(shí)序,這些時(shí)序參數(shù)是通過(guò)各個(gè)內(nèi)存空間的CExCTL寄存器實(shí)現(xiàn)的。主要參數(shù)有:
1) 建立時(shí)間(SETUP):指從內(nèi)存訪問(wèn)周期開(kāi)始到讀或?qū)戇x通信號(hào)有效的時(shí)間。最小值為1,對(duì)于一次單一或突發(fā)訪問(wèn)的幾次連續(xù)訪問(wèn)的第一個(gè)訪問(wèn),SETUP最小值為2;
2) 選通時(shí)間(STOBE):讀或?qū)戇x通信號(hào)從有效到無(wú)效的時(shí)間,最小值為1。
3) 保持時(shí)間(HOLD):指讀或?qū)戇x通信號(hào)從失效到訪問(wèn)周期結(jié)束的時(shí)間,留作地址總線的變化時(shí)間,最小值可以為0;
這些時(shí)間參數(shù)以SYSCLK3(ECLKOUT1)為基準(zhǔn)。EMIF為每個(gè)CE內(nèi)存空間的讀和寫(xiě)訪問(wèn)提供獨(dú)立的SETUP、STOBE、HOLD時(shí)間。
EMIF每次總是進(jìn)行32位讀寫(xiě),對(duì)于16位寬度的內(nèi)存,進(jìn)行連續(xù)兩個(gè)16位讀寫(xiě),TMS320VC5502的EMIF對(duì)16位寬度內(nèi)存的讀寫(xiě)時(shí)序圖如圖1。
圖1 (a)EMIF接口16位寬度異步內(nèi)存讀時(shí)序
圖1 (b)EMIF接口16位寬度異步內(nèi)存寫(xiě)時(shí)序
EMIF會(huì)在對(duì)同一個(gè)CE內(nèi)存空間單一讀或突發(fā)讀操作結(jié)束后自動(dòng)加上一個(gè)CE讀保持時(shí)間,該時(shí)間不能編程控制,其大小與最后一個(gè)讀保持時(shí)間的和為12個(gè)SYSCLK3時(shí)鐘周期(如圖1a);寫(xiě)內(nèi)存操作時(shí),會(huì)在對(duì)同一個(gè)CE內(nèi)存空間的單獨(dú)寫(xiě)或突發(fā)寫(xiě)操作結(jié)束后自動(dòng)加上一個(gè)CE寫(xiě)保持時(shí)間,該時(shí)間同樣不能編程控制,其大小與所有SETUP、STOBE、HOLD時(shí)間的和最小為11(如圖1b),當(dāng)所有SETUP、STOBE、HOLD時(shí)間的和大于11時(shí),CE寫(xiě)選通時(shí)間為0。
在本圖像處理卡中,DSP程序存儲(chǔ)器FLASH采用SST半導(dǎo)體的SST39VF400A。SST39VF400A是NORFLASH,程序代碼可以直接在其中運(yùn)行,為256Kb×16布局,共4Mbit。整個(gè)內(nèi)存分為256個(gè)區(qū)域塊,讀訪問(wèn)周期70ns。根據(jù)EMIF啟動(dòng)方式要求,SST39VF400A配置在CE1內(nèi)存空間,16位字地址空間為200000H-23FFFFH。復(fù)位后,DSP的啟動(dòng)加載代碼根據(jù)啟動(dòng)表格將外部FLASH中的用戶應(yīng)用程序代碼加載到內(nèi)部RAM中,然后跳轉(zhuǎn)到程序入口點(diǎn)執(zhí)行。
為了使這些參數(shù)能夠在加載外部程序代碼時(shí)起作用,這些參數(shù)必須在啟動(dòng)表格中通過(guò)bootloader進(jìn)行修改,要注意保證足夠的延時(shí),使輸出時(shí)鐘穩(wěn)定。DSP的外部擴(kuò)展SRAMCY7C1061AV33的配置在CE2內(nèi)存空間,作為圖像內(nèi)存,16位字地址空間為400000H-4FFFFFH。對(duì)于讀CY7C1061AV33操作,不使用VC5502EMIF的/ARE引腳,直接用/AOE和CY7C1061AV33的/OE引腳連接,則此時(shí)地址信號(hào)、片選/CE1、輸出允許/OE會(huì)同時(shí)給出,此時(shí)CY7C1061AV33處于連續(xù)讀狀態(tài),數(shù)據(jù)的輸出只受地址總線的控制。地址總線變化時(shí),便給出相應(yīng)單元的數(shù)據(jù)。CY7C1061AV33的讀時(shí)序如圖2。
圖2 CY7C1061AV33內(nèi)存讀時(shí)序
計(jì)算出讀操作SETUP=1,STOBE=1,HOLD=0即可滿足讀操作時(shí)序要求。
對(duì)于CY7C1061AV33寫(xiě)操作,本應(yīng)用使用/WE和/OE控制方式且/OE保持高電平。由CY7C1061AV33寫(xiě)時(shí)序圖可知,CE2CTL的寫(xiě)操作SETUP=1,STOBE=1,HOLD=0可以滿足SRAM寫(xiě)時(shí)序要求。如圖3所示。
配置CE2CTL如下(MTYPE=0001b,表16位寬度異步SRAM)
圖3 CE2CTL寄存器設(shè)置
因?yàn)樵谙到y(tǒng)啟動(dòng)加載過(guò)程中沒(méi)有對(duì)CE2內(nèi)存空間SRAM的訪問(wèn),所以可以通過(guò)十六進(jìn)制轉(zhuǎn)換命令文件和十六進(jìn)制轉(zhuǎn)換工具將CE2CTL記錄在啟動(dòng)表格中,由Bootloader來(lái)做修改。
2.4 啟動(dòng)引導(dǎo)模式
VC5502的片內(nèi)ROM有幾個(gè)預(yù)編程的分區(qū),其上包括如下代碼或內(nèi)容:
啟動(dòng)加載程序;啟動(dòng)模式跳轉(zhuǎn)表;Sin函數(shù)值查找表;中斷向量表。
啟動(dòng)加載程序通過(guò)啟動(dòng)模式跳轉(zhuǎn)表跳轉(zhuǎn)到相應(yīng)的啟動(dòng)模式執(zhí)行代碼,啟動(dòng)模式的選擇由系統(tǒng)復(fù)位時(shí)BOOTM[2:0]的狀態(tài)決定。BOOT[2:0]與啟動(dòng)模式的關(guān)系如下表2:
表2BOOT[2:0]與啟動(dòng)模式的關(guān)系
本項(xiàng)目中,選擇BOOTM=[2:0],采用EMIF口16位擴(kuò)展Flash啟動(dòng)方式。復(fù)位時(shí),ST3狀態(tài)寄存器的MPNMC位會(huì)被清零,指示片上ROM被映射到FF_8000-FF_FFFFh。CE1內(nèi)存空間會(huì)被配置為16位寬度異步內(nèi)存,啟動(dòng)加載代碼從其中加載用戶程序代碼到內(nèi)部RAM并跳轉(zhuǎn)到入口點(diǎn)執(zhí)行。
啟動(dòng)過(guò)程中,TMS320VC5502會(huì)采樣GPIO4、GPIO6和GPIO7引腳的狀態(tài),這些引腳的狀態(tài)決定EMIF時(shí)鐘源和復(fù)用接口的選擇。復(fù)位時(shí)GPIO4、GPIO6和GPIO7引腳的狀態(tài)對(duì)系統(tǒng)配置的影響如表3所示:
表3 GPIO4、GPIO6、GPIO7與系統(tǒng)配置的關(guān)系
2.5 目標(biāo)程序定位和啟動(dòng)表格生成
DSP目標(biāo)程序內(nèi)存空間映射由用戶通過(guò)鏈接命令文件生成,可由十六進(jìn)制轉(zhuǎn)換工具根據(jù)轉(zhuǎn)換命令文件生成下載文件或者編輯內(nèi)存空間映射。
2.5.1 目標(biāo)程序定位
程序的定位方式有三種:編譯時(shí)定位、鏈接時(shí)定位和加載時(shí)定位。DSP系統(tǒng)采用鏈接時(shí)定位,編譯器將整個(gè)程序區(qū)分為數(shù)個(gè)節(jié),并以地址0開(kāi)始為節(jié)區(qū)定址,鏈接器將同名節(jié)合并,并按照鏈接命令文件(.cmd)中的節(jié)命令進(jìn)行實(shí)際的定位。
鏈接命令文件用于指示鏈接器如何生成存儲(chǔ)器映象文件(.map)和可執(zhí)行輸出文件(.out)(COFF目標(biāo)模塊)。鏈接命令文件主要指示鏈接器完成兩個(gè)功能:第一,如何將輸入節(jié)合并為輸出節(jié);第二,如何將輸出節(jié)定位到實(shí)際的存儲(chǔ)空間中。鏈接命令文件通過(guò)MEMORY和SECTIONS兩個(gè)命令實(shí)現(xiàn)上述功能。MEMORY命令用于描述系統(tǒng)實(shí)際的硬件資源;SECTIONS命令用于描述節(jié)如何定位到適當(dāng)?shù)挠布Y源上,在該命令中可以定義節(jié)的加載地址和運(yùn)行地址。
在CCS的編譯選項(xiàng)卡中選擇編譯器類(lèi)型為55x;在鏈接選項(xiàng)卡中的自動(dòng)初始化方式中選擇運(yùn)行時(shí)初始化,這會(huì)讓鏈接器生成運(yùn)行時(shí)用填充數(shù)據(jù)初始化.bss數(shù)據(jù)節(jié)的代碼;在鏈接選項(xiàng)卡的map文件名中輸入文件名生成鏈接映射文件,用于檢查編譯、鏈接和定址結(jié)果。
編譯鏈接工程后會(huì)生成COFF格式可執(zhí)行文件,這個(gè)文件是可執(zhí)行文件映像,并不是直接在內(nèi)存中運(yùn)行代碼的轉(zhuǎn)儲(chǔ)(dump),需要利用hex55.exe將其中的節(jié)數(shù)據(jù)信息抽取出來(lái),結(jié)合hex55的命令腳本文件,重新將數(shù)據(jù)以啟動(dòng)表格的形式組織在hex文件中,然后下載到FLASH,TMS320VC5502啟動(dòng)后,片上bootloader將其加載到RAM上運(yùn)行。
2.5.2 啟動(dòng)表格生成
啟動(dòng)加載程序加載Flash上程序代碼是通過(guò)加載表格來(lái)完成的,使用啟動(dòng)表格增強(qiáng)了啟動(dòng)加載代碼對(duì)不同加載模式的獨(dú)立性。它包含COFF文件格式中程序節(jié)、數(shù)據(jù)節(jié)等節(jié)信息和寄存器設(shè)置等信息。啟動(dòng)表格由十六進(jìn)制轉(zhuǎn)換工具根據(jù)轉(zhuǎn)換命令文件和鏈接輸出文件生成。其結(jié)構(gòu)如圖4。
32位程序入口地址是程序被bootloader加載進(jìn)內(nèi)部RAM后,程序執(zhí)行流程的跳轉(zhuǎn)地址。
32位寄存器配置數(shù)目是需要在啟動(dòng)加載中加載應(yīng)用程序前需要配置的IO內(nèi)存映射寄存器和延時(shí)的數(shù)目。
16位寄存器地址是要配置的寄存器的地址,后面是16位的配置值;若寄存器修改需要延時(shí),可以用0xFFFF延時(shí)標(biāo)記,后面跟著延時(shí)時(shí)鐘數(shù)。
32位節(jié)字節(jié)數(shù)目表示程序節(jié)、數(shù)據(jù)節(jié)等節(jié)長(zhǎng)度(按字節(jié)計(jì));
32位節(jié)開(kāi)始地址表示相應(yīng)節(jié)的其實(shí)地址,后面緊跟著該節(jié)的內(nèi)容,開(kāi)頭或末尾會(huì)有0字節(jié)32位邊界對(duì)齊,以加快數(shù)據(jù)的加載速度。各節(jié)依次排列。
圖4 啟動(dòng)表格結(jié)構(gòu)
32位全0字節(jié)數(shù)目,表示達(dá)到末尾節(jié),已經(jīng)沒(méi)有要加載的節(jié)。
Bootloader會(huì)在加載外部程序和數(shù)據(jù)節(jié)之前對(duì)注冊(cè)在啟動(dòng)表格中的寄存器做修改。這個(gè)特性提供了修改系統(tǒng)時(shí)鐘配置以加快代碼加載速度和在執(zhí)行用戶代碼前正確配置EMIF接口內(nèi)存空間參數(shù)的機(jī)會(huì)。
在腳本文件中,寄存器修改使用reg_config選項(xiàng)來(lái)實(shí)現(xiàn),格式為
-reg_configREG_ADDRREG_VALUE;
延時(shí)使用delay選項(xiàng)來(lái)實(shí)現(xiàn),格式為
-delayDELAY_COUNT。
HEX55.exe十六進(jìn)制轉(zhuǎn)換工具可以讀取轉(zhuǎn)換命令文件和編譯輸出文件,構(gòu)造出正確的啟動(dòng)表格。本圖像處理卡上,在啟動(dòng)過(guò)程中需要修改的寄存器主要有鎖相環(huán)PLL寄存器、外設(shè)系統(tǒng)時(shí)鐘分頻寄存器、EMIF接口CExCTL寄存器。轉(zhuǎn)換命令文件代碼如下:
−boot ;option to create a boot table
−v5510:2 ;use C55x boot table format for TMS320VC5502
−parallel16 ;boot mode is 16-bit external async mem
;to shut down ECLKOUTx
-reg_config 0x0800 0x271C
-reg_config 0x0801 0x0008
-delay 0x80
;to config PLL registers
-reg_config 0x1C80 0x0048 ;PLLCSR
-delay 0x100
-reg_config 0x1C8A 0x0000 ;PLLDIV0
-delay 0x80
-reg_config 0x1C8A 0x1003
-delay 0x100
-reg_config 0x1C88 0x0004 ;PLLM
-delay 0x80
-reg_config 0x1C80 0x0040 ;PLLCSR.PLLRST=0
-delay 0x100
-reg_config 0x1C80 0x0041 ;PLLCSR.PLLEN=1
-delay 0x80
;to config PLLDIVx registers
-reg_config 0x1C8C 0x1001 ;PLLDIV1
-delay 0x80
-reg_config 0x1C90 0x1001 ;PLLDIV3
-delay 0x80
;to config EMIF CExCTL registers
-reg_config 0x0802 0xC211
-delay 0x80
-reg_config 0x0803 0xFFF3
-delay 0x80
-reg_config 0x0808 0xC110
-delay 0x80
-reg_config 0x0809 0x1081
-delay 0x80
.............
−x ;desired output format is Tektronix format
−o bottlecheck.hex ;specify the output filename
bottlecheck.out ;specify the input file
運(yùn)行hex55.exe生成.hex十六進(jìn)制下載文件,通過(guò)FlashBurn程序?qū)⒛繕?biāo)代碼下載到擴(kuò)展程序內(nèi)存中。
3 外圍模塊設(shè)置
3.1 I2C模塊設(shè)置
I2C總線是飛利浦公司發(fā)起的二線制串行總線。TMS320VC5502上的I2C模塊完全兼容飛利浦I2C總線規(guī)范(2.1版本),可以用來(lái)實(shí)現(xiàn)對(duì)THS8083A內(nèi)部寄存器的初始化。I2C總線連接非常簡(jiǎn)單,直接將VC5502和THS8083A的SCL和SDA引腳對(duì)應(yīng)連接即可。由于I2C總線是開(kāi)漏極輸出,所以需要在SCL和SDA總線上接上拉電阻。在本應(yīng)用中,VC5502工作在主發(fā)送模式,THS8083A只能工作在從發(fā)送模式,采用400kbps的傳輸速度。
I2C模塊的輸入時(shí)鐘為SYSCLK2,I2C模塊的模塊時(shí)鐘使用10MHz,輸出的主時(shí)鐘SCL使用400KHz,相關(guān)寄存器設(shè)置如下:
*I2CPSC = 0x0004;
*I2CCLKL = 0x0007;
*I2CCLKH = 0x0008;
TMS320VC5502產(chǎn)生數(shù)據(jù)傳輸?shù)钠鹗嘉缓屯V刮唬蒊2C命令寄存器I2CMDR設(shè)置;TMS320VC5502的I2C模塊的本地地址寄存器I2COAR設(shè)置為0x0001,THS8083A的地址在TMS320VC5502的I2C模塊中的從地址寄存器I2CSAR中設(shè)置為0x0020;I2C模塊通過(guò)中斷方式向C55x核表明數(shù)據(jù)發(fā)送完畢,中斷允許寄存器I2CIER設(shè)置為0x0010。THS8083A共有35個(gè)寄存器需要初始化,I2C模塊共需發(fā)送70個(gè)字節(jié),設(shè)置在I2CCNT中。相應(yīng)設(shè)置代碼如下:
*I2CMDR = 0x2E00
*I2CMDR = 0x2E20 ; I2CMDR.IRS=1
*I2COAR = 0x0001
*I2CSAR = 0x0020
*I2CIER = 0x0010
*I2CCNT = 0x0046
將THS8083A的內(nèi)部寄存器的地址和寄存器初始化值作為constshort類(lèi)型全局?jǐn)?shù)組,直接用寄存器的地址和數(shù)據(jù)初始化數(shù)組單元,則每個(gè)地址或數(shù)據(jù)占存儲(chǔ)單元的高八位,低八位填充為0。
在TMS320VC5502的I2C中斷處理程序中檢查中斷原因I2CISRC,重置中斷標(biāo)志I2CSTR寄存器中的發(fā)送結(jié)束中斷標(biāo)志位,檢查并更新THS8083A寄存器表格指針,將數(shù)據(jù)填入發(fā)送寄存器I2CDXR經(jīng)I2CXSR移位發(fā)送出去,直至到達(dá)寄存器表格結(jié)尾,屏蔽I2C模塊中斷。寄存器I2CDXR只有低八位有效,高八位是保留的,寫(xiě)入數(shù)據(jù)會(huì)被舍棄,將全局?jǐn)?shù)組中的16位值寫(xiě)入該寄存器,數(shù)據(jù)就會(huì)通過(guò)I2C總線正確發(fā)送出去。中斷處理程序片斷如下:
void c_int02(void)
{
......
if(I2Ctblptr == I2Ctblend)
{
*I2CIER = 0x0010 ;disenable the interrupt
}
if((*I2CISRC) & 0x0005)
{
*I2CDXR = *I2Ctblptr++;
*I2CSTR &= XRDYMASK;
}
......
}
3.2 UART模塊和GPIO的配置
VC5502處理完每副圖像后,以串行通訊和通用輸入輸出口兩種方式輸出圖象處理的結(jié)果。通用輸出口僅已電平的方式給出圖像對(duì)應(yīng)的檢測(cè)對(duì)象是否合格,串口通訊可以輸出關(guān)于不合格處的更多信息。
TMS320VC5502的UART口使能時(shí),SP1、SP3分別作為串口通訊的發(fā)送線和接收線。在此選用MAX232與UART相連接構(gòu)成RS232串行通訊方式,輸出圖像處理結(jié)果。DSPUART的數(shù)據(jù)接收端RXD連接至MAX232的接收輸出端R1OUT,UART的數(shù)據(jù)發(fā)送端TXD連接至MAX232的發(fā)送輸入端。
設(shè)置串口發(fā)送速率19200bps,1位起始位和1位停止位,8位數(shù)據(jù)位,無(wú)校驗(yàn)。設(shè)置VC5502的UART工作于輪詢FIFO發(fā)送方式,當(dāng)圖像處理結(jié)果積累到設(shè)定個(gè)數(shù)時(shí),通過(guò)串口發(fā)送出去。相關(guān)寄存器初始化如下:
*URDLL = 0x00A3;
*URFCR = 0x00B9;
//wait for some time
*URFCR = 0x00BC;
*URLCR = 0x0003;
4 JTAG調(diào)試接口
TMS320VC5502提供JTAG接口對(duì)DSP進(jìn)行在線調(diào)試,JTAG是IEEE1149.1國(guó)際標(biāo)準(zhǔn),廣泛應(yīng)用于嵌入式系統(tǒng)的在系統(tǒng)調(diào)試。
JTAG標(biāo)準(zhǔn)包括邊界掃描和測(cè)試訪問(wèn)。邊界掃描的基本思想是在靠近芯片的輸入輸出引腳上增加一個(gè)稱(chēng)為邊界掃描寄存器的移位寄存器單元,當(dāng)芯片處于調(diào)試狀態(tài)時(shí),邊界掃描寄存器可以將芯片和外界輸入輸出隔離。通過(guò)這些邊界掃描寄存器,可以實(shí)現(xiàn)對(duì)芯片輸入輸出信號(hào)的觀察和控制。在正常運(yùn)行狀態(tài)下,這些邊界掃描寄存器對(duì)芯片是透明的。而且,芯片輸入輸出引腳上的邊界掃描寄存器單元可以相互連接起來(lái)形成一條邊界掃描鏈。一般芯片都會(huì)提供幾條獨(dú)立的邊界掃描鏈,用來(lái)實(shí)現(xiàn)完整的測(cè)試功能。邊界掃描鏈可以串行地輸入輸出數(shù)據(jù),通過(guò)相應(yīng)的時(shí)鐘和控制信號(hào),可以方便地觀察和控制被調(diào)試的芯片。邊界掃描鏈屬于JTAG標(biāo)準(zhǔn)兩種寄存器中的數(shù)據(jù)寄存器,另一種寄存器是指令寄存器,后者用來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)寄存器的控制。測(cè)試訪問(wèn)端口(TAP)是一個(gè)通用端口,通過(guò)測(cè)試訪問(wèn)端口可以訪問(wèn)到芯片提供的所有數(shù)據(jù)寄存器和指令寄存器。對(duì)整個(gè)TAP的控制通過(guò)TAP控制器實(shí)現(xiàn)的。TAP總共包括五個(gè)信號(hào)接口:TMS、TCK、TDI、TDO和TRST,也就是所謂的JTAG接口[31-34]。
在圖像處理卡電路板上設(shè)計(jì)14口的JTAG接口。
需要注意的問(wèn)題有:
1) VC5502的Emu0,Emu1引腳需要上拉;
2) 為了保證好的TCK信號(hào),在TCK上加去噪電路;
3) 在3.3VDSP中,PD腳為3.3V供電,但是仿真器上需要5V電壓供電,所以仿真器需要單獨(dú)供電。
5 擴(kuò)展Flash燒寫(xiě)
本應(yīng)用中通過(guò)TI的FlashBurn軟件和FBTC目標(biāo)組件完成SST39VF400A的燒寫(xiě)。FlashBurn通過(guò)內(nèi)部協(xié)議和目標(biāo)DSP通信,將用十六進(jìn)制轉(zhuǎn)換工具得到的hex文件下載到片上RAM中,然后通過(guò)FBTC程序核將目標(biāo)代碼燒寫(xiě)到FLASH中。
SST39VF400A具有內(nèi)部編程邏輯電路,可以方便的完成扇區(qū)擦除、塊擦除、片擦除和字、字節(jié)編程等操作,具有/WE控制編程周期和/CE控制編程周期兩種方式,使用/WE控制編程周期方式時(shí),地址和數(shù)據(jù)分別在/WE的下降沿和上升沿被鎖存,然后內(nèi)部燒寫(xiě)程序啟動(dòng),將數(shù)據(jù)編程到相應(yīng)地址單元中。SST39VF400A的寫(xiě)時(shí)序圖如圖5所示。
VC5502處理完每副圖像后,以串行通訊和通用輸入輸出口兩種方式輸出圖象處理的結(jié)果。通用輸出口僅已電平的方式給出圖像對(duì)應(yīng)的檢測(cè)對(duì)象是否合格,串口通訊可以輸出關(guān)于不合格處的更多信息。
TMS320VC5502的UART口使能時(shí),SP1、SP3分別作為串口通訊的發(fā)送線和接收線。在此選用MAX232與UART相連接構(gòu)成RS232串行通訊方式,輸出圖像處理結(jié)果。DSPUART的數(shù)據(jù)接收端RXD連接至MAX232的接收輸出端R1OUT,UART的數(shù)據(jù)發(fā)送端TXD連接至MAX232的發(fā)送輸入端。
設(shè)置串口發(fā)送速率19200bps,1位起始位和1位停止位,8位數(shù)據(jù)位,無(wú)校驗(yàn)。設(shè)置VC5502的UART工作于輪詢FIFO發(fā)送方式,當(dāng)圖像處理結(jié)果積累到設(shè)定個(gè)數(shù)時(shí),通過(guò)串口發(fā)送出去。相關(guān)寄存器初始化如下:
圖5 SST39VF400A內(nèi)存編程時(shí)序
結(jié)合VC5502的寫(xiě)異步內(nèi)存的時(shí)序圖圖1b可以設(shè)置燒寫(xiě)FLASH時(shí)的CE1CTL寄存器的值。SST39VF400A在編程前必須首先進(jìn)行扇區(qū)擦除或塊擦除或片擦除操作。由于SST39VF400A具有硬件和軟件數(shù)據(jù)保護(hù)機(jī)制,要進(jìn)行擦除和編程操作,必須首先使用相應(yīng)的命令序列,然后對(duì)相應(yīng)單元進(jìn)行操作。擦除和寫(xiě)命令序列如表4:
SST39VF400A在擦除和編程過(guò)程中,對(duì)于內(nèi)存單元的讀操作不會(huì)返回該單元的內(nèi)容,而是會(huì)返回內(nèi)部狀態(tài)寄存器的內(nèi)容,該寄存器的數(shù)據(jù)查詢位DQ7和數(shù)據(jù)翻轉(zhuǎn)位DQ6可以用來(lái)判斷擦除或編程操作是否結(jié)束。
DQ7在編程過(guò)程中返回的是被讀內(nèi)存單元第7位的補(bǔ)碼,編程結(jié)束后返回被讀單元相應(yīng)位的原碼;在擦除過(guò)程中總是返回0,擦除操作結(jié)束后返回被讀單元相應(yīng)位的值。在編程和擦除過(guò)程中DQ6,返回的則是1和0的交錯(cuò)翻轉(zhuǎn);編程和擦除結(jié)束后返回被讀單元的相應(yīng)位。本應(yīng)用中使用DQ6來(lái)檢測(cè)編程和擦除操作是否結(jié)束,程序片斷如下
void Check_Toggle_Ready (short *Dst)
{
......
PreData = *Dst;
PreData = PreData & 0x4040;
while ((TimeOut< 0x07FFFFFF) && (Loop))
{
CurrData = *Dst;
CurrData = CurrData & 0x4040;
if (PreData == CurrData)
Loop = FALSE; /* ready to exit the while loop */
PreData = CurrData;
TimeOut++;
}
}
SST39VF400A的燒寫(xiě)和擦除算法在閃存燒寫(xiě)目標(biāo)組件(FBTC)的源文件中實(shí)現(xiàn),其中有兩個(gè)主要函數(shù):BurnFlash()函數(shù)和EraseFlash()函數(shù)。BurnFlash函數(shù)讀取被燒寫(xiě)hex文件,然后發(fā)送燒寫(xiě)地址和數(shù)據(jù)到FBTC模塊,直至達(dá)到燒寫(xiě)要求的字節(jié)數(shù);EraseFlash函數(shù)發(fā)送命令給SST39VF400A執(zhí)行扇區(qū)或塊或片擦除命令。
VC5502復(fù)位后,以HPI方式啟動(dòng),在CCSTUDIO中用GEL初試化DSP。GEL文件主要完成DSP的內(nèi)存空間配置、輸入/輸出空間配置、寄存器初始化等功能。然后啟動(dòng)FlashBurn程序,在下載框中的要燒寫(xiě)的文件項(xiàng)填入生成的十六進(jìn)制文件,在邏輯地址項(xiàng)填入0x0,選中寫(xiě)驗(yàn)證復(fù)選框;在目標(biāo)系統(tǒng)的處理器類(lèi)型中選擇55x,F(xiàn)BTC程序文件選擇FBTC55.out,F(xiàn)lash內(nèi)存物理地址填入0x400000(按字節(jié)計(jì)),字節(jié)數(shù)填寫(xiě)0x80000(512K),配置好后,F(xiàn)lashBurn會(huì)將配置存儲(chǔ)在擴(kuò)展名為.cdd的文件中。
FlashBurn程序和下載到VC5502內(nèi)部RAM中的FBTC程序通訊,對(duì)DSP型號(hào)、FLASH燒寫(xiě)起始地址、FLASH字節(jié)數(shù)做驗(yàn)證后,就可以將十六進(jìn)制文件通過(guò)JTAG口發(fā)送到VC5502,由FBTC負(fù)責(zé)將數(shù)據(jù)燒寫(xiě)到Flash中。
6 結(jié)束語(yǔ)
微電子技術(shù)和圖像處理技術(shù)的發(fā)展促進(jìn)了基于機(jī)器視覺(jué)的在線檢測(cè)技術(shù)的發(fā)展,高性能DSP的推出使得大容量圖像數(shù)據(jù)的實(shí)時(shí)處理變?yōu)楝F(xiàn)實(shí),這更加促進(jìn)了機(jī)器視覺(jué)檢測(cè)技術(shù)的發(fā)展?;贒SP的圖像數(shù)據(jù)處理方式的運(yùn)用提高了空瓶檢測(cè)的效率和精度,在線檢測(cè)領(lǐng)域有一定的借鑒意義。
標(biāo)簽:
中國(guó)傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來(lái)源:中國(guó)傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國(guó)傳動(dòng)網(wǎng)(www.surachana.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來(lái)源“中國(guó)傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明其他來(lái)源的稿件,均來(lái)自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來(lái)源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。
產(chǎn)品新聞
更多>性能躍升20%!維宏NK300CX Plus數(shù)控系統(tǒng)...
2025-04-11
rpi-image-gen:樹(shù)莓派軟件鏡像構(gòu)建的終...
2025-04-08
【產(chǎn)品解讀】全面提升精密制造檢測(cè)節(jié)拍...
2025-03-31
激光閃耀 智慧引領(lǐng) | WISE MASER 黑武士...
2025-03-20
2025-03-13
推薦專(zhuān)題
更多>