電子工程網(wǎng)
標題:
TMS320F280X SPI SPIA使用入門(mén)與總結
[打印本頁(yè)]
作者:
Netjob
時(shí)間:
2009-9-1 08:55
標題:
TMS320F280X SPI SPIA使用入門(mén)與總結
TMS320F280X+SPI+SPIA使用入門(mén)與總結.pdf
(135.49 KB)
2009-9-1 08:55 上傳
點(diǎn)擊文件名下載附件
下載積分: 積分 -1
TMS320F280X SPI SPIA
使用入門(mén)與總結
Netjob @
2009
年
8
月
31
日晚
我使用過(guò)
NXP ARM LPC2138
的
SPI
口,
ATMEL AT91SAM7S256
的
SPI
,
MSP430F5438
的
SPI
口,
還有
STM32
的
SPI
模塊。都是用來(lái)讀
SPI FLASH
例如
AT45DB642D
之類(lèi)。
本以為對
SPI
已經(jīng)入門(mén)了,
誰(shuí)不知使用
TMS320F280X
的
SPI
后,才知道自己其實(shí)還是一知半解。
TMS320F280X
的
SPI
真是好好給我上了一課!
不久前有款
OLED
真彩色液晶。使用的是
SSD1351
控制器,
SPI
接口。
想測試一下它的速度。就把它接到我的
TMS320F280X
的
DSP
開(kāi)發(fā)板上。之前使用
DSP
的
IO
模擬,運行程序后
OLED
的效果不錯的。
本想這次使用
SPI
應該沒(méi)事吧『雖然
I/O
模擬也是使用這個(gè)
SPI
的引進(jìn)』?
新建立一個(gè)工程
MYOLED,
拷貝一些
TMS320F28X
相關(guān)的頭文件,
C
文件。把工程的設置好后,編譯
OK!
加上定時(shí)器中斷用來(lái)點(diǎn)亮一個(gè)
LED
,把
I/O
模擬的工程相關(guān)文件的兩個(gè)子函數改為
SPI
方式的。
在編譯。文件太大非得使用
FLASH
下載仿真。
發(fā)現程序不能運行!
沒(méi)辦法改回
RAM
仿真,把很多函數注釋掉。僅僅留下測試
OLED
的程序。
SSD1351
的測試程序,向它寫(xiě)某命令碼,可以改變
GPIO1/GPIO2
引腳的電平。
其實(shí)移植就是僅僅這兩個(gè)
SPI
底層函數:
void Write_Data(unsigned char Data)
void Write_Command(unsigned char Data)
測試好幾次都沒(méi)反應,
因此
就有下面的入門(mén)與詳解了。
使用的是
SPIA
模塊,如果
SPIB
沒(méi)有什么特別
(
功能設置與
SPIA
差不多的話(huà)
)
也是沒(méi)什么問(wèn)題的。
但是我之前使用
SPIB
測試過(guò),發(fā)覺(jué)
SPIB
還是與
SPIA
有區別的。這點(diǎn)我也很不解~。
按道理應該不會(huì )這樣。但事實(shí)卻是如此
.
TMS320F280X
的
SPI
支持
1-16
位的數據類(lèi)型。
而且
只有
MSB
先發(fā)送,不像
ARM7/STM32
等可以設
MSB
或
LSB
先發(fā)送。
TMS320F280X
的
SPI
有回環(huán)模式,
可以用于測試,自發(fā)自收。
TMS320F280X
的
SPI
有
TX FIFO
和
RX FIFO.
及其中斷字節設置。
看來(lái)沒(méi)什么特別?
是吧~?
先別小看啊~,就是搞不定它呢!
首先是要回環(huán)模式,這樣就是一個(gè)自發(fā)自收,方便測試。
其實(shí)現在看來(lái),我曾經(jīng)范了幾點(diǎn)毛病。
1.
使用
8
位模式,但
SPIA
的總線(xiàn),發(fā)送接收等寄存器都是
16
位模式。
2.
數據的位數設置不對
3.
時(shí)鐘極性與時(shí)鐘相位。
4.
使用了
TX FIFO
與
RX FIFO.
其實(shí)不用使用
FIFO
比較好。為什么?下面會(huì )講。
5.
沒(méi)有完全理解
SPIA
的發(fā)送與接收是【同時(shí)】進(jìn)行的概念,這點(diǎn)實(shí)在很慚愧!
6.
發(fā)送是
MSB
對齊先發(fā)送,接收是
LSB
對齊接收,發(fā)送與接收是【同時(shí)】進(jìn)行的
!
作者:
Netjob
時(shí)間:
2009-9-1 08:55
SSD1351的設置,是:
時(shí)鐘 空閑保持高電平。第二個(gè)時(shí)鐘邊沿數據采樣捕獲,第一時(shí)鐘邊沿鎖存
SCLK的空閑無(wú)效狀態(tài)是高電平 (其實(shí)也可以是低電平,但相位就要改改了,變?yōu)榈诙䝼(gè)時(shí)鐘邊沿鎖存,,第一時(shí)鐘邊沿數據采樣捕獲)
數據的MSB 先發(fā)送。
好了,看看我是如何范這些毛病的,
void Write_Data(unsigned char Data)
void Write_Command(unsigned char Data)
看出參數都是8位的數據,比如要發(fā)送Data=0x55;那么傳輸到DSP 的SPI寄存器里這就出問(wèn)題了!
是吧? 因為是MSB先發(fā)送,這樣0x55到了16位的SPI寄存器例如SpiaRegs.SPITXBUF或
SpiaRegs.SPIDAT 就變?yōu)?x0055了,由于SPIA 設置位8位模式,而且是MSB 先發(fā)送。
那么就是只發(fā)送 0x0055的 00(高8位)了,低8位55就沒(méi)有發(fā)送了。
因此 發(fā)送前要做如下變換:
Uint16 tmp;
tmp=Data;
tmp<<=8;
。。。。
SpiaRegs.SPIDAT =tmp
而接收時(shí)無(wú)需移位,SpiaRegs.SPIDAT、SpiaRegs.SPIRXBUF中低8位就是發(fā)送的tmp
SPIA的數據寬度設為8位。
SpiaRegs.SPICCR.bit.SPICHAR=7;
這個(gè)其實(shí)很簡(jiǎn)單,看看手冊就知道了,不過(guò)我在網(wǎng)上看的HOTPOWER有關(guān)C54X的SPI設置。
就把SpiaRegs.SPICCR.bit.SPICHAR=8;來(lái)設8位的,這點(diǎn)我認為是不對了,雖然我不了解C54的SPI設置。
但估計也與C28X是一樣的吧?哈哈!看來(lái)HOTPOWER也會(huì )范這樣的低級毛?不會(huì )吧?
時(shí)鐘極性與時(shí)鐘相位,其實(shí)我的OLED要求的是
【時(shí)鐘 空閑保持高電平。第二個(gè)時(shí)鐘邊沿數據采樣捕獲,第一時(shí)鐘邊沿鎖存,SCLK的空閑無(wú)效狀態(tài)是高電平】
這個(gè)我想當然的搞錯了:
SpiaRegs.SPICCR.bit.CLKPOLARITY=1; // 空閑時(shí)是高電平 這是對的
SpiaRegs.SPICTL.bit.CLK_PHASE=1;//
這個(gè)是錯的!**
后來(lái)我認真看看了TI C28X SPI的數據手冊,這個(gè)大家一定要好好看看!
這個(gè)圖就是數據在時(shí)鐘下跳沿改變、鎖存,在時(shí)鐘上升沿被捕獲采樣。
如果不明白可以看看我的《精解 SPI 的
CPHA 時(shí)鐘相位 與CPLK 時(shí)鐘極性》
正確如下:
SpiaRegs.SPICCR.bit.CLKPOLARITY=1; // 空閑時(shí)是高電平 這是對的
SpiaRegs.SPICTL.bit.CLK_PHASE=0;//
SPIA的發(fā)送與接收是【同時(shí)】進(jìn)行的概念
SPIA數據發(fā)送移位寄存器SpiaRegs.SPIDAT 是先發(fā)送MSB位,也就是BIT15位移位出SIMO,
同時(shí)從SOMI采樣一位數據到LSB 也就是BIT0。如此類(lèi)推
BIT14移位到BIT15,然后發(fā)送到SIMO
BIT0移位到BIT1,然后從SOMI移入一位數據到BIT0……..
這個(gè)過(guò)程發(fā)送到SIMO和接收SOMI是同時(shí)進(jìn)行的。
因此發(fā)生到底完成沒(méi)有,可以查看接收到完整的8位數據沒(méi)有。不過(guò)數據線(xiàn)怎樣,只要有MSB移除SIMO就有數據從SOMI移入BIT0,哪怕全是0或全是1.
都有點(diǎn)不同的是,C28X SPI手冊上說(shuō)當數據接收完畢的SpiaRegs.SPIDAT,就好把SpiaRegs.SPIDAT的數據
輸入到SpiaRegs.RXBUF的RX FIFO中,并置位SpiaRegs.SPISTS.bit.INT_FLAG.
這點(diǎn),我認為T(mén)I的數據手冊在忽悠我們。 真實(shí)情況是非的要關(guān)閉FIFO增強才會(huì )出現這個(gè)情況。
就是SpiaRegs.SPIFFTX.bit.SPIFFENA=0;
這樣我們要查詢(xún)到的數據發(fā)送完畢沒(méi)有,只有等到SpiaRegs.SPISTS.bit.INT_FLAG[local]1[/local]置位就可以了。
哎,有點(diǎn)晚了,明天還要上班啦~,大家請原諒在下了,
其實(shí)有決心寫(xiě)這個(gè)全是因為當時(shí)出了問(wèn)題比較著(zhù)急,但在網(wǎng)上GOOGLE卻沒(méi)有什么收獲!真讓人氣憤!
全大陸這么多大學(xué)的YY,GG ,不是很會(huì )出啥書(shū)啥書(shū)的嗎?汗!
真是希望大家從這文中有點(diǎn)收獲~,不要再被C28X的SPI折騰和TI文檔的折騰了~!哈哈。
希望TI別見(jiàn)怪啦~!
作者:
machunshui
時(shí)間:
2009-9-1 09:43
頂一下
作者:
machunshui
時(shí)間:
2009-9-1 09:45
本帖最后由 machunshui 于 2009-9-1 09:46 編輯
“5.
沒(méi)有完全理解SPIA的發(fā)送與接收是【同時(shí)】進(jìn)行的概念,這點(diǎn)實(shí)在很慚愧!”
Netjob這點(diǎn)沒(méi)理解,說(shuō)不過(guò)去,這可是SPI最基本的概念
歡迎光臨 電子工程網(wǎng) (http://selenalain.com/)
Powered by Discuz! X3.4
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页