spi
通訊是高速、同步、全雙工匯流排式的,它以主從方式工作,通常有乙個主裝置和乙個或多個從裝置,需要
4根線,
mosi
(主裝置輸出),
miso
(主裝置輸入),
sclk
(時鐘訊號,由主裝置產生),
cs(從裝置使能訊號,由主裝置控制,一般低電平片選)。
spi有四種通訊模式,不同的從裝置在出廠就已配置為某種模式,這是不能改變的,所以需要對主裝置進行
spi模式配置。
dsp通過以下方面可以配置
spi的四種通訊模式,通過
cpol
(時鐘極性,表示匯流排空閒時的時鐘電平狀態,或者
0表示上公升沿傳送下降沿接收,
1表示下降沿傳送上公升沿接收)和
cpha
(時鐘相位,
0表示資料傳送在第乙個邊沿,
1表示資料傳送在第乙個邊沿延時半個週期)來控制主裝置的通訊模式,即
cpol=0;cpha=0
,上公升沿傳送,下降沿接收;
cpol=0;cpha=1
,上公升沿延時半個週期傳送(即下降沿傳送),上公升沿接收;
cpol=1;cpha=0
,下降沿傳送,上公升沿接收;
cpol=1;cpha=1
,下降沿延時半個週期傳送(即上公升沿傳送),下降沿接收。
dsp的時序定義同常規
spi時序存在一些不同,普通
spi時序如上圖所示,
dsp的
spi配置
cpol=0;cpha=1
(等同於
mcbsp
復用spi
時,clkxp=0;clkrp=1;clkstp=3
)對應於普通的
spi模式0,即
cpol=0;cpha=0
,因為描述
cpol
時鐘極性是相同的(
0表示匯流排空閒時為低電平,
1表示匯流排空閒時為高電平),而描述
cpha
時鐘相位是不同的(在
dsp的
spi時序描述中,
0表示資料傳送在第乙個邊沿,
1表示資料傳送在第乙個邊沿延時半個週期,而在普通
spi時序描述中,
0表示資料接收在第乙個邊沿,
1表示資料接收在第乙個邊沿延時半個週期)。同時,接收即表示取樣,當主機在上公升沿取樣時,從機必須在上公升沿發生之前必須準備好資料,即是從機在下降沿發生後,就要把資料放出來,為主機上公升沿取樣做好準備。一般從裝置的
spi時序模式為
0,即對應
dsp的
cpol=0;cpha=1。
mcbsp相關暫存器意義:pcr管腳控制暫存器:fsxm傳送幀同步模式,0表示傳送幀同步由外部源通過fsx引腳提供,1表示傳送幀同步由取樣率發生器內部產生,如由srgr2的fsgm位確定,同理fsrm接收幀同步模式。clkxm傳送時鐘模式位,確定傳送時鐘的源為外部或內部,以及mclkx引腳是輸入還是輸出,在時鐘停止模式下,如果mcbsp是主機,則clkxm=1。sclkme取樣率發生器輸入時鐘模式選擇位。fsxp傳送幀同步極性位,fsxp確定fsx的極性,0表示傳送幀同步脈衝高啟用,1表示傳送幀同步脈衝低啟用;同理fsrp接收幀同步極性位。clkxp傳送時鐘極性位,0表示上公升沿傳送,1表示下降沿傳送。clkrp接收時鐘極性位,0表示下降沿接收,1表示在上公升沿接收。
drr1和drr2資料接收暫存器,dxr1和dxr2資料傳送暫存器。
spcr1串列埠控制暫存器1:如果序列字長度為16位或更小,則dr引腳接收資料的流程:從dr管腳進來的資料會先存放在rsr資料接收移位暫存器,直到rsr暫存器存滿了乙個序列字,這個序列字才會被發往rbr資料接收緩衝暫存器,最後傳送到drr資料接收暫存器,rsr和rbr不可供使用者訪問。dx管腳同理,把乙個或多個序列字當成乙個組來進行傳輸,稱為幀。dlb表示數字回環模式位,0表示禁用,數字回環模式是直接將傳送和接收連線起來,使用單個dsp測試**。
rcr1接收控制暫存器1:rwdlen1接收字長1,每個接收資料幀可以有乙個或兩個,取決於載入到rphase位的值,如果選擇單相幀,則rcr1中的rwdlen1選擇幀中接收到的每個序列字的長度,0表示8位。rcr2接收控制暫存器2:rphase接收相位數,0表示接收幀只有乙個相位。rwdlen2接收字長2。
xcr1傳送控制暫存器1:xwdlen1傳送字長1,0表示8位。xcr2傳送控制暫存器2:xphase傳送相位數,0表示傳送幀只有乙個相位。xdatdly和rdatdly表示幀的延時位,幀的開始一般是幀同步處於啟用狀態後的第乙個時鐘週期,但實際資料的接收和傳送的開始可以有必要的延遲,0表示無延遲,1表示1位資料延遲。
srgr取樣率發生器暫存器1:clkgdv分頻、sclkme=0,clksm=1,選擇內部低速時鐘經過分頻後作為clkg時鐘。gsync(clkg的時鐘同步模式位),僅當取樣率發生器的輸入時鐘源為外部mclkr管腳時有用。clksm取樣率發生器輸入時鐘模式位。fsgm取樣率發生器傳送幀同步模式位,同步位可以從fsx引腳(fsxm=0)或從mcbsp內部(fsxm=1)進行幀同步。當fsxm=1時,fsgm位確定mcbsp如何提供幀同步脈衝。
spi傳送資料的流程:首先程式向傳送資料緩衝暫存器spitxbuf寫入資料,如果此時資料移位暫存器spidat為空,則spitxbuf將需要傳送的完整資料傳輸給spidat,資料在spitxbuf暫存器和spidat暫存器內存放都是左對齊的,也就是從高位開始儲存。spidat經過每乙個時鐘脈衝,完成一位資料的傳送或者接收。假設在時鐘脈衝的上公升沿時,spidat將資料的最高位傳送出去,然後將剩餘的所有資料左移一位,接下來,在時鐘脈衝的下降沿時,spidat鎖存移位資料,並儲存至其最低位。當傳送完指定位數的資料後,spidat暫存器將其內部的資料傳送給資料接收緩衝暫存器spirxbuf,等待cpu來讀取。資料在spirxbuf中存放是右對齊的,也就是從低位開始儲存。
將mcbsp配置為spi模式,一般只需要配置傳送時鐘極性clkxp,不需要關心接收時鐘極性。當mcbsp被配置為時鐘停止模式時,傳送器和接收器在內部是同步的,傳送資料幀時鐘fsx用作從使能ss,傳送資料位時鐘clkx用作sck,接收資料位時鐘clkr和接收資料幀時鐘fsr在內部與clkx和fsx是相連的。
fsx配置為輸出(fsxm=1)並連線到從裝置上的從裝置使能ss輸入,在管腳復用模式下,每個單元的資料傳送暫存器dxr到資料傳送移位暫存器xsr傳輸產生從裝置使能fsx,因此為了在spi主裝置模式下接收乙個單元,mcbsp必須同時傳送乙個單元(寫dxr),以便產生必須的從裝置使能fsx。
在mcbsp開始將資料移位輸出到dx引腳之前,fsx需要宣告為低電平,以便使能從裝置。因此,在復用模式下,xdatdly和rdatdly位必須程式設計為1,當mcbsp為spi主裝置時,xdatdly的值為0或2會產生不確定的操作,並且rdatdly的值為0會使接收的資料移位不正確。作為spi從裝置時,mcbsp的(r/x)cr暫存器中的(r/x)datdly位必須設定為0,以保證傳送的第乙個資料能夠出現在dx引腳上。
mcbsp預設為最高位先傳送,但是對於一些固定的8bits傳輸協議,需要先傳送最低位的資料,則mcbsp可以通過設定xcr2的xcompand為01,則8bits的資料在通過序列口傳送前將會被翻轉,這樣傳送資料時就變成低位優先傳送。
可復用設計 原則
一 開閉原則 software entities should be open for extension,but closed for modification 翻譯過來就是 軟體實體應當對擴充套件開放,對修改關閉 通俗的講就是增加新功能而不修改源 二 lsp 黎克特制轉換原則 任何基類可以出現的...
設計可復用的OO軟體
乙個模式有四個基本要素 找到相關的物件,以適當的粒度將它們歸類,再定義類的介面和繼承層次,建立物件之間的基本關係。你的設計應該對手頭的問題有針對性,同時對將來的問題和需求也要有足夠的通用性。你也希望避免重複設計或盡可能少做重複設計。物件導向 封裝,繼承,多型 m v c包括三類物件。模型m o d ...
設計模式之合成復用原則
1.合成 聚合復用原則 盡量優先使用合成 聚合,盡量不要使用類繼承。盲目使用繼承會造成麻煩。所以在使用繼承時,一定要在是 is a 的關係時,再考慮使用。手機軟體顯然不是乙個,即不是 a,所以不能從手機品牌向下繼承。如下圖是不對的。聚合 表示一種弱的 擁有 關係,體現的是 a物件可以包含 b物件,但...