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