基于MCU的室外移動機(jī)器人組合導(dǎo)航定位系統(tǒng)
2.5 SPI轉(zhuǎn)UART電路
本文引用地址:http://m.ptau.cn/article/273857.htm由于MSP430F149的片上UART資源都被IMU器件和GNSS接收機(jī)占用,因此需要擴(kuò)充一個UART接口才能滿足定位系統(tǒng)與PC機(jī)間的通信。為此將MSP430F149上的GPIO模擬SPI,再通過MAX3111E芯片轉(zhuǎn)成UART接口。
MAX3111E是MAXIM公司推出的全功能收發(fā)器,內(nèi)部包含UART和RS232電平轉(zhuǎn)換兩個獨(dú)立的部分。UART部分包括兼容于SPI的串行接口、可編程波特率發(fā)生器、發(fā)送移位寄存器、接收移位寄存器、8字長的FIFO以及4種可屏蔽中斷發(fā)生器;RS232部分包括電泵電容、硬件關(guān)斷(SHDN管腳),具有±15kV靜電保護(hù)作用。它可以選擇1.8432MHz或3.6864MHz兩種晶振作為外部晶振,芯片能夠工作在300bps~230kbps波特率,本文使用的是3.6864MHz晶振。MAX3111E與MSP430F149連接電路如圖5.

圖5 SPI轉(zhuǎn)UART電路
MAX3111E的控制命令分為寫配置命令、讀配置命令、寫數(shù)據(jù)命令以及讀數(shù)據(jù)命令四種。本文寫入芯片的配置命令是0xE809,8bit數(shù)據(jù)長度、使能FIFO、發(fā)送中斷使能、波特率38400bps.數(shù)據(jù)的寫入需要在每個字節(jié)前面加上0x81,例如若要發(fā)送字節(jié)0x55,則需要從DIN端移位輸入0x8155.
下面是連續(xù)發(fā)送n個字節(jié)的C語言代碼:
SPI_WRITE_16BIT(0xE809);//寫配置命令
delay_ms(10);//延時10ms
SPI_WRITE_16BIT(0x8100+DATA1);//發(fā)送第1個數(shù)據(jù)DATA1
delay_ns(250);//延時250ns
SPI_WRITE_16BIT(0x8100+DATA2);//發(fā)送第2個數(shù)據(jù)DATA2
……
delay_ns(250);//延時250ns
SPI_WRITE_16BIT(0x8100+DATAn);//發(fā)送第n個數(shù)據(jù)DATAn
使用MAX3111E時需要注意:
1、片選信號CS的下降沿到時鐘SCLK信號的第一個上升沿至少要有100ns的時間延遲;
2、芯片判定片選信號CS失效時,需要CS管腳保持高電平的時間至少為200ns.因此當(dāng)需要連續(xù)發(fā)送數(shù)據(jù)時,兩個寫數(shù)據(jù)命令之間至少需要200ns,建議間隔250ns;
3、寫配置命令需要晶振工作穩(wěn)定,因此可以在寫配置命令后再讀配置,直到寫入和讀出的配置數(shù)據(jù)相應(yīng)位相同時才保證芯片按需求配置完畢。
3軟件設(shè)計
3.1 GPIO模擬SPI實(shí)現(xiàn)方法
使用GPIO模擬SPI,對選定的IO口進(jìn)行時序上的電平操作,模擬出SPI時序。本文將SPI的電平操作采用宏定義的方式,可參考表3中的源代碼。

程序按照SPI邏輯關(guān)系使用上述的宏定義,可以在選定的IO端口產(chǎn)生SPI信號,并且可以靈活的控制每個CS有效期間的時鐘數(shù)。使用GPIO模擬的SPI具有操作直觀、靈活可變等優(yōu)點(diǎn)。相比較模擬得到的SPI,控制器上自帶的SPI接口基本不占用控制器資源,發(fā)送和接收的移位、時鐘信號的產(chǎn)生都交由內(nèi)部SPI模塊處理。而GPIO模擬的SPI需要控制器不斷對IO進(jìn)行操作,因此會占用控制器處理時間。時鐘信號也因?qū)﹄娖讲僮飨臋C(jī)器周期,導(dǎo)致時鐘信號速度有限。
c語言相關(guān)文章:c語言教程
加速度計相關(guān)文章:加速度計原理
評論