AT89C5131是一個(gè)基于52內(nèi)核的單片機(jī),。在存儲(chǔ)器方面,,其內(nèi)部集成了32KB的Flash存儲(chǔ)器用于代碼的存儲(chǔ),1KB的EEPROM存儲(chǔ)器用于用戶數(shù)據(jù)的存儲(chǔ),,用戶可以使用片上的Bootloader或Flash API通過USB接口或者其他接口(如UART和I2C總線)對(duì)Flash存儲(chǔ)器和EEPROM存儲(chǔ)器進(jìn)行ISP或者IAP編程,。 此外AT89C5131還集成了10位的ADC、I2C總線接口和PCA模塊等豐富的外設(shè),。
AT89C5131的USB2.0全速?gòu)慕涌诘慕Y(jié)構(gòu)如圖3所示,,其包括USB D+/D-的接口緩沖,數(shù)字鎖相環(huán),,串行接口引擎(SIE)和通用功能接口(UFI),。其中數(shù)字鎖相環(huán)以單片機(jī)的時(shí)鐘為輸入,產(chǎn)生了USB接口其他部分所需的48MHz時(shí)鐘,。串行接口引擎完成USB通信物理層NRZI碼的編碼與解碼,,CRC生成以及校驗(yàn)與糾錯(cuò)。通用功能接口包含了一個(gè)雙端口的數(shù)據(jù)存儲(chǔ)器,,其一端與串行接口引擎鏈接,,另一端通過數(shù)據(jù)總線與單片機(jī)相連接,使單片機(jī)可以通過特殊功能寄存器完成對(duì)USB2.0從接口的控制與通信,。
1 系統(tǒng)硬件設(shè)計(jì)
基于AT89C5131的通信和控制模塊主要完成以下功能:在通信方面,,通過USB實(shí)現(xiàn)與計(jì)算機(jī)的通信,接收計(jì)算機(jī)對(duì)設(shè)備的控制命令和計(jì)算機(jī)發(fā)送的數(shù)據(jù),,并將設(shè)備的工作狀態(tài)發(fā)送給計(jì)算機(jī),,同時(shí)將計(jì)算機(jī)傳來的控制命令和數(shù)據(jù)通過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的鍵盤端口特性及鍵盤設(shè)計(jì)
AT89C5131擁有一個(gè)允許與8×n矩陣鍵盤連接的鍵盤接口,其輸入均具有高或低電平可編程中斷能力,。鍵盤接口與C51內(nèi)核的通信通過3個(gè)特殊功能寄存器實(shí)現(xiàn),,分別是鍵盤電平選擇寄存器(KBLS)、鍵盤中斷使能寄存器(KBE)和鍵盤標(biāo)志寄存器(KBF),。
AT89C5131的鍵盤輸入被設(shè)計(jì)為分享同一個(gè)中斷向量的8個(gè)獨(dú)立的中斷源,,寄存器IEN1中的中斷使能位KBD允許鍵盤中斷全局的使能及不使能,根據(jù)KBLS每一位的值,,每一個(gè)鍵盤輸入都有檢測(cè)出可編程電平的能力,,然后鍵盤檢測(cè)就被反應(yīng)到KBF中,而通過軟件使用KBE可以屏蔽中斷標(biāo)志KBF.正是這樣的結(jié)構(gòu)使得鍵盤排列可以從1×n延伸至8×n的矩陣,,同時(shí)還使得P1輸入用于其他用途,。
在該設(shè)計(jì)中,將4個(gè)鍵盤端口(P1.O,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.2 USB各端口的特性及USB通信設(shè)計(jì)
AT89C5131的USB2.0全速?gòu)慕涌诎?個(gè)終端點(diǎn),其中0號(hào)終端點(diǎn)被配置成為默認(rèn)的控制終端點(diǎn),。其他1~6號(hào)終端點(diǎn)都可以通過特殊寄存器配置為控制(Control),,突發(fā)(Bulk),中斷(Interrupt)和周期性(Isochronous)模式,。由于每一個(gè)終端點(diǎn)都由一組獨(dú)立的寄存器對(duì)該終端點(diǎn)進(jìn)行控制,、狀態(tài)識(shí)別和數(shù)據(jù)的存取,,則如果將這些寄存器直接映射到51單片機(jī)的特殊功能寄存器地址空間顯然是容納不下的,。因此,這7個(gè)終端點(diǎn)的7組寄存器在單片機(jī)的地址空間中其實(shí)使用的是同一組寄存器的地址,,而通過一個(gè)特殊功能寄存器(UEPNUM)來選擇當(dāng)前該組寄存器實(shí)際選擇的是哪個(gè)終端點(diǎn)的寄存器組,,這樣就大大節(jié)省了所占用的地址空間,為集成其他特殊外設(shè)提供了可能,。
在該設(shè)計(jì)中,,PC機(jī)將數(shù)據(jù)通過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ū)分開來,,使用USB的端口4和端口6接收這兩種數(shù)據(jù)。其中,,端口4用來接收控制命令,;端口6用來接收參數(shù)。相應(yīng)地,,控制命令的回傳使用端口5;參數(shù)的回傳使用端口3.為簡(jiǎn)單起見,,端口3~端口6均被配置為批量類型;端口3,、端口5為IN端口,;端口4、端口6為OUT端口,。
1.3 SPI端口特性及SPI通信設(shè)計(jì)
SPI(Serial Peripheral Interface--串行外設(shè)接口)總線系統(tǒng)是一種同步串行外設(shè)接口,,它可以使MCU與各種外圍設(shè)備以串行方式進(jìn)行通信以交換信息。SPI有三個(gè)寄存器分別為:控制寄存器SPCR,狀態(tài)寄存器SPSR,數(shù)據(jù)寄存器SPDR.外圍設(shè)置FLASHRAM,、網(wǎng)絡(luò)控制器,、LCD顯示驅(qū)動(dòng)器、A/D轉(zhuǎn)換器和MCU等,。SPI總線系統(tǒng)可直接與各個(gè)廠家生產(chǎn)的多種標(biāo)準(zhǔn)外圍器件直接接口,,該接口一般使用4條線:串行時(shí)鐘線(SCLK)、主機(jī)輸入/從機(jī)輸出數(shù)據(jù)線MISO,、主機(jī)輸出/從機(jī)輸入數(shù)據(jù)線MOSI和低電平有效的從機(jī)選擇線SS(有的SPI接口芯片帶有中斷信號(hào)線INT,、有的SPI接口芯片沒有主機(jī)輸出/從機(jī)輸入數(shù)據(jù)線MOSI)。SPI接口的全稱是"Serial Peripheral Interface",意為串行外圍接口,,是Motorola首先在其MC68HCXX系列處理器上定義的,。SPI接口主要應(yīng)用在EEPROM,FLASH,實(shí)時(shí)時(shí)鐘,AD轉(zhuǎn)換器,,還有數(shù)字信號(hào)處理器和數(shù)字信號(hào)解碼器之間,。
AT89C5131的SPI模塊允許在McU和其他外圍設(shè)備之間實(shí)現(xiàn)全雙工、同步,、串行通信,,它能以配置為主或者從兩種操作模式提供可編程極性和相位串行時(shí)鐘,同時(shí)還提供8個(gè)可編程的主機(jī)時(shí)鐘率,。SPI模塊包括4個(gè)端點(diǎn)(MOSI,MISO,SCK,SS),,MOSI和MISO都是用來傳輸數(shù)據(jù)的,且每次只能傳輸1個(gè)字節(jié)的數(shù)據(jù),。不同的是,,MOSI將數(shù)據(jù)由主機(jī)輸出從機(jī)輸入,而MISO正好相反,。SCK信號(hào)用以使通過MOSI和MI-SO的數(shù)據(jù)輸人/輸出設(shè)備同步,,它可以由主機(jī)驅(qū)動(dòng)產(chǎn)生8個(gè)時(shí)鐘周期,,用以完成一個(gè)字節(jié)在串行通道上的交換。SS用于從機(jī)的選擇,,低有效,。SPI模塊的配置和初始化可以通過寄存器SPCON完成,而數(shù)據(jù)的交換則需要使用寄存器SPSTA和SPDAT兩個(gè)寄存器,,在軟件編寫過程中,,SPI能否正常工作主要取決于對(duì)上述3個(gè)寄存器的操作。
在該設(shè)計(jì)中,,SPI被配置為主機(jī)模式,;SS端口處于無效狀態(tài);AT89C5131通過MOSI端口向DSP傳輸參數(shù)及控制命令,;DSP通過軟件設(shè)置P1.1(SS)端口的狀態(tài)表明數(shù)據(jù)是否正確接收,,即若正確接收,則置P1.1為1,否則置P1.1為0;AT89C5131通過檢測(cè)P1.1的值來決定是否重傳數(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ì),,軟件設(shè)計(jì)采用C語言編程,最后軟件通過FLIP下載到AT89C5131芯片中,。這里所采用的編譯環(huán)境為KeilμVision 3軟件設(shè)計(jì)平臺(tái),。在具體的工程實(shí)現(xiàn)過程中,也遇到了一些問題,,但經(jīng)過反復(fù)的修改及調(diào)試,,這些問題都得到了很好的解決,其中主要有以下幾個(gè)方面:
按鍵功能實(shí)現(xiàn)控制面板按鍵的功能是通過電平觸發(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)過調(diào)試,上面的問題沒有再出現(xiàn),。
USB通信系統(tǒng)系統(tǒng)要求USB能夠快速、高效地實(shí)現(xiàn)通信,,對(duì)于速度問題可以通過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端口的處理速度,所以每通過AT89C5131的SPI傳輸一組數(shù)據(jù)時(shí),,DSP總需要通過軟件控制等待很長(zhǎng)一段時(shí)間,,既便如此也不能保證數(shù)據(jù)得到正確接收。于是,,后來就將AT89C5131的SPI工作模式修改為主機(jī)模式,,由AT89C5131主動(dòng)控制數(shù)據(jù)的傳輸。然而實(shí)現(xiàn)雙向通信的關(guān)鍵是對(duì)SS信號(hào)的控制,,在上述工作模式下,,SS必須無效,Slave才能較可靠地向發(fā)送寄存器寫數(shù),。
3 結(jié) 語
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)過實(shí)踐檢驗(yàn),,證明其合理且操作靈活,具有一定的實(shí)用意義,。在設(shè)計(jì)過程中,,深切體會(huì)到硬件設(shè)計(jì)與軟件設(shè)計(jì)的極大不同。編譯正確且邏輯沒有問題的程序源代碼,,將其燒寫至芯片后,,硬件電路并不一定能完全地實(shí)現(xiàn)所要求的功能,所以必須經(jīng)過反復(fù)的修改程序,、燒寫,、調(diào)試,直至正確實(shí)現(xiàn)功能,。