spi介面共涉及到11個暫存器,下面就來對它們進行具體分析。
先來看spi配置暫存器cfg,下表是它的全部位結構,其位址分別為0x40058000(spi0),0x4005c000(spi1)。
(1)第0位(enable)為spi使能位,值為0時禁用spi介面,值為1時使能spi介面,預設為禁止。
(2)第1位為保留位,寫入時只能寫0。
(3)第2位(master)為主機模式選擇位,值為0時是從機模式,此時sck、mosi和ssel訊號為輸入,miso為輸出,值為1時是主機模式,此時sck、mosi和ssel訊號為輸出,miso為輸入,預設為從機模式。
(4)第3位(lsbf)為lsb優先模式使能位,值為0時是標準模式,資料以標準msb優先順序傳送和接收,值為1時是反轉模式,資料以反轉順序傳送和接收(lsb優先),預設為標準模式。
(5)第4位(cpha)為時鐘相位選擇位,值為0時是更改模式,spi在傳輸的第乙個時鐘轉換時捕捉序列資料(此時時鐘向休閒狀態的反方向變動),資料在下乙個邊沿改變,值為1時是捕獲模式,spi在傳輸的第乙個時鐘轉換時改變序列資料(此時時鐘向休閒狀態的反方向變動),在下乙個邊沿捕捉資料,預設為更改模式。
(6)第5位(cpol)為時鐘極性選擇位,值為0時為低電平,即時鐘休閒狀態(兩次傳輸之間)為低電平,值為1時為高電平,即時鐘休閒狀態(兩次傳輸之間)為高電平,預設為低電平。
(7)第6位為保留位,寫入時只能寫0。
(8)第7位(loop)為環迴模式使能位,環迴模式僅適用於主機模式,它將傳送和接收資料相連,支援簡單的軟體測試,值為0時禁止,值為1時使能,預設為禁止。
(9)第8位(spol0)為ssel0極性選擇位,值為0時選擇低電平有效,值為1時選擇高電平有效,預設為低電平有效。
(10)第9位(spol1)為ssel1極性選擇位,值為0時選擇低電平有效,值為1時選擇高電平有效,預設為低電平有效。
(11)第10位(spol2)為ssel2極性選擇位,值為0時選擇低電平有效,值為1時選擇高電平有效,預設為低電平有效。
(12)第11位(spol3)為ssel3極性選擇位,值為0時選擇低電平有效,值為1時選擇高電平有效,預設為低電平有效。
(13)第12到31位為保留位,寫入時只能寫0。
接下來看spi延遲暫存器dly,下表是它的全部位結構,其位址分別為0x40058004(spi0), 0x4005c004(spi1)。
(1)第0到3位(pre_delay)用來控制ssel有效和資料開始傳輸之間的時間,ssel有效和第乙個時鐘沿之間始終存在1個spi時鐘,它不視為本預延遲的部分,值為0時表示未插入額外延時時間,值從0x1到0xf分別表示插入1到15個spi時鐘的延時時間,預設為未插入額外延時時間。
(2)第4到7位(post_delay)用來控制資料傳輸結束和ssel無效之間的時間,值為0時表示未插入額外延時時間,值從0x1到0xf分別表示插入1到15個spi時鐘的延時時間,預設為未插入額外延時時間。
(3)第8到11位(frame_delay)是當eof標誌置位,則控制當前幀和下一幀(如果eot置位則為ssel無效)之間的最短時間,值為0時表示未插入額外延時時間,值從0x1到0xf分別表示插入1到15個spi時鐘的延時時間,預設為未插入額外延時時間。
(4)第12到15位(transfer_delay)用來控制兩次傳輸之間ssel處於無效的最短時間,當值為0x0時表示ssel處於無效的最短時間為1個spi時鐘時間(零增量時間),當值為0x1時表示ssel處於無效的最短時間為2個spi時鐘時間,以此類推,當值為0xf時表示ssel處於無效的最短時間為16個spi時鐘時間,預設為零增量時間。
(5)第16到31位為保留位,寫入時只能寫0。
接下來是spi狀態暫存器stat,下表是它的全部位結構,其位址分別為0x40058008(spi0), 0x4005c008(spi1)。
(1)第0位(rxrdy)為spi接收器就緒標誌位,值為1時表示可從接收器緩衝區中讀取資料,對rxdat暫存器執行讀取操作後自動清除該位。
(2)第1位(txrdy)為spi傳送器就緒標誌位,值為1時表示資料可以被寫入傳送緩衝區,可能在繼續傳輸之前的資料。資料寫入txdat或txdatctl時自動清零該位,直至資料移入傳送移位暫存器,該位預設值便為1。
(3)第2位(rxov)為接收器溢位中斷標誌位,此標誌僅適用於從機模式(master=0時),當檢測到接收字元,但接收器緩衝區正被使用時,此標誌置位,若這種情況發生,則保留接收器緩衝區內容,丟棄輸入資料,若本位被置位,則spi接收的資料應視為未定義。
(4)第3位(txur)為傳送器下溢中斷標誌位,此標誌僅適用於從機模式(master=0時),這種情況下, 如果傳送器空閒,則傳送器必須在下乙個輸入時鐘開始時傳送新資料,若此時傳送器保持暫存器中該資料不可用,則無資料可供傳輸,此標誌置位,若本位被置位,則spi傳送的資料應視為未定義。
(5)第4位(ssa)為從機選擇有效標誌位,無論主機還是從機模式,只要任何從機選擇從無效轉換到有效狀態,此標誌便置位,這樣可以確定spi傳送/接收功能何時變為繁忙,並允許在開始執行從機模式訪問時將器件從低功耗模式喚醒,本標誌必須通過軟體才能清零。
(6)第5位(ssd)為從機選擇無效標誌位,無論主機還是從機模式,只要任何有效狀態的從機選擇轉換到無效狀態,此標誌便置位,這樣可以確定spi傳送/接收功能何時變為空閒,本標誌必須通過軟體才能清零。
(7)第6位(stalled)為終止狀態標誌位,表示spi是否處於停止條件。
(8)第7位(endtransfer)為傳輸結束控制位,當傳送器完成任意執行中的操作時,軟體可以置位該位,強制結束當前傳輸,就好像eot標誌已經在最後一次傳輸之前完成置位,此功能可以為這種情況提供支援,即它不知道傳送資料是何時寫入的,並用來結束傳輸,隨著傳輸即將結束,當傳送器變為空閒時,該位清零,以這種方式強制傳輸結束可以插入任何指定的frame_delay和transfer_delay。
(9)第8位(mstidle)為主機空閒狀態標誌位,只要spi主機功能完全空閒,該位便被置1,這意味著傳送保持暫存器為空,且傳送器未執行資料傳送任務,該位預設值便為1。
(10)第9到31位為保留位,寫入時只能寫0。
接下來看spi中斷使能讀取和置位暫存器intenset,下表是它的全部位結構,其位址分別為0x4005800c(spi0)、0x4005c00c(spi1)。
(1)第0位(rxrdyen)用於判斷當接收器資料可用時確定是否發生了中斷,值為0時表示接收器資料可用時不產生中斷,值為1時表示接收器資料在rxdat暫存器中可用時產生中斷,預設為不產生中斷。
(2)第1位(txrdyen)用於判斷當傳送器保持暫存器可用時確定是否發生了中斷,值為0時表示傳送器保持暫存器可用時不產生中斷,值為1時表示資料可寫入txdat時產生中斷,預設為不產生中斷。
(3)第2位(rxoven)用於判斷當發生接收器溢位時,確定是否發生了中斷,在從機模式下,當接收器需要將新接收的資料移動到rxdat暫存器,而該暫存器正在使用時,就會發生這種情況,主機模式下,介面通過不允許進行可能導致接收器溢位的最新傳輸而防止接收器溢位,值為0時表示發生接收器溢位時不產生中斷,值為1時表示若發生了接收器溢位,則產生中斷,預設為不產生中斷。
(4)第3位(txuren)用於判斷當發生傳送器下溢時,確定是否發生了中斷。在從機模式下,當需要傳送資料但無可用資料時,就會發生這種情況,值為0時表示傳送器下溢時不產生中斷,值為1時表示若發生了傳送器下溢,則產生中斷,預設為不產生中斷。
(5)第4位(ssaen)用於判斷當從機選擇有效時,確定是否產生中斷,值為0時表示任何從機選擇從無效變為有效都不會產生中斷,值為1時表示任何從機選擇從無效變為有效都會產生中斷,預設為不產生中斷。
(6)第5位(ssden)用於判斷當從機選擇無效時,確定是否產生中斷,值為0時表示當所有已生效的從機選擇變為無效時,不產生中斷,值為1時表示當所有已生效的從機選擇變為無效時,產生中斷,預設為不產生中斷。
(7)第6到31位為保留位,寫入時只能寫0。
接下來看spi中斷使能清零暫存器intenclr,下表是它的全部位結構,其位址分別為0x40058010(spi0)、0x4005c010(spi1)。由於上面的intenset暫存器只能寫1不能寫0,所以intenclr暫存器就是實現intenset暫存器清零的。
(1)第0到5位用於對應清零上面intenset暫存器中相應的位,如果向這些位寫入1,便會將intenset暫存器中相對應的位清零。
(2)第6到31位為保留位,寫入時只能寫0。
--待續--
SPI介面(續二)
接下來看spi接收器資料暫存器rxdat,下表是它的全部位結構,其位址分別為0x40058014 spi0 0x4005c014 spi1 1 第0到15位 rxdat 為接收器資料,它包含接收的下乙個資料,使用的位數由txctl txdatctl中的len設定。2 第16位 rxssel0 n 為...
弄懂SPI介面
spi serial peripheral inte ce,序列外設介面 是motorola公司提出的一種同步序列資料傳輸標準,在很多器件中被廣泛應用。1.介面 spi介面經常被稱為4線序列匯流排,以主 從方式工作,資料傳輸過程由主機初始化。如圖1所示,其使用的4條訊號線分別為 1 sclk 序列時...
SPI匯流排介面
序列外圍裝置介面spi serial peripheral inte ce 匯流排技術是motorola公司推出的一種同步序列介面,motorola公司生產的絕大多數mcu 微控制器 都配有spi硬體介面,如68系列mcu。spi 用於cpu與各種外圍器件進行全雙工 同步序列通訊。spi可以同時發出...