利用DM6437的McBSP配置SPI與ARM_S2440通信
MCBSP的內部框圖:
這兩個(gè)端口也支持時(shí)鐘停止模式,內部FSR與FSX、CLKX與CLKR連接在一起,這時(shí)候DX為MOSI,,DR為MISO,CLKX為SCK和FSX為nSS。
配置SPI口要注意的地方:通信模式選擇要一致;SPI提供了四種通信模式:SPI0、SPI1、SPI2、SPI3。
McBSP通過(guò)配置CLKSTP與CLKXP來(lái)設置這四種模式:
一般而言SPI0模式采用的多一些。
SPI初始化步驟:
在這之前還有兩個(gè)操作必須完成,DM6437的管腳復用設置為McBSP模式、McBSP的IO上電。(可以直接寫(xiě)相關(guān)寄存器、或者調用CSL函數),管腳復用只是設置DSP芯片管腳的引出方式,McBSP會(huì )有一個(gè)特殊情況,需要檢測第一個(gè)幀同步信號;這個(gè)時(shí)候就可以復用FSX腳為GPIO腳,用GPIO來(lái)檢測信號的變化,因此我們有理由相信無(wú)論用戶(hù)采用配置出來(lái)是什么形態(tài),內部這些腳其實(shí)是連在一起的。另外還申明一個(gè)誤區:管腳復用和接口寄存器配置并沒(méi)有關(guān)系,用戶(hù)可以隨時(shí)配置McBSP接口的相關(guān)寄存器,而不需要指定這些腳已經(jīng)映射為McBSP管腳;當然還是得滿(mǎn)足IO上拉的條件。
DM6437
DM6437
編寫(xiě)程序可以根據CSL庫提供的函數,可能看到TI針對DM6437不再提供CSL驅動(dòng)了,而是提供PSP驅動(dòng);但是這話(huà)不絕對,TI還是有DM6437可用的CSL庫函數可以用,但是對我而言采用的是CSL提供的定義,自己編寫(xiě)函數;因為我找到了CSL支持的寄存器數據結構,但是沒(méi)有找到相應的CSL函數說(shuō)明,沒(méi)有看到函數原型。
配置SPI口其實(shí)是很簡(jiǎn)單的,雖然我花費了太多的時(shí)間,這個(gè)最后我會(huì )說(shuō)明,自己配置寄存器,可以很簡(jiǎn)單的直接給寄存器賦值,只要計算好該寄存器最后的值是什么直接賦值就可以了,但是需要注意復位腳設置什么的。。。該延時(shí)的要延時(shí)。這種寄存器配置一般而言沒(méi)有什么先后順序,沒(méi)有什么要求;有要求的文檔會(huì )有標注。如果不是一次性設定寄存器的值,那么在設置寄存器的時(shí)候一定要很小心取與取或的時(shí)候不要覆蓋了前面的設置;這個(gè)因為我第一次是一位一位設置的,沒(méi)有注意;到得到的和自己想要的完成是兩回事。推薦一次性設置,當然可讀性不就會(huì )這么好,可讀性可以在程序跑通了再追求。
PSP_103什么版本的,如果自己電腦上面正好有這個(gè)驅動(dòng),那么直接調用,那就可以很簡(jiǎn)單了,和填空差不多了。LLC提供了底層驅動(dòng)的,這個(gè)部分和自己配置寄存器一樣的道理,DDC為驅動(dòng)核心層,提供了OS與底層的交互,也就是我們常說(shuō)的PSP驅動(dòng)了;BIOS是上層系統層調用了。如果對PSP熟悉,那么可以自己決定程序寫(xiě)在哪一層,這個(gè)就是DM6437與DM642最大的不同。一般而言,我喜歡直接操作底層,從DM642養成的習慣。
另外說(shuō)一下SPI數據通信的能力:
如果主設備采用內部時(shí)鐘,則SPI內部時(shí)鐘為CPU時(shí)鐘/6,因為主設備和從設備要保持同步,卻又采用各自的時(shí)鐘,所以必須保證從設備擁有同步能力,從設備的時(shí)鐘必須大于主設備時(shí)鐘8倍,從設備通常默認設置到最大時(shí)鐘能力、即CLKDVG=1。
另外數據的傳輸方式也會(huì )對數據通信能力有很大引向,McBSP提供了三種方式:CPU查詢(xún)模式、CPU中斷模式、EDMA3模式。采用EDMA3模式可以獲得最大的數據通信能力,當然驅動(dòng)編寫(xiě)就復雜一些,如果采用PSP倒也罷了。
最后說(shuō)一下在調試中遇到的問(wèn)題:
1)
2)
3)
void SPI_Slave_Init ( unsigned long Bits )
{
}
評論