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