劉 王瑩,董春曦
摘 要:介紹計(jì)算機(jī)與設(shè)備、設(shè)備與其他模塊間的通信。采用帶有USB微控制器單片機(jī)芯片AT89C5131為通信的控制核心。AT89C5131是Atmel公司推出的芯片,有較快的處理速度和較大的存儲(chǔ)容量,還可以在系統(tǒng)編程,是USB接口設(shè)計(jì)的理想選擇。合理設(shè)計(jì)其外圍電路并用Keil Uvision 3開(kāi)發(fā)固件程序,主要針對(duì)USB接口、SPI接口和鍵盤(pán)接口的設(shè)計(jì)與程序開(kāi)發(fā)。實(shí)現(xiàn)計(jì)算機(jī)和設(shè)備控制面板對(duì)設(shè)備的雙重控制,以及計(jì)算機(jī)通過(guò)AT89C5131使用SPI等通信協(xié)議與其他設(shè)備模塊的通信。這里將USB接口通信的輸入與輸出通道分割開(kāi)來(lái),提高了通信速度。
關(guān)鍵詞:端口特性;USB通信;SPI通信;鍵盤(pán)設(shè)計(jì)
中圖分類號(hào):TP302文獻(xiàn)標(biāo)識(shí)碼:B
文章編號(hào):1004-373X(2009)12-028-03
Interface Design Based on AT89C5131
LIU Ying,DONG Chunxi
(School of Electronic Engineering,Xidian University,Xi′an,710071,China)
Abstract:Communication between computer and device,and communication between device and other modules are introduced.AT89C5131 with USB device controller is used as the processor which is produced by Atmel Corporation and has higher process speed and larger memory capability.AT89C5131 also allows in-system programming and it is a perfect choice for USB interface design.The peripheral circuit is designed rationally and the hardware program is developed with Keil Uvision 3,mainly about the design and development of USB,SPI and keyboard interface.It implements the double control from computer and device control panel to device and the communication between computer and other device module through AT89C5131 using SPI or other communication protocols.The input and output of USB interface communication is divided up,which improves the communication speed.
Keywords:port characteristics;USB communication;SPI communication;keyboard design
0 引 言
AT89C5131是一個(gè)基于52內(nèi)核的單片機(jī)[1]。在存儲(chǔ)器方面,其內(nèi)部集成了32 KB的FLASH存儲(chǔ)器用于代碼的存儲(chǔ);1 KB的E2PROM存儲(chǔ)器用于用戶數(shù)據(jù)的存儲(chǔ);用戶可以使用片上的Bootloader或FLASH API,通過(guò)USB接口或其他接口(如UART和I2C總線)對(duì)FLASH存儲(chǔ)器和E2PROM存儲(chǔ)器進(jìn)行ISP或者IAP編程。AT89C5131支持USB 1.1和USB 2.0協(xié)議,擁有1個(gè)控制端口和6個(gè)普通可編程端口,支持控制、批量、中斷和同步傳輸4種傳輸方式,還支持串行I/O接口模式及Master和Slave的SPI接口模式[2]。
1 系統(tǒng)硬件設(shè)計(jì)
基于AT89C5131的通信和控制模塊主要完成以下功能:在通信方面,通過(guò)USB實(shí)現(xiàn)與計(jì)算機(jī)的通信,接收計(jì)算機(jī)對(duì)設(shè)備的控制命令和計(jì)算機(jī)發(fā)送的數(shù)據(jù),并將設(shè)備的工作狀態(tài)發(fā)送給計(jì)算機(jī),同時(shí)將計(jì)算機(jī)傳來(lái)的控制命令和數(shù)據(jù)通過(guò)SPI接口傳送到其他設(shè)備模塊,并收集其他設(shè)備模塊的狀態(tài)信息;在控制方面,AT89C5131負(fù)責(zé)收集設(shè)備控制顯示面板的控制命令,更新設(shè)備顯示狀態(tài)等。由于采用USB通信系統(tǒng),AT89C5131除了能夠根據(jù)控制面板控制設(shè)備的運(yùn)行,也能根據(jù)計(jì)算機(jī)的命令控制設(shè)備的運(yùn)行,實(shí)現(xiàn)了對(duì)設(shè)備的雙重控制。該系統(tǒng)中AT89C5131的外圍連接如圖1所示。
1.1 AT89C5131的鍵盤(pán)端口特性及鍵盤(pán)設(shè)計(jì)
AT89C5131擁有一個(gè)允許與8×n矩陣鍵盤(pán)連接的鍵盤(pán)接口,其輸入均具有高或低電平可編程中斷能力[2]。鍵盤(pán)接口與C51內(nèi)核的通信通過(guò)3個(gè)特殊功能寄存器實(shí)現(xiàn),分別是鍵盤(pán)電平選擇寄存器(KBLS)、鍵盤(pán)中斷使能寄存器(KBE)和鍵盤(pán)標(biāo)志寄存器(KBF)。AT89C5131的鍵盤(pán)輸入被設(shè)計(jì)為分享同一個(gè)中斷向量的8個(gè)獨(dú)立的中斷源,寄存器IEN1中的中斷使能位KBD允許鍵盤(pán)中斷全局的使能及不使能,根據(jù)KBLS每一位的值,每一個(gè)鍵盤(pán)輸入都有檢測(cè)出可編程電平的能力,然后鍵盤(pán)檢測(cè)就被反應(yīng)到KBF中,而通過(guò)軟件使用KBE可以屏蔽中斷標(biāo)志KBF。正是這樣的結(jié)構(gòu)使得鍵盤(pán)排列可以從1×n延伸至8×n的矩陣,同時(shí)還使得P1輸入用于其他用途。
在該設(shè)計(jì)中,將4個(gè)鍵盤(pán)端口(P1.0,P1.2,P1.3,P1.4)及2個(gè)外部中斷端口(P3.2,P3.3)與控制面板上的6個(gè)按鍵相連;實(shí)現(xiàn)系統(tǒng)的內(nèi)外、啟停、暫停繼續(xù)控制及參數(shù)組的選擇等功能。這6個(gè)端口都采用低電平觸發(fā)產(chǎn)生中斷。
圖1 AT89C5131的連接關(guān)系
1.2 USB各端口的特性及USB通信設(shè)計(jì)
AT89C5131的控制端口0總是默認(rèn)為控制類型,用于控制傳輸,有32字節(jié)的FIFO;而其他6個(gè)可編程端口可以通過(guò)設(shè)置UEPTYPE的值配置為控制、批量、中斷和同步類型;Ping-pong模式的端口可以配置成批量、中斷和同步類型,對(duì)于批量、中斷和同步類型的端口,其方向可以通過(guò)設(shè)置UEPCONX的值配置為輸入或者輸出[2]。端口1~端口3有32字節(jié)的FIFO;端口4,端口5有2個(gè)64 B的FIFO;端口6有2個(gè)512 B的FIFO,并且后三個(gè)端口均可工作于Ping-pong模式。
在該設(shè)計(jì)中,PC機(jī)將數(shù)據(jù)通過(guò)USB傳給AT89C5131,傳輸完一次后AT89C5131向PC機(jī)回傳數(shù)據(jù)傳輸正確與否的標(biāo)志,PC機(jī)可以根據(jù)收到的標(biāo)志進(jìn)行相應(yīng)的操作。PC機(jī)向AT89C5131傳輸?shù)臄?shù)據(jù)主要是參數(shù)和控制命令兩種類型。為將其區(qū)分開(kāi)來(lái),使用USB的端口4和端口6接收這兩種數(shù)據(jù)。其中,端口4用來(lái)接收控制命令;端口6用來(lái)接收參數(shù)。相應(yīng)地,控制命令的回傳使用端口5;參數(shù)的回傳使用端口3。為簡(jiǎn)單起見(jiàn),端口3~端口6均被配置為批量類型;端口3、端口5為IN端口;端口4、端口6為OUT端口。
1.3 SPI端口特性及SPI通信設(shè)計(jì)
AT89C5131的SPI模塊允許在MCU和其他外圍設(shè)備之間實(shí)現(xiàn)全雙工、同步、串行通信,它能以配置為主或者從兩種操作模式提供可編程極性和相位串行時(shí)鐘,同時(shí)還提供8個(gè)可編程的主機(jī)時(shí)鐘率[2]。SPI模塊包括4個(gè)端點(diǎn)(MOSI,MISO,SCK,SS),MOSI和MISO都是用來(lái)傳輸數(shù)據(jù)的,且每次只能傳輸1個(gè)字節(jié)的數(shù)據(jù)。不同的是,MOSI將數(shù)據(jù)由主機(jī)輸出從機(jī)輸入,而MISO正好相反。SCK信號(hào)用以使通過(guò)MOSI和MISO的數(shù)據(jù)輸入/輸出設(shè)備同步,它可以由主機(jī)驅(qū)動(dòng)產(chǎn)生8個(gè)時(shí)鐘周期,用以完成一個(gè)字節(jié)在串行通道上的交換。SS用于從機(jī)的選擇,低有效。SPI模塊的配置和初始化可以通過(guò)寄存器SPCON完成,而數(shù)據(jù)的交換則需要使用寄存器SPSTA和SPDAT兩個(gè)寄存器,在軟件編寫(xiě)過(guò)程中,SPI能否正常工作主要取決于對(duì)上述3個(gè)寄存器的操作。
在該設(shè)計(jì)中,SPI被配置為主機(jī)模式;SS端口處于無(wú)效狀態(tài);AT89C5131通過(guò)MOSI端口向DSP傳輸參數(shù)及控制命令;DSP通過(guò)軟件設(shè)置P1.1(SS)端口的狀態(tài)表明數(shù)據(jù)是否正確接收,即若正確接收,則置P1.1為1,否則置P1.1為0;AT89C5131通過(guò)檢測(cè)P1.1的值來(lái)決定是否重傳數(shù)據(jù)。
2 系統(tǒng)實(shí)現(xiàn)
要使得上述設(shè)計(jì)在工程應(yīng)用中得以實(shí)現(xiàn),在硬件設(shè)計(jì)的基礎(chǔ)上,還需對(duì)接口進(jìn)行軟件設(shè)計(jì)。AT89C5131的軟件設(shè)計(jì)主要是USB固件程序的設(shè)計(jì),包括系統(tǒng)的初始化,USB接口、UART接口和SPI接口數(shù)據(jù)的收發(fā)以及控制面板按鍵的功能實(shí)現(xiàn)幾個(gè)方面。軟件設(shè)計(jì)[3]采用C語(yǔ)言編程,最后軟件通過(guò)FLIP下載到AT89C5131芯片中。這里所采用的編譯環(huán)境為Keil μVision 3軟件設(shè)計(jì)平臺(tái)。在具體的工程實(shí)現(xiàn)過(guò)程中,也遇到了一些問(wèn)題,但經(jīng)過(guò)反復(fù)的修改及調(diào)試,這些問(wèn)題都得到了很好的解決,其中主要有以下幾個(gè)方面:
按鍵功能實(shí)現(xiàn)
控制面板按鍵的功能是通過(guò)電平觸發(fā)中斷實(shí)現(xiàn)的。在設(shè)計(jì)之初,手動(dòng)按下一次按鍵總會(huì)觸發(fā)多次中斷,對(duì)應(yīng)的LED顯示總會(huì)很快的跳變,不能滿足按一次按鍵就顯示一個(gè)狀態(tài)的要求,于是筆者就在按鍵功能實(shí)現(xiàn)的程序中添加了等待函數(shù),即每發(fā)生完一次中斷,就等待一段時(shí)間,經(jīng)過(guò)調(diào)試,上面的問(wèn)題沒(méi)有再出現(xiàn)。
USB通信系統(tǒng)
系統(tǒng)要求USB能夠快速、高效地實(shí)現(xiàn)通信,對(duì)于速度問(wèn)題可以通過(guò)Ping-pong模式得以解決。系統(tǒng)還要求USB實(shí)現(xiàn)雙向通信,為使其接收和發(fā)送數(shù)據(jù)互不干擾,所以選用了幾個(gè)端口實(shí)現(xiàn)不同數(shù)據(jù)的傳輸。
SPI端口通信
SPI端口工程實(shí)現(xiàn)的關(guān)鍵是速度和工作模式的匹配。在設(shè)計(jì)之初,AT89C5131的SPI工作于從機(jī)模式,其數(shù)據(jù)傳輸受到DSP的控制,由于其傳輸速度遠(yuǎn)遠(yuǎn)低于DSP中SPI端口的處理速度,所以每通過(guò)AT89C5131的SPI傳輸一組數(shù)據(jù)時(shí),DSP總需要通過(guò)軟件控制等待很長(zhǎng)一段時(shí)間,既便如此也不能保證數(shù)據(jù)得到正確接收。于是,后來(lái)就將AT89C5131的SPI工作模式修改為主機(jī)模式,由AT89C5131主動(dòng)控制數(shù)據(jù)的傳輸。然而實(shí)現(xiàn)雙向通信的關(guān)鍵是對(duì)SS信號(hào)的控制,在上述工作模式下,SS必須無(wú)效,Slave才能較可靠地向發(fā)送寄存器寫(xiě)數(shù)。
3 結(jié) 語(yǔ)
AT89C5131宜于構(gòu)成低成本的USB控制和通信系統(tǒng),能實(shí)現(xiàn)計(jì)算機(jī)與設(shè)備的通信,并可靈活選擇多種通信協(xié)議。文中介紹基于AT89C5131的接口設(shè)計(jì),主要是實(shí)現(xiàn)PC機(jī)與MCU以及MCU與DSP的通信,該設(shè)計(jì)已經(jīng)在工程實(shí)際中得到應(yīng)用。經(jīng)過(guò)實(shí)踐檢驗(yàn),證明其合理且操作靈活,具有一定的實(shí)用意義。在設(shè)計(jì)過(guò)程中,深切體會(huì)到硬件設(shè)計(jì)與軟件設(shè)計(jì)的極大不同。編譯正確且邏輯沒(méi)有問(wèn)題的程序源代碼, 將其燒寫(xiě)至芯片后,硬件電路并不一定能完全地實(shí)現(xiàn)所要求的功能,所以必須經(jīng)過(guò)反復(fù)的修改程序、燒寫(xiě)、調(diào)試,直至正確實(shí)現(xiàn)功能。
參考文獻(xiàn)
[1]廖濟(jì)林.USB 2.0應(yīng)用系統(tǒng)開(kāi)發(fā)實(shí)例精講[M].北京:電子工業(yè)出版社,2006.
[2]美國(guó)ATMEL公司.AT89C5131單片機(jī)[Z].2006.
[3]徐愛(ài)鈞,彭秀華.Keil Cx51 V7.0單片機(jī)高級(jí)語(yǔ)言編程與Vision 2應(yīng)用實(shí)踐[M].北京:電子工業(yè)出版社,2004.
[4]曾斯堅(jiān),梁杰申.基于USB的大型建筑分布式數(shù)據(jù)采集系統(tǒng)[J].微計(jì)算機(jī)信息,2006,22(4):167-169.
[5]才永勝,李杏春,王占國(guó).AT89C5131在USB設(shè)計(jì)中的應(yīng)用[J].儀器儀表用戶,2006,13(6):105-106.
[6]余易翀,謝劍英,陳應(yīng)麟.基于AT89C5131的車輛行駛記錄儀的硬件設(shè)計(jì)[J].控制工程,2006,13(3):262-263,267.
[7]米昶,董峰,解統(tǒng)燕.Protel DXP電路設(shè)計(jì)基礎(chǔ)敎程[M].北京:機(jī)械工業(yè)出版社,2005.
[8]吳明琪.嵌入式系統(tǒng)的USB虛擬串口設(shè)計(jì)[EB/OL].CE China,2006.
[9]郁成軍,韓振鐸,馬燕飛.基于單片機(jī)89C51的異步串行接口鍵盤(pán)設(shè)計(jì)[EB/OL].21IC中國(guó)電子網(wǎng),2007.
[10]郭水保,高艷霞,王道洪.基于AT89C51單片機(jī)的LED彩燈控制器設(shè)計(jì)[EB/OL].21IC中國(guó)電子網(wǎng),2007.