概況:
S3C2410X的連續(xù)外圍設(shè)備接口(SPI)能連接電路實現(xiàn)連續(xù)數(shù)據(jù)傳遞。S3C2410X包含2個SPI,,每個都分別有兩個8位轉(zhuǎn)移寄存器用于數(shù)據(jù)的傳輸和接收。在一個SPI進(jìn)行數(shù)據(jù)傳遞時,同步傳送數(shù)據(jù)并連續(xù)輸出數(shù)據(jù)。在某一頻率的8位連續(xù)數(shù)據(jù)由它相應(yīng)的通訊控制寄存器設(shè)置所決定。假如你只發(fā)送數(shù)據(jù),接收數(shù)據(jù)就能設(shè)為啞元。反之,如果你只想接收數(shù)據(jù),你應(yīng)該發(fā)送設(shè)為啞元'1'數(shù)據(jù)。
S3C2410有4個與SPI傳輸有關(guān)的I/O信號引腳:SCK(SPICLK0,1)、MISO(SPIMISOO,1)數(shù)據(jù)線,MOSI(SPIMOSIO,1)和低電平有效的/SS(nSS0,1)引腳(輸入)。
特點
與SPI協(xié)議(Ver.2.11)兼容
8位移位寄存器輸出
8位移位寄存器接收
8位預(yù)分頻邏輯
查詢,中斷,DMA傳輸模式
SPI操作
采用SPI接口, S3C2410X可發(fā)送/接收與外部設(shè)備同步的8位數(shù)據(jù)。一個串行時鐘線與兩條用來移位和采樣信息的數(shù)據(jù)線同步。 當(dāng)SPI為主機(jī)時,發(fā)送頻率可以通過為SPPREn寄存器設(shè)置合適的值來控制。你可以通過調(diào)整波特率數(shù)據(jù)寄存器的值來修改它的頻率。當(dāng)SPI為從機(jī)時,其它的主機(jī)提供時鐘。當(dāng)編程者向SPTDATn寄存器寫字節(jié)數(shù)據(jù)時,SPI的收/發(fā)將會同時開始。在其它情況下,在向SPTDATn寄存器寫入字節(jié)數(shù)據(jù)時要把nSS激活。
編輯程序
當(dāng)向SPTDATn寄存器寫入字節(jié)時,如果ENSCK和SPCONn被設(shè)置的話,SPI就開始傳輸
你可以使用一上典型的程序來操作一個SPI卡。
編程SPI模式,基本遵循這些基本步驟:
1. 設(shè)置波特率寄存器(SPPREn)
2. 設(shè)置SPCONn以選擇合適的SPI模式。
3. 寫數(shù)據(jù)0xFF到SPTDATn10次以初始化MMC或SD卡。.
4. 設(shè)置GPIO引腳使其具有nSS功能,低電平時使MMC或SD卡有效。
5. 發(fā)送數(shù)據(jù):檢查發(fā)送準(zhǔn)備樗是否為1,如果為1 的話就開始向SPTDATn寫數(shù)據(jù)。
6. 接收數(shù)據(jù)(1):SPCONn的 TAGD 位禁用 = 正常模式
:向SPTDATn 寫0xFF,然后測試REDY,再從讀緩存中讀取數(shù)據(jù)。
7. 接收數(shù)據(jù):SPCONn的TAGD位 能用 = 自動接收垃圾數(shù)據(jù)模式。
:測試REDY,然后從讀緩存中讀取數(shù)據(jù)。
8. 設(shè)置GPIO引腳使其具有nSS功能,高電平時使MMC或SD卡有效。
通過DMA發(fā)送的步驟
1. SPI的配置為DMA模式
2. DMA合適設(shè)置
3. SPI請求DMA服務(wù)
4. DMA向SPI發(fā)送一個字節(jié)數(shù)據(jù).
5. SPI向卡里發(fā)送數(shù)據(jù)
6. 返回到步驟3直到DAM計數(shù)變?yōu)?
7. 用SMOD位把SPI設(shè)置為中斷或查詢模式
通過DMA接收的步驟
1. 把SPI設(shè)置為DMA以SMOD位開始,并且設(shè)置TAGD位.
2. 全適配置 DMA
3. SPI從卡里接收一字節(jié)數(shù)據(jù)
4. SPI請求DMA服務(wù)
5. DMA從SPI接收數(shù)據(jù)
6. 自動的向SPIDATn寫數(shù)據(jù)0xFF
7. 回到步驟4至DAM計數(shù)變?yōu)?
8. 用SMOD位把SPI配置為查詢模式,并且清TAGD位
9. 如果SPSTAn的REDY 標(biāo)志被設(shè)置,就讀取的字節(jié)數(shù)據(jù)
注:
總接收的數(shù)據(jù) = DAM TC 值+在查詢模式下的值.
DAM接收的個數(shù)據(jù)是啞元,所以使用者可以忽略它
SPI 從機(jī)接收模式和B模塊
如果SPI從機(jī)接收模式有效和SPI模塊被設(shè)成B模塊,SPI操作將會失敗。
READY信號這一內(nèi)部信號將在SPI_CNT達(dá)到0之前變成高電平。因此,在DMA模式中,DATA_READ信號應(yīng)該在一個數(shù)據(jù)結(jié)束之前產(chǎn)生。
注意
1) DMA模式:這種模式不能在SPI從機(jī)接收模式和B模塊下使用。
2) 查詢模式:在SPI從機(jī)接收模式和B模塊下DATA_READ信號應(yīng)該推遲SPICLK的一個相位。
3) 中斷模式:在SPI從機(jī)接收模式和B模塊下DATA_READ信號應(yīng)該推遲SPICLK的一個相位。
SPI特殊寄存器
SPI控制寄存器
SPI狀態(tài)寄存器
SPI引腳控制寄存器
如果SPI系統(tǒng)使能時,除nSS引腳外的其它引腳的方向通過SPCONn的MSTR位來控制。nSS引腳的方向總是輸入。
當(dāng)SPI為主機(jī)時,nSS引腳用來檢查由SPPIN的ENMUL位提供的多主機(jī)錯誤信號,另一個GPIO應(yīng)該選擇從機(jī)。
如果SPI被設(shè)置為從機(jī),nSS引腳獎被一個主機(jī)選擇為從機(jī)。
SPIMISO和SPIMOSI數(shù)據(jù)引腳用來發(fā)送和接收串行數(shù)據(jù)。當(dāng)SPI為主機(jī)時,SPIMISO是數(shù)據(jù)輸入引腳,SPIMOSI是數(shù)據(jù)輸出引腳,SPICLK(SCK)是時鐘輸出線。當(dāng)SPI為從機(jī)時,這些引腳執(zhí)行相反的功能。在多主機(jī)系統(tǒng)中,SPICLK(SCK)、SPIMOSI、SPIMISO將被分別的配置在一個體系中。
當(dāng)其它的SPI設(shè)備作為從機(jī)選擇S3C2410 的SPI為從機(jī)時,一個主機(jī)SPI可以發(fā)出一個多主機(jī)錯誤信號。當(dāng)這個信號被探測到,將會立刻發(fā)生下面所說的事情。但是如果你想探測到這種信號的話必須事先設(shè)置SPPINn的ENMUL位。
1. SPCONn的MSTR位被強制為0來啟動從機(jī)模式。
2. SPSTAn的MULF標(biāo)志位被置位,一個SPI中斷會產(chǎn)生。
這個是我從網(wǎng)上搜到的一篇可以說是2410datasheet SPI部分簡單翻譯的文章,不過感覺不是很好,是過完一遍后再去讀英文的文檔,那個才是“根本”,才能看得懂,看得明白。
不過下面還是比出一個比較好的文章,介紹得很全。其中有臭氧層子的東西,也有寄存器的介紹,這樣設(shè)置起來也比較容易,畢竟干的、實際的、精華的地方還是在這里嘛。如下:
SPI接口概述
SPI接口:SPI(Serial Peripheral Interface,串行外設(shè)接口)是Motorola公司開發(fā)的一種同步串行外設(shè)接口標(biāo)準(zhǔn)。
SPI接口信號:有4個信號:數(shù)據(jù)發(fā)送、數(shù)據(jù)接收、時鐘和片選。在時鐘信號的作用下,發(fā)送的同時,接收對方發(fā)來的數(shù)據(jù);也可以只發(fā)送、或者只接收。SPI的波特率可以達(dá)到20Mb/s以上。
S3C2410 ARM9有2個SPI接口,既可以作為主SPI使用,也可以作為從SPI使用。
主要特點:
與SPI 協(xié)議 (ver. 2.11) 兼容;
8位發(fā)送移位寄存器;
8位接收移位寄存器;
8位預(yù)分頻器;
具有查詢、中斷、DMA傳輸模式。