新型數據通信方式GSM-R手持終端的實(shí)現
4 軟件實(shí)現
本文使用ATMEGA48的SPI接口直接控制WT588D,對其相應的地址進(jìn)行讀操作,完成選定語(yǔ)音的播放。SPI收發(fā)程序往往是一段采用輪循方式完成收發(fā)的簡(jiǎn)單代碼,也就是單片機通過(guò)MOSI寄存器發(fā)送數據。同時(shí)根據查詢(xún)MOSI狀態(tài)寄存器的狀態(tài)來(lái)判斷是否能發(fā)送下一個(gè)數據。在此過(guò)程中,單片機處于死等的狀態(tài),不能進(jìn)行任何其它任務(wù)的執行。對于高速的AVR來(lái)講,采用這種方式大大降低了MCU的效率,無(wú)法發(fā)揮其高速、高效的特點(diǎn)。同時(shí),由于A(yíng)TMEGA48在完成語(yǔ)音回示的同時(shí),還需要完成語(yǔ)音通話(huà)、故障記錄等功能,因此需要MCU能更高效地完成SPI收發(fā)功能。
在使用ATMEGA48時(shí),根據芯片本身的特點(diǎn)(片內大容量RAM,適合采用高級語(yǔ)言編寫(xiě)系統程序),使用了一種新的方法,采用接收和發(fā)送緩沖器加中斷的方法,編寫(xiě)高效可靠的SPI收發(fā)程序。
基本思路如下:
1、發(fā)送數據時(shí),如果MOSI數據寄存器為空,則直接將需要發(fā)送的數據填入MOSI數據寄存器,由單片機自動(dòng)完成數據的發(fā)送。
2、發(fā)送數據時(shí),如果MOSI數據寄存器不為空,也就是說(shuō)有待發(fā)的數據,此時(shí)將需要發(fā)送的數據填入發(fā)送數據緩沖區(構建在A(yíng)TMEGA48的RAM中)。單片機將數據置入發(fā)送緩沖區中,就算已經(jīng)完成了數據的發(fā)送,可以執行別的指令,這樣,充分發(fā)揮了其并行高速運行的特點(diǎn)。本文在中斷處理程序中完成對發(fā)送緩沖區數據的處理。每次MOSI數據寄存器數據發(fā)送完成,都會(huì )產(chǎn)生一個(gè)中斷,因此當產(chǎn)生中斷時(shí),表明前一個(gè)數據已經(jīng)發(fā)送完成,將待發(fā)的發(fā)送緩沖區數據置入MOSI數據寄存器,進(jìn)行數據的自動(dòng)發(fā)送。
以下為SPI數據發(fā)送程序和SPI中斷處理程序,流程分別如圖2、圖3所示。
圖2 數據發(fā)送程序
圖3 中斷處理程序
采用緩沖加中斷的SPI發(fā)送方法,能夠高效地完成數據的收發(fā),提高M(jìn)CU的效率,具有以下優(yōu)點(diǎn):
l、采用兩個(gè)8字節的接收和發(fā)送緩沖器來(lái)提高M(jìn)CU的效率,如當程序發(fā)送數據時(shí),如果SPI口不空閑,就將數據放入發(fā)送緩沖器中,MCU不必等待,可以繼續執行其它工作。而SPI的硬件發(fā)送完一個(gè)數據后,產(chǎn)生中斷,由中斷服務(wù)程序負責將發(fā)送緩沖器中的數據依次送出。
2、數據緩沖器結構是一個(gè)線(xiàn)性的循環(huán)隊列,由讀、寫(xiě)和隊列計數器3個(gè)指針控制,用于判斷隊列是否空、溢出,以及當前數據在隊列中的位置。
3、由于在數據發(fā)送程序和中斷服務(wù)程序中都要對數據緩沖器的讀、寫(xiě)和隊列計數器3個(gè)指針進(jìn)行判斷和操作,為了防止沖突,在數據發(fā)送程序中對3個(gè)指針操作時(shí)臨時(shí)將中斷關(guān)閉,提高了程序的可靠性。
5 結語(yǔ)
整個(gè)控制系統采用緩沖加中斷的SPI發(fā)送方法,使用兩個(gè)數據緩沖器,分別構成循環(huán)隊列。這種程序設計思路,不但程序的結構性完整,同時(shí)也解決了高速MCU和低速串口之間的矛盾,實(shí)現 程序中任務(wù)的并行運行,提高了MCU的運行效率,同時(shí)這種程序設計的思路對編寫(xiě)UART、I2C的串行通信接口程序都是非常好的借鑒。
數字通信相關(guān)文章:數字通信原理
通信相關(guān)文章:通信原理
評論