1 引言:
隨著電氣化的不斷發(fā)展,嵌入式系統(tǒng)的應(yīng)用也在迅速的前進(jìn)。作為嵌入式系統(tǒng)中的微控制器的基本含義是:在一塊芯片上集成了中央處理單元、存儲器、定時器計數(shù)器及多種輸入輸出接口的比較完整的數(shù)字處理器。主要表現(xiàn)在直接面對控制對象,嵌入到具體的應(yīng)用體中,能在現(xiàn)場可靠地運行,體積小,應(yīng)用靈活,突出控制功能,特別是對外部信息的捕捉與豐富的I/O功能等。它的出現(xiàn)是大規(guī)模集成電路技術(shù)發(fā)展的產(chǎn)物。它廣泛地應(yīng)用于工業(yè)控制、通訊、智能化儀表等領(lǐng)域。而面向測控對象,嵌入到實際應(yīng)用系統(tǒng)中,實現(xiàn)嵌入式應(yīng)用的處理器稱之為嵌入式系統(tǒng)。
DSP 是針對實時數(shù)字信號處理而設(shè)計的數(shù)字信號處理器,由于它具有計算速度快、體積小、功耗低的突出優(yōu)點,非常適合應(yīng)用于嵌入式實時系統(tǒng)。自世界上第一片通用DSP 芯片TMS320C10 于1982年在美國TI公司產(chǎn)生以來,DSP 處理器便顯示出強(qiáng)盛的生命力。短短二十多年,世界上許多公司便開發(fā)出各種規(guī)格的DSP 處理器,并使它們在通信、自動控制、雷達(dá)、氣象、導(dǎo)航、機(jī)器人等許多嵌入式實時領(lǐng)域得到了廣泛應(yīng)用。
現(xiàn)在數(shù)字信號處理器(DSP) 正越來越多地應(yīng)用到各種場合。TMS320C28X系列的DSP 的低功耗特性,使得它特別適合于便攜式設(shè)備。Flash 存儲器具有功耗低、尺寸小且裝配后可以編程的特性,也適合于便攜式設(shè)備。目前Flash 存儲器正在從單純的EPROM 的替換件演變?yōu)樵S多電路系統(tǒng)中的不可缺少的組成部分。Flash 存儲器已成為DSP 系統(tǒng)的一個基本配置,主要用來存放掉電后需要保存的數(shù)據(jù)。本文以TMS320C2812 和AT49BV162 為例介紹了DSP在嵌入式系統(tǒng)中擴(kuò)展外部Flash 存儲器的方法及其應(yīng)用。
2 在嵌入式系統(tǒng)中的應(yīng)用
DSP/ BIOS內(nèi)核是通過目標(biāo)應(yīng)用程序調(diào)用DSP/BIOS API來實現(xiàn)運行時間服務(wù)的。通常單個DSP/BIOS模塊可以管理一個或多個相關(guān)種類的內(nèi)核對象, 并可依據(jù)全局參量的設(shè)定來控制整個行為。一般來講, DSP/BIOS可以歸納為:核執(zhí)行線程, 硬件抽象, 設(shè)備獨立I/ O, 內(nèi)部線程通信和同步, 實時分析, 多系統(tǒng)服務(wù)六大功能類。本設(shè)計方案應(yīng)用于鐵路系統(tǒng)的運行,DSP作為整個系統(tǒng)設(shè)計中的核心,通過A/D轉(zhuǎn)換器采集到的鐵路上的制式、速度、頻率等各種信息,利用DSP的快速數(shù)據(jù)處理功能對轉(zhuǎn)換后的數(shù)字信息進(jìn)行運算和判斷,外加其控制功能和強(qiáng)大的擴(kuò)展外部設(shè)備的功能把控制信號輸出到前臺的顯示屏、打印機(jī)、控制臺。這是DSP實時多任務(wù)內(nèi)核在嵌入式系統(tǒng)中的一個應(yīng)用實例。通過對火車運行系統(tǒng)進(jìn)行從人工切換軌道制式到自動切換的技術(shù)改進(jìn),從而為火車提速打好基礎(chǔ)。由于我國鐵軌的建造制式繁多,在軌道切換時信息量較大,且這種變化由于鐵路軌道的長短而不均勻改變。所以有必要在每一次制式信息改變的同時,DSP不但要進(jìn)行制式的判斷計算、控制信號的輸出,還要對數(shù)據(jù)進(jìn)行記錄,而這種制式信息的記錄不應(yīng)隨外界電壓的變化而改變,因此就要用Flash進(jìn)行存儲數(shù)據(jù)。Flash記錄的數(shù)據(jù)可供外部調(diào)用查看,也起到了黑匣子的作用。下面就介紹實時多任務(wù)中的一個方面如何在嵌入式系統(tǒng)的DSP外部進(jìn)行Flash的擴(kuò)展。
3 TMS320C2812 內(nèi)部存儲器的結(jié)構(gòu)
TI公司的TMS320C28X系列DSP 的內(nèi)核為同一種CPU ,但是其內(nèi)存與外圍設(shè)備的配置不同。C28X存儲器由三個獨立的空間組成: 程序、數(shù)據(jù)和I/O 空間。不同的C28X器件其內(nèi)存映象都為改進(jìn)的哈佛結(jié)構(gòu),但片內(nèi)存儲器的大小和外部地址引腳數(shù)目不同。外部引腳及寄存器也影響內(nèi)存的配置。TMS320C2812 的異步外設(shè)包括19根地址線、16根數(shù)據(jù)線和三根芯片選擇線。三根芯片選擇線映射到五個外部空間,分別是0、1、2、6、7區(qū)。區(qū)域0和區(qū)域1公用一根單獨的芯片選擇線,區(qū)域 6和區(qū)域 7公用一根單獨的芯片選擇線,每一個區(qū)域都可以對自己的等待狀態(tài)、閘門信號設(shè)置和置位時間進(jìn)行編程。每一個區(qū)域也能為是否擴(kuò)展外設(shè)進(jìn)行編程??删幊痰牡却隣顟B(tài)、芯片選通和可編程的閘門時間使外部擴(kuò)展寄存器和外圍設(shè)備變得豐富多彩。如圖1 所示。
[IMG=外圍設(shè)備模塊圖表]/uploadpic/THESIS/2007/12/2007121214113556336V.jpg[/IMG]
圖1 外圍設(shè)備模塊圖表
對C2812 器件可以在外部總線上擴(kuò)展外部存儲器和Flash。其擴(kuò)展外部內(nèi)存的分頁結(jié)構(gòu)使得可以尋址多于64k 的空間。CPU 中的寄存器和相應(yīng)的遠(yuǎn)尋址指令允許尋址程序空間的另外7 根地址線。而對數(shù)據(jù)空間的訪問并不影響A 16~ A 22。各區(qū)域的物理地址如下:0x00 2000 Zone0,0x00 4000 Zone1,0x08 0000 Zone2,0x10 0000 Zone6,0x3F C000 Zone7。
4 TMS320C28X 與AT49BV162Flash 存儲器的連接方法
為了便于電路設(shè)計與調(diào)試, 選用ATMEL 公司的AT49BV162 系列Flash 芯片。因為AT49BV162和VC549一樣同為3V 電源供電, 這就省去了數(shù)據(jù)和地址線的緩沖和電平變換, 所以Flash 器件選擇了AT49BV162。Flash上電時處于讀模式,外部命令可以使Flash處于編程或者擦除狀態(tài),F(xiàn)lash可以對每一個扇區(qū)進(jìn)行保護(hù)。AT49BV162 的存儲容量為16Mb, 提供兩種類型字節(jié)傳輸模式,一種是16位的,可存儲1,048,576 個字;另一種是8位的,可存儲2,097,152個字。存儲器可以分成71個扇區(qū)進(jìn)行操作。還有CE和OE控制信號來避免其他線路上的干擾,這種使用單一電源來對芯片進(jìn)行讀取和編程的操作非常適合系統(tǒng)編程。為了增加芯片的靈活性,該Flash還包括了擦除等待和編程等待的功能,這一特點使擦除和編程在尚未完成讀取和編程前一段的過程中被掛起,當(dāng)READY/BUSY管腳或者是掛起位被置位時,繼續(xù)執(zhí)行。VPP提供了數(shù)據(jù)保護(hù),當(dāng)VPP的輸入電壓小于0.4V時,編程和擦除功能被禁止,當(dāng)VPP的電壓大于0.9V時,這些正常的功能才被允許。BYTE管腳控制Flash的數(shù)據(jù)結(jié)構(gòu),如果BYTE置為邏輯1,則Flash的數(shù)據(jù)結(jié)構(gòu)是按字節(jié)傳輸,通過CE和OE來控制I/O0-I/O15的傳輸,否則按位傳輸。當(dāng)CE和OE處于低電平,WE處于高電平時,AT49BV162可以像EPROM一樣進(jìn)行訪問。存儲單元地址里存儲的數(shù)據(jù)由連接輸出的地址線所決定。CE或者OE處于高電平時,輸出則處于高阻狀態(tài)。雙重控制可以更有效的防止總線的競爭。如圖2所示。
[IMG= Flash 模塊圖]/uploadpic/THESIS/2007/12/2007121214214517816K.jpg[/IMG]
圖2 Flash 模塊圖
Flash的地址線和DSP的地址線相連,Flash的數(shù)據(jù)線和DSP的數(shù)據(jù)線相連,DSP的ZONE2連到Flash的CE上來控制片選。這樣內(nèi)部數(shù)據(jù)可以存放在Flash里,當(dāng)外部需要讀取時,通過對Flash的讀操作,再通過串口把數(shù)據(jù)發(fā)出去,這樣不但減輕了內(nèi)部存儲空間的負(fù)荷,也保證了數(shù)據(jù)最大限度的存儲。
5 AT49BV162 Flash 存儲器的讀寫
AT49BV162 是ATMEL 公司生產(chǎn)的Flash 存儲器, 支持在系統(tǒng)編程。AT49系列的編程是一個簡單的可重復(fù)的過程。將每種芯片的總存儲量劃分成為數(shù)個存儲陣列(扇區(qū)),每次編程一個扇區(qū)。編程命令是一個3 總線周期指令。以兩個解鎖周期開始,緊接著一個編程建立命令, 最后是要編程的地址和數(shù)據(jù)。寫完該地址和數(shù)據(jù)后,內(nèi)置編程算法自動啟動, 進(jìn)行Flash 存儲器編程。編程算法完成后, 進(jìn)入讀取數(shù)據(jù)狀態(tài)。在這里通過DSP對Flash的控制完成對Flash的讀寫。用C語言完成如下:
5.1 對XINTF寄存器進(jìn)行設(shè)置
XintfRegs.XTIMING2.bit.USEREADY = 0; //XREADY unused
XintfRegs.XTIMING2.bit.XWRLEAD = 1; //LEAD 1 sysclock
XintfRegs.XTIMING2.bit.XWRACTIVE= 1; //ACTIVE 2 syscolock
XintfRegs.XTIMING2.bit.XWRTRAIL = 1; //HOLD 1 sysclock
XintfRegs.XTIMING2.bit.X2TIMING = 0; // 1:1 lead/active/trial timing for Zone 2
XintfRegs.XTIMING2.bit.XSIZE = 3; //XINTF bus width - must be written as 11b
XINTF的信號定時能協(xié)調(diào)外部特殊外設(shè)對信號時鐘的要求,時間參數(shù)可以根據(jù)連接不同外設(shè)的區(qū)域來設(shè)置。
5.2 對Flash讀寫編程
unsigned int * ext_Flash = (unsigned int *) 0x100000; // address of Flash
void FlashWrite(unsigned int *Flashwtbuf,unsigned int start,unsigned int end)
{ unsigned int Flashwp;
for(Flashwp = start; Flashwp <= end; Flashwp++)
{ *(ext_Flash + Flashwp)=*(Flashwtbuf++) ;
}
}
void FlashRead(unsigned int *Flashrdbuf,unsigned int start,unsigned int end)
{ unsigned int Flashrp;
for(Flashrp = start; Flashrp <= end; Flashrp++)
{ *(Flashrdbuf++) = *(ext_Flash + Flashrp) ;
}
}
參考文獻(xiàn)
[1] 公茂忠,F(xiàn)lash存儲器的在系統(tǒng)編程及其在DSP系統(tǒng)中的應(yīng)用[J],電子技術(shù)應(yīng)用,2002,3,69-71
[2] Markus Levy, 閃速存儲器設(shè)計工具博覽[J],電子設(shè)計應(yīng)用,1996,2,42-45
[3] Antony Watts,正確選擇非易失性存儲器[J],電子設(shè)計應(yīng)用,1996,3,38-45
[4] TMS320C2812 User Guide,Texas Instruments,2004
[5] AT49BV162 User Guide,Atmel,2004