<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 手機與無(wú)線(xiàn)通信 > 設計應用 > 新型數據通信方式GSM-R手持終端的實(shí)現

新型數據通信方式GSM-R手持終端的實(shí)現

作者: 時(shí)間:2011-07-24 來(lái)源:網(wǎng)絡(luò ) 收藏

4 軟件

  本文使用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和低速串口之間的矛盾, 程序中任務(wù)的并行運行,提高了MCU的運行效率,同時(shí)這種程序設計的思路對編寫(xiě)UART、I2C的串行通信接口程序都是非常好的借鑒。

數字通信相關(guān)文章:數字通信原理


通信相關(guān)文章:通信原理



上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>