国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

查看: 5709|回復(fù): 3
打印 上一主題 下一主題

TMS320F280X SPI SPIA使用入門與總結(jié)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2009-9-1 08:55:37 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
關(guān)鍵詞: spi , 入門
TMS320F280X+SPI+SPIA使用入門與總結(jié).pdf (135.49 KB) TMS320F280X SPI SPIA使用入門與總結(jié)
Netjob @ 2009 831日晚

我使用過NXP ARM LPC2138SPI口,ATMEL AT91SAM7S256SPI,MSP430F5438SPI口,
還有STM32 SPI模塊。都是用來(lái)讀 SPI FLASH 例如 AT45DB642D之類。

本以為對(duì)SPI已經(jīng)入門了, 誰(shuí)不知使用TMS320F280XSPI后,才知道自己其實(shí)還是一知半解。
TMS320F280X SPI 真是好好給我上了一課!

不久前有款 OLED 真彩色液晶。使用的是SSD1351控制器,SPI接口。 想測(cè)試一下它的速度。就把它接到我的
TMS320F280XDSP 開發(fā)板上。之前使用DSPIO模擬,運(yùn)行程序后OLED的效果不錯(cuò)的。
本想這次使用SPI應(yīng)該沒事吧『雖然I/O模擬也是使用這個(gè)SPI的引進(jìn)』?

新建立一個(gè)工程 MYOLED, 拷貝一些TMS320F28X相關(guān)的頭文件,C文件。把工程的設(shè)置好后,編譯OK!
加上定時(shí)器中斷用來(lái)點(diǎn)亮一個(gè)LED,把I/O模擬的工程相關(guān)文件的兩個(gè)子函數(shù)改為SPI方式的。
在編譯。文件太大非得使用FLASH下載仿真。

發(fā)現(xiàn)程序不能運(yùn)行! 沒辦法改回RAM仿真,把很多函數(shù)注釋掉。僅僅留下測(cè)試OLED的程序。
SSD1351的測(cè)試程序,向它寫某命令碼,可以改變GPIO1/GPIO2引腳的電平。
其實(shí)移植就是僅僅這兩個(gè)SPI底層函數(shù):
void Write_Data(unsigned char Data)
void Write_Command(unsigned char Data)

測(cè)試好幾次都沒反應(yīng),  因此 就有下面的入門與詳解了。

使用的是SPIA模塊,如果SPIB沒有什么特別(功能設(shè)置與SPIA差不多的話)也是沒什么問題的。
但是我之前使用SPIB測(cè)試過,發(fā)覺SPIB還是與SPIA有區(qū)別的。這點(diǎn)我也很不解~。
按道理應(yīng)該不會(huì)這樣。但事實(shí)卻是如此.


TMS320F280XSPI 支持1-16位的數(shù)據(jù)類型。
而且 只有MSB先發(fā)送,不像ARM7/STM32等可以設(shè)MSBLSB先發(fā)送。
TMS320F280XSPI有回環(huán)模式, 可以用于測(cè)試,自發(fā)自收。
TMS320F280XSPITX FIFORX FIFO. 及其中斷字節(jié)設(shè)置。

看來(lái)沒什么特別? 是吧~?  先別小看啊~,就是搞不定它呢!


首先是要回環(huán)模式,這樣就是一個(gè)自發(fā)自收,方便測(cè)試。

其實(shí)現(xiàn)在看來(lái),我曾經(jīng)范了幾點(diǎn)毛病。

1.
使用8位模式,但SPIA總線,發(fā)送接收等寄存器都是16位模式。

2.
數(shù)據(jù)的位數(shù)設(shè)置不對(duì)

3.
時(shí)鐘極性與時(shí)鐘相位。

4.
使用了 TX FIFORX FIFO.
其實(shí)不用使用FIFO比較好。為什么?下面會(huì)講。

5.
沒有完全理解SPIA的發(fā)送與接收是【同時(shí)】進(jìn)行的概念,這點(diǎn)實(shí)在很慚愧!

6.
發(fā)送是MSB對(duì)齊先發(fā)送,接收是LSB對(duì)齊接收,發(fā)送與接收是【同時(shí)】進(jìn)行的!

沙發(fā)
 樓主| 發(fā)表于 2009-9-1 08:55:47 | 只看該作者
SSD1351的設(shè)置,是:
時(shí)鐘 空閑保持高電平。第二個(gè)時(shí)鐘邊沿?cái)?shù)據(jù)采樣捕獲,第一時(shí)鐘邊沿鎖存

SCLK的空閑無(wú)效狀態(tài)是高電平 (其實(shí)也可以是低電平,但相位就要改改了,變?yōu)榈诙䝼(gè)時(shí)鐘邊沿鎖存,,第一時(shí)鐘邊沿?cái)?shù)據(jù)采樣捕獲)
數(shù)據(jù)的MSB 先發(fā)送。

好了,看看我是如何范這些毛病的,
void Write_Data(unsigned char Data)
void Write_Command(unsigned char Data)

看出參數(shù)都是8位的數(shù)據(jù),比如要發(fā)送Data=0x55;那么傳輸?shù)紻SP 的SPI寄存器里這就出問題了!
是吧? 因?yàn)槭荕SB先發(fā)送,這樣0x55到了16位的SPI寄存器例如SpiaRegs.SPITXBUF或

SpiaRegs.SPIDAT 就變?yōu)?x0055了,由于SPIA 設(shè)置位8位模式,而且是MSB 先發(fā)送。
那么就是只發(fā)送 0x0055的 00(高8位)了,低8位55就沒有發(fā)送了。

因此 發(fā)送前要做如下變換:

Uint16 tmp;

tmp=Data;


tmp<<=8;


。。。。


SpiaRegs.SPIDAT =tmp



       而接收時(shí)無(wú)需移位,SpiaRegs.SPIDAT、SpiaRegs.SPIRXBUF中低8位就是發(fā)送的tmp
      

SPIA的數(shù)據(jù)寬度設(shè)為8位。

SpiaRegs.SPICCR.bit.SPICHAR=7;
       這個(gè)其實(shí)很簡(jiǎn)單,看看手冊(cè)就知道了,不過我在網(wǎng)上看的HOTPOWER有關(guān)C54X的SPI設(shè)置。
       就把SpiaRegs.SPICCR.bit.SPICHAR=8;來(lái)設(shè)8位的,這點(diǎn)我認(rèn)為是不對(duì)了,雖然我不了解C54的SPI設(shè)置。
       但估計(jì)也與C28X是一樣的吧?哈哈!看來(lái)HOTPOWER也會(huì)范這樣的低級(jí)毛病?不會(huì)吧?
      
時(shí)鐘極性與時(shí)鐘相位,其實(shí)我的OLED要求的是      
【時(shí)鐘 空閑保持高電平。第二個(gè)時(shí)鐘邊沿?cái)?shù)據(jù)采樣捕獲,第一時(shí)鐘邊沿鎖存,SCLK的空閑無(wú)效狀態(tài)是高電平】     
這個(gè)我想當(dāng)然的搞錯(cuò)了:

SpiaRegs.SPICCR.bit.CLKPOLARITY=1; // 空閑時(shí)是高電平 這是對(duì)的


SpiaRegs.SPICTL.bit.CLK_PHASE=1;//
這個(gè)是錯(cuò)的!**



后來(lái)我認(rèn)真看看了TI C28X SPI的數(shù)據(jù)手冊(cè),這個(gè)大家一定要好好看看!




   
這個(gè)圖就是數(shù)據(jù)在時(shí)鐘下跳沿改變、鎖存,在時(shí)鐘上升沿被捕獲采樣。

如果不明白可以看看我的《精解 SPI 的
CPHA 時(shí)鐘相位 與CPLK 時(shí)鐘極性》
正確如下:

SpiaRegs.SPICCR.bit.CLKPOLARITY=1; // 空閑時(shí)是高電平 這是對(duì)的


SpiaRegs.SPICTL.bit.CLK_PHASE=0;//


SPIA的發(fā)送與接收是【同時(shí)】進(jìn)行的概念
SPIA數(shù)據(jù)發(fā)送移位寄存器SpiaRegs.SPIDAT 是先發(fā)送MSB位,也就是BIT15位移位出SIMO,
同時(shí)從SOMI采樣一位數(shù)據(jù)到LSB 也就是BIT0。如此類推
BIT14移位到BIT15,然后發(fā)送到SIMO
BIT0移位到BIT1,然后從SOMI移入一位數(shù)據(jù)到BIT0……..

這個(gè)過程發(fā)送到SIMO和接收SOMI是同時(shí)進(jìn)行的。
因此發(fā)生到底完成沒有,可以查看接收到完整的8位數(shù)據(jù)沒有。不過數(shù)據(jù)線怎樣,只要有MSB移除SIMO就有數(shù)據(jù)從SOMI移入BIT0,哪怕全是0或全是1.

都有點(diǎn)不同的是,C28X SPI手冊(cè)上說(shuō)當(dāng)數(shù)據(jù)接收完畢的SpiaRegs.SPIDAT,就好把SpiaRegs.SPIDAT的數(shù)據(jù)
輸入到SpiaRegs.RXBUF的RX FIFO中,并置位SpiaRegs.SPISTS.bit.INT_FLAG.
這點(diǎn),我認(rèn)為TI的數(shù)據(jù)手冊(cè)在忽悠我們。 真實(shí)情況是非的要關(guān)閉FIFO增強(qiáng)才會(huì)出現(xiàn)這個(gè)情況。
就是SpiaRegs.SPIFFTX.bit.SPIFFENA=0;
這樣我們要查詢到的數(shù)據(jù)發(fā)送完畢沒有,只有等到SpiaRegs.SPISTS.bit.INT_FLAG[local]1[/local]置位就可以了。

哎,有點(diǎn)晚了,明天還要上班啦~,大家請(qǐng)?jiān)徳谙铝耍?br />
其實(shí)有決心寫這個(gè)全是因?yàn)楫?dāng)時(shí)出了問題比較著急,但在網(wǎng)上GOOGLE卻沒有什么收獲!真讓人氣憤!
全大陸這么多大學(xué)的YY,GG ,不是很會(huì)出啥書啥書的嗎?汗!
      真是希望大家從這文中有點(diǎn)收獲~,不要再被C28X的SPI折騰和TI文檔的折騰了~!哈哈。
希望TI別見怪啦~!
板凳
發(fā)表于 2009-9-1 09:43:08 | 只看該作者
頂一下
地板
發(fā)表于 2009-9-1 09:45:12 | 只看該作者
本帖最后由 machunshui 于 2009-9-1 09:46 編輯

“5.
沒有完全理解SPIA的發(fā)送與接收是【同時(shí)】進(jìn)行的概念,這點(diǎn)實(shí)在很慚愧!”

Netjob這點(diǎn)沒理解,說(shuō)不過去,這可是SPI最基本的概念

本版積分規(guī)則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产成人在线视频播放 | 91私密视频| 欧美一区二区在线观看视频 | 久久精品毛片 | 欧美人成人亚洲专区中文字幕 | 欧美一区二区三区在线可观看 | 精品资源| 在线岛国片| 欧美大片在线欧美大片 | 亚洲黄色激情网 | 黄台| 一级一片免费看 | 天天操操操操操 | 国产亚洲第一精品社区麻豆 | 久久老司机 | 国产一国产一有一级毛片 | 国产精品成人一区二区 | 日韩一级一欧美一级国产 | 日本www | 欧美日韩一区二区在线观看视频 | 国产成人深夜福利短视频99 | 精品123区 | 男人天堂v| 99re66热这里都是精品 | 国产片国语版理论片 | 欧美另类hd | 国产成人亚洲精品大帝 | 99在线播放视频 | 国产成人精品久久免费动漫 | 久久机热一这里只精品 | 天天精品视频在线观看资源 | 国产精品国产自线拍手机观看 | 2022av视频 | 亭亭色 | 九九精品99 | 亚洲高清网站 | 免费福利网站在线观看 | 日本中文在线观看 | 四虎自拍 | 亚洲国产欧美日韩一区二区三区 | 亚洲欧美一区二区三区在线播放 |