基于單片機(jī)SPI器件的串口控制
摘要:集成電路設(shè)計(jì)越來越向系統(tǒng)級(jí)的方向發(fā)展,并且越來越強(qiáng)調(diào)模塊化的設(shè)計(jì)。SPI總線是Motorola公司提出的一個(gè)同步串行外設(shè)接口,容許CPU與各種外圍接口器件以串行方式進(jìn)行通信、交換信息。在此簡(jiǎn)述了SPI總線的特點(diǎn),介紹了它的四條信號(hào)線及SPI串行總線接口的典型應(yīng)用。重點(diǎn)描述SPI串行總線接口在DA芯片中的應(yīng)用,并給出用C語言描述實(shí)現(xiàn)該接口通信的部分程序。該程序已經(jīng)在AT89C2051中進(jìn)行驗(yàn)證。
關(guān)鍵詞:SPI;串口控制;AD7390;單片機(jī)
0 引 言
串行外設(shè)接口(Serial Peripheral Interface,SPI)是一種高速同步串行輸入/輸出端口,近年來廣泛應(yīng)用于移位寄存器、D/A轉(zhuǎn)換器、A/D轉(zhuǎn)換器、串行E2PROM、LED顯示驅(qū)動(dòng)器等外部設(shè)備的擴(kuò)展。SPI接口可以共享,便于組成帶多個(gè)SPI接口器件的系統(tǒng)。其傳送速率可編程,連接線少,具有良好的擴(kuò)展性。
1 SPI接口介紹
SPI是摩托羅拉公司推出的一種同步串行通信接口,用于微處理器、微控制器和外圍擴(kuò)展芯片之間的串行連接,現(xiàn)已發(fā)展成為一種工業(yè)標(biāo)準(zhǔn)。目前,各半導(dǎo)體公司推出了大量的帶有SPI接口的具有各種各樣功能的芯片,如RAM,E2PROM,F(xiàn)LASH ROM,A/D轉(zhuǎn)換器、D/A轉(zhuǎn)換器、LED&LCD顯示驅(qū)動(dòng)器、I/0接口芯片、實(shí)時(shí)時(shí)鐘、UART收發(fā)器等,為用戶的外圍擴(kuò)展提供了極其靈活而價(jià)廉的選擇。由于SPI總線接口只占用微處理器四個(gè)I/O口線,故采用SPI總線接口可以簡(jiǎn)化電路設(shè)計(jì)。節(jié)省很多常規(guī)電路中的接口器件和I/O口線,提高設(shè)計(jì)的可靠性。目前,已有部分廠家的單片機(jī)具有SPI接口,如Philips的P89LPC900,Atmel的Atmega128等,但是,大部分單片機(jī)不支持SPI接口。在實(shí)際應(yīng)用中,出于產(chǎn)品體積、成本和可擴(kuò)展性等方面的考慮,設(shè)計(jì)人員往往希望使用不具備SPI接口的單片機(jī)來控制具備SPI接口的外圍器件?,F(xiàn)以AT89C2051單片機(jī)模擬SPI總線操作串行AD7390為例,如圖1所示,介紹利用單片機(jī)的I/O口通過軟件模擬SPI總線的實(shí)現(xiàn)方法。
SPI使用的四條線是串行時(shí)鐘線(SCK)、主機(jī)輸入從機(jī)輸出線(MISO)、主機(jī)輸出從機(jī)輸入線(MOSI)、低電平有效的使能信號(hào)線(CS)。這樣,僅需3~4根數(shù)據(jù)線和控制線即可擴(kuò)展具有SPI接口的各種I/O器件。
SPI 總線具有以下特點(diǎn):
(1)因連線較少,可簡(jiǎn)化電路設(shè)計(jì)。并行總線擴(kuò)展方法通常需要8根數(shù)據(jù)線、8~16根地址線、2~3根控制線。而SPI總線設(shè)計(jì),僅需4根數(shù)據(jù)線和控制線即可完成并行擴(kuò)展所實(shí)現(xiàn)的功能。
(2)器件統(tǒng)一編址,并與系統(tǒng)地址無關(guān),操作SPI獨(dú)立性好。
(3)器件操作遵循統(tǒng)一的規(guī)范.使系統(tǒng)軟硬件具有良好的通用性。
[!--empirenews.page--]
2 AD7390的基本結(jié)構(gòu)和工作原理
AD7390是ADl公司生產(chǎn)的12位分辨率電壓輸出數(shù)/模轉(zhuǎn)換器。該DAC為用戶提供低成本、高精度的可控電壓解決方案,使用單電源+3V系統(tǒng)供電。器件保證電源電壓為2.7~5.5V時(shí)消耗不到100mA的電流,所以該器件適用于一些對(duì)功效要求高的設(shè)備,比如電池供電系統(tǒng)。輸出電壓取決于外部參考輸入電壓。DACOUT輸出介于REFIN與地之間的任意值,其內(nèi)部框圖如圖2所示。
內(nèi)部雙緩沖串行數(shù)據(jù)接口提供高速轉(zhuǎn)換,微控制器通過三線SPI控制器件、串行數(shù)據(jù)(SDI)、時(shí)鐘(CLK)和使能(LD)引腳。此外,使用CLR輸入可以對(duì)輸出清零。操作時(shí)序如圖3所示。
3 AD7390的串口控制
電腦通過RS 232向MCU發(fā)送控制信號(hào),再由MCU控制AD7390,完成整個(gè)設(shè)置過程。通過串口控制AD7390的軟件流程如圖4所示。一旦有數(shù)據(jù)寫入單片機(jī),則單片機(jī)將重新設(shè)置AD7390。
單片機(jī)程序分為三大模塊,分別是SPI控制模塊、串口接收模塊和操作信息反饋模塊。
SPI控制模塊產(chǎn)生CLK,LD,并在CLK的上升沿到來之前,保證SDI數(shù)據(jù)的穩(wěn)定,以便AD7390準(zhǔn)確地采集到數(shù)據(jù)。CLK時(shí)鐘的頻率根據(jù)器件的典型延遲決定,不同器件有不同的延遲,所以它決定了不同器件的時(shí)鐘應(yīng)該不一樣。
串口接收模塊完成從電腦接收數(shù)據(jù)并保存數(shù)據(jù)。由一片MAX 232完成RS 232電平與TTL電平之間的轉(zhuǎn)換。因?yàn)閭鬏數(shù)氖沁B續(xù)性數(shù)據(jù),因此在接收程序的編寫時(shí),要注意中斷申請(qǐng)的屏蔽,才能準(zhǔn)確地接收到全部數(shù)據(jù)。
在利用串口調(diào)試助手調(diào)試時(shí),留意發(fā)送數(shù)據(jù)的格式,是否以16進(jìn)制發(fā)送,會(huì)影響接收到的數(shù)據(jù)。比如,發(fā)送字母“E”,如果以16進(jìn)制發(fā)送。發(fā)送的實(shí)際數(shù)據(jù)是“15”,而接收到的數(shù)據(jù)是“15”的ASCII碼“49”、“53”;如果不以16進(jìn)制發(fā)送,則發(fā)送的是字母“E”的ASCII碼“69’。由此可以看出它們之間的差別。因此在接收方要得到想要的數(shù)據(jù),則需要進(jìn)行轉(zhuǎn)換。該轉(zhuǎn)換可參看后面的程序。[!--empirenews.page--]
操作信息反饋模塊完成操作結(jié)果的可視化輸出,通過內(nèi)部計(jì)算,輸出設(shè)置的電壓值,這為調(diào)試過程提供了很大的便利。
AD7390為12位數(shù)/模轉(zhuǎn)換器。該器件接收16位數(shù)據(jù),數(shù)據(jù)格式如圖5所示,取低12位作為有效數(shù)據(jù),自動(dòng)舍棄高4位。因?yàn)閱纹瑱C(jī)傳輸數(shù)據(jù)以字節(jié)(8 b)為單位,所以采用16位傳輸模式。
4 結(jié) 語
通過串口的應(yīng)用,SPI器件的控制變得很方便。由于串口占用資源少,所以SPI接口在集成芯片中越來越廣泛的應(yīng)用,將使該控制模式成為以后系統(tǒng)中的典型設(shè)計(jì)。