AVR8位單片機我想很多人都用過,它擁有片上資源豐富,驅(qū)動能力強,功耗低等優(yōu)點,廣泛應(yīng)用于工業(yè)控制和家用電器等領(lǐng)域。但對于AVR單片機的產(chǎn)品應(yīng)用有一定了解的人會發(fā)現(xiàn),AVR片機產(chǎn)品上很少采用分辨率較大的彩色液晶屏,主要原因是其處理速度不夠,并且不支持大容量的SRAM或SDRAM。比如說系列里配置較高的atmega128,其處理速度最高也就16MIPS,最大支持不到64K的外部ram。如果用戶希望能夠在實現(xiàn)工控任務(wù)的情況下額外再提高產(chǎn)品的圖像顯示能力,atmega顯然是無法完全勝任的。隨著人們對產(chǎn)品人機交互要求的不斷提高,越來越多的AVR用戶希望能找到一款相比以前的AVR單片機而言在人機界面處理上有更高表現(xiàn)的AVR單片機,這樣既能夠滿足用戶的需求,同時又不必轉(zhuǎn)換平臺從而最小化軟硬件的開發(fā)周期。
atxmega系列是ATMEL公司2008年推出的一款A(yù)VR單片機,它將AVR產(chǎn)品擴展到了新興的市場范圍,并改善了現(xiàn)有應(yīng)用。拿atxmega128A1來說,與以前的atmega128系列相比,atxmega128A1主要有了如下幾項改進:
(1)內(nèi)部RAM提升為8K;
(2)處理速度可達32MMIPS;
(3)EBI總線支持16MB 8位SRAM或者128MB 4位SDRAM;
(4)USART,I2C,SPI的硬件資源數(shù)量比以前有了較大提高。
與atmega128相比,atxmega128A1處理速度翻了一倍,并且支持大容量的外擴SDRAM。即使配置8M的SDRAM,如果配置240x320 16位色寬的屏,可以放下54頁的圖像。雖然atxmega處理速度仍然比較慢,但其支持SDRAM的能力使其具備了處理較大尺寸圖形界面的能力。還有一點需要說明,由于屬于AVR系列,atxmega可以使用與atmega相同的編譯器,如WINAVR。雖然與atmega系列相比,atxmega的底層寄存器定義有了部分變化,以前的產(chǎn)品代碼會不兼容,但是ATMEL公司提供了大量的庫函數(shù)給用戶,用戶還是可以只花少量時間就可以完成老代碼的移植工作。因此,對于那些需要提升產(chǎn)品的顯示能力而又不想更換開發(fā)平臺的用戶來說,用atxmega來代替atmega是一個不錯的選擇。
本文中,筆者將介紹一下自己設(shè)計的atxmega128A1開發(fā)板,借此來評估atxmega在開發(fā)人機界面方面的能力。
開發(fā)板配置以下功能:
(1)mp3播放,歌曲快進快退等
(2)BMP圖片瀏覽,縮放,更換桌布,屏幕截圖
(3)SD和U盤雙接口
(4)揚聲器輸出
(5)編碼器旋鈕控制
選用的硬件配置:
(1)ATXMEGA128A1作為MCU
(2)液晶屏選用東芝的2.2”TFT液晶屏,控制器為μPD161704A,分辨率達到QVGA240x320。
(3)選用鎂光8MB的SDRAM MT48LC16M4A2作為外擴內(nèi)存
(4)SD卡和U盤作為存儲器
(5)VS1003B作為mp3解碼芯片
(6)TEA2025B作為揚聲器功放,配2個0.8W的小揚聲器
(7)一個編碼旋鈕控制界面菜單
(8)SST25VF016 flash存放字庫和界面圖標
(9)串口轉(zhuǎn)USB接口
從上面的配置可以看出,這塊板子具有較多的硬件資源,可以滿足一般大專院校和單片機愛好者學(xué)習(xí)的需要,如圖1、2所示。
1)atxmega128A1;
2)液晶屏;
3)SDRAM;
4)SST25VF016;
5)VS1003B;
6)CH375B;
7)TEA2025B;
8)旋鈕編碼器;
圖1 開發(fā)板硬件系統(tǒng)框圖
圖2 開發(fā)板實物照片
圖3 SDRAM接口原理圖
圖4 旋鈕編碼器接口原理圖
9)SD(在液晶屏下部)SDRAM接口。
接口主要包括:地址線,數(shù)據(jù)線和控制線??刂凭€包括:行地址選擇RAS#、列地址選擇CAS#、寫選擇WE#、BANK塊地址選擇BA0-1、時鐘線CLK、數(shù)據(jù)有效DQM。Atxmega128A1的外部數(shù)據(jù)總線EBI支持3端口的連接方法,EBI的時鐘使用的是高速外部時鐘,速度為CPU的2倍,可達64MHz,如圖3所示。
液晶屏接口:接口主要包括數(shù)據(jù)線和控制線。控制線包括片選CS#、讀有效RS#、寫有效WR#、復(fù)位信號RST#。
圖5 部分界面截圖
旋轉(zhuǎn)編碼器接口:旋轉(zhuǎn)編碼器內(nèi)部是一個按鍵和兩個旋轉(zhuǎn)開關(guān),可以根據(jù)旋轉(zhuǎn)方向產(chǎn)生不同相位信號。當順時針旋轉(zhuǎn)時,開關(guān)A的輸出信號A signal相位超前;如果逆時針旋轉(zhuǎn)時,則是開關(guān)B的輸出信號B signal相位超前,把A/B端分別接到MCU的兩個輸入端口,并在MCU內(nèi)設(shè)置一個計數(shù)器;就可以用軟件來判別是順時針旋轉(zhuǎn)還是逆時針旋轉(zhuǎn),以此判斷是增加還是減少計數(shù)器的值,如圖4所示。
軟件設(shè)計上充分利用板載大容量SDRAM這一優(yōu)勢,開發(fā)板上電初始化時,會把存放在flash內(nèi)的所有系統(tǒng)文件一次性加載到SDRAM內(nèi)的指定地址上,而不必每次使用時都從flash去調(diào)數(shù)據(jù)。利用SDRAM的大容量還可以給圖形界面處理,數(shù)據(jù)拷貝等凡是要用到大量數(shù)據(jù)存儲的地方都開辟一定的空間。
整個軟件架構(gòu)分為3塊,應(yīng)用層部分,數(shù)據(jù)傳輸層部分,硬件層部分。
應(yīng)用層負責(zé)軟件上層的應(yīng)用,如負責(zé)圖像最終的顯示,歌曲的播放等。
數(shù)據(jù)傳輸層是核心部分,負責(zé)將硬件層過來的數(shù)據(jù)進行各種處理后發(fā)給應(yīng)用層,或者將應(yīng)用層的數(shù)據(jù)傳給硬件層。它主要負責(zé)以下任務(wù):
(1)FAT文件系統(tǒng)的管理。
(2)狀態(tài)機實時控制和判斷,當插入或拔出SD或U盤,會自動更新相應(yīng)桌面圖標的狀態(tài)(souce圖標和文件圖標)。
(3)圖像數(shù)據(jù)的處理,如圖塊數(shù)據(jù)的搬運,疊加,覆蓋,更新,混色,消隱等。
(4)與硬件層的數(shù)據(jù)接收和發(fā)送。
硬件層主要是硬件驅(qū)動部分,負責(zé)查看和設(shè)置硬件狀態(tài),將數(shù)據(jù)發(fā)送至傳輸層,或傳輸層的數(shù)據(jù)傳回至相關(guān)硬件。它主要負責(zé)以下任務(wù):
(1)Atxmega128A1的EBI接口與SDRAM的數(shù)據(jù)讀寫。
(2)CH375B,VS1003B,液晶屏的數(shù)據(jù)讀寫和控制。
(3)SST25VF016的數(shù)據(jù)燒寫和讀取。
(4)攻放的開關(guān)和旋鈕的邏輯判斷。
通過實際測試,一幀240x320的16位色圖像從SDRAM里寫進屏里需要的時間大約是1.5秒,這個速度相比其他速度更快的單片機速度稍顯不夠。但如果是小圖塊圖像,比如圖標,則刷新速度很快,基本看不出有“拉窗簾”的跡象,并且在mp3頁面下的實時混色的速度還是不錯的。因此這里可以得出結(jié)論,在對整屏顯示速度要求不是很高或者刷新面積不是很大的場合,atxmega還是基本勝任的,如圖5所示。
(1)本開發(fā)板在代碼的可修改和可移植性方面做得比較好,代碼盡量做到讓各個功能塊留有最少的接口,并且在很大程度上進行了打包處理,用戶只需調(diào)用上層的應(yīng)用函數(shù)就能做一些簡單的修改。
(2)程序上在提高速度方面作了很大的優(yōu)化,當前用到的數(shù)據(jù)都盡可能的堆放在SDRAM里,然后再進行處理,這樣大大提高了效率。
(3)代碼提供了所有硬件的驅(qū)動部分,用戶也可以只使用驅(qū)動代碼,數(shù)據(jù)處理和應(yīng)用部分自己另行開發(fā)。同時用戶也可以對該板進行軟硬件裁減,截取需要的部分應(yīng)用到自己的產(chǎn)品。
在目前的AVR單片機開發(fā)板市場上,由于atxmega是最近幾年才推出來的,atxmega開發(fā)板還非常稀少,即使有功能也相對簡單,沒有充分利用其外擴RAM的能力。當然這里面也有目前atxmega成本還比較高,供應(yīng)量不足的因素,但相信在未來的幾年,隨著供貨量的增加和成本的下降,atxmega一定會取代atmega成為AVR的主推產(chǎn)品。
筆者設(shè)計了一塊atxmega128A1開發(fā)板,利用其支持大容量SDRAM的能力驗證其顯示圖形界面的速度性能,通過實際應(yīng)用證明了atxmega系列單片機具備了一定的圖形開發(fā)能力,基本能夠滿足對產(chǎn)品的圖形顯示有一定要求的AVR用戶的需要。
[1]溫正,何嘉揚.AVR單片機開發(fā)從入門到精通[M].中國電力出版社.
[2]吳雙力,崔劍.AVR-GCC與AVR單片機C語言開發(fā)[M].北京航空航天大學(xué)出版社.
[3]avr-libc-user-manual[OL].http://www.nongnu.org/avrlibc/user-manual/modules.html.