基于TMS320F2812的SPI接口設計方案
2.2 接收數據流程
通過(guò)SPI讀取數據比較簡(jiǎn)單,只需要依次傳送讀指令和待讀數據的低位地址,就可以在SPISOMI引腳上接收到25LC040中的數據。因為T(mén)MS320F2812為主控制器,所以必須先發(fā)送一個(gè)無(wú)意義的數,才能夠啟動(dòng)時(shí)鐘。在SPI狀態(tài)寄存器(SPISTS)中有一個(gè)SPI中斷標志位(SPIINT FLAG),該位是一個(gè)只讀標志位,由硬件設置。當SPI已經(jīng)完成數據發(fā)送或者接收,正在等待下一步的操作時(shí),SPI中斷標志位被置1,若使能SPI中斷,將產(chǎn)生一個(gè)SPI中斷請求??梢酝ㄟ^(guò)查詢(xún)SPI中斷標志位來(lái)判斷數據是否完成接收。若該標志為1,已接收的數據將被放入接收緩沖寄存器SPIRXBUF中,通過(guò)讀SPIRXBUF寄存器即可得到需要的數據。下面給出接收數據的子程序,其中addr為待讀數據的低位地址。本文引用地址:http://dyxdggzs.com/article/201612/331355.htm
2.3 發(fā)送數據流程
SPI發(fā)送數據需要先完成寫(xiě)使能操作,然后依次傳送寫(xiě)指令和低位地址,才可以正確地進(jìn)行數據寫(xiě)入。向SPITXBUF寄存器中寫(xiě)入待發(fā)的數據,SPI時(shí)鐘就會(huì )自動(dòng)啟動(dòng),數據會(huì )由輸出引腳順次傳出;數據傳送完后,SPI時(shí)鐘自動(dòng)停止。也可以通過(guò)查詢(xún)SPI中斷標志位來(lái)判斷數據是否完成發(fā)送,若該標志位為1,則可接著(zhù)發(fā)送下一個(gè)數據。SPI設置成主模式時(shí),發(fā)送完一個(gè)數據,必須要空讀一下SPIRXBUF寄存器,以清除SPI中斷標志位。由于在讀取數據的過(guò)程中已經(jīng)包含讀SPIRXBUF寄存器,因此在讀取數據時(shí)不需要再空讀SPIRXBUF寄存器。下面給出發(fā)送數據程序,其中data為待發(fā)送的數據,addr為待發(fā)送數據將要存放的地址。
2.4 運行效率的提升
25LC040要求在寫(xiě)操作之后有一定的寫(xiě)周期時(shí)間來(lái)存儲數據,其間TMS320F2812對25LC040的所有訪(fǎng)問(wèn)會(huì )被忽略。每個(gè)器件都有規定的最壞情況寫(xiě)周期時(shí)間,可以通過(guò)在再次訪(fǎng)問(wèn)25LC040之前插入不小于最壞情況寫(xiě)周期時(shí)間的延時(shí)等待來(lái)確保遵守寫(xiě)周期時(shí)間。但是25LC040常常會(huì )在最大規定時(shí)間內完成寫(xiě)周期,而此時(shí)TMS320F2812還在等待,會(huì )造成不必要的時(shí)間浪費。25LC040內部有一個(gè)狀態(tài)寄存器,其第l位為WIP(Write-In-Process)位,該位是一個(gè)只讀位,可以顯示25LC040是否處在寫(xiě)周期內。當芯片處于寫(xiě)周期時(shí),WIP位置1;當寫(xiě)操作完成時(shí),WIP位立即清零。狀態(tài)寄存器在寫(xiě)操作期間仍然可讀,可以通過(guò)讀狀態(tài)寄存器指令(WRSR)來(lái)獲取狀態(tài)寄存器的內容,從而得到WIP位的值以判斷寫(xiě)周期何時(shí)完成,以進(jìn)入下一步操作。這樣就可以減少不必要的等待時(shí)間,使運行更加高效。具體的流程如圖5所示。
結語(yǔ)
本文在分析TMS320F2812 SPI模塊的特點(diǎn)的基礎上,描述了SPI各個(gè)控制寄存器的作用。通過(guò)與EEPROM25LC040通信的實(shí)例,給出了SPI口的軟硬件設計方法,并對其中需要注意的關(guān)鍵問(wèn)題進(jìn)行了分析討論。
評論