最近剛剛接觸ti公司dsp28027和dsp28335系列晶元,作為乙個剛剛進入實驗室的小白,想把自己學習的一些心得記錄下來,以供以後的自己隨時回憶,並學習。
首先,spi(serial peripheral inte***ce)序列外設介面,廣泛應用於eeprom、實時時鐘、a/d轉換、d/a轉換等器件,屬於高速、全雙工通訊匯流排,占用了四個引腳,分別為mosi,miso,clk,scs四根線。
利用28027的spi可以快速方便的進行配置,並傳送資料。spi單詞傳送資料可以傳送16位的資料,利用官方例程中的傳送函式:
void spi_xmit(uint16 a)
可以實現簡單的16位資料的傳送。當然在配置暫存器時要格外注意控制暫存器spiccr,例如要實現16位數的傳送就可以寫如下**:
void spi_init()
要實現這樣簡單的功能並不需要配置fifo暫存器。
然而,往往在控制系統中對於資訊的傳輸不滿足於簡單的乙個資料,往往需要一串資料來實現相應的控制功能。因此我們需要利用到fifo暫存器來實現多資料的傳送。
舉個例子,我們需要連續傳送4個16位資料,那麼除了上述void spi_init()函式,還需要配置fifo暫存器初始化
void spi_fifo_init()
如此,再利用傳送函式,就可以實現4個資料的連續傳送
for(i=0;i<4;i++)
根據測試結果,可以從示波器上清晰的看到連續的時鐘訊號,持續64個時鐘週期,並且資料也沒有錯。根據測試結果,f28027按照如上配置最多可以傳送5個16位資料,若要傳送6個及以上就會出現資料丟失的現象。
上面所述是傳送資料為偶數位元組的情況,但在實際的使用中,有時需要我們按照位元組傳送資料,強大的spi模組也可以實現這樣的功能。
首先需要改變spiccr暫存器的字元控制位:
void spi_init()
在傳送時,我們需要注意,spi的spitxbuf中的資料應該左對齊,因為傳送的時候是從msb位最先開始傳送的,因此在傳送時需要把相應的8位資料向左移8位。
例如試圖傳送資料0xaa,在不右移的情況下
a=0xaa;
spiaregs.spitxbuf=a;
只會在8個時鐘中期中傳送00,因為spitxbuf暫存器是乙個16位的暫存器。因此應該
spiaregs.spitxbuf=(a<<8);
如此,就可以在8個時鐘週期傳送出乙個8位的資料。
如此,在連續傳送資料時也可以連續執行傳送函式
for(i=0;i<4;i++)
通過測試,f28027通過這種按位元組傳送的方式,最多可以連續傳送5個位元組的資料,並保證資料不亂。但這樣的傳送方式很明顯浪費掉了一部分暫存器的位置,有待改進。
以上便是對於spi的一些心得體會,認知還停留在非常入門的階段,在今後的學習中希望能解決目前的不足,盡早熟練。
關於SPI的隔離
spi serial peripheral inte ce 即序列外圍裝置介面,是一種高速的,全雙工,同步的通訊匯流排,由於其在晶元的管腳上只占用四根線,節約了晶元的管腳,同時為pcb的布局上節省空間,提供方便,出於這種簡單易用的特性,很多ad轉換器都以spi匯流排方式傳輸資料。在工業現場的資料採集...
DSP28335的硬體SPI使用(無FIFO)總結
這兩天折騰了乙個旋變器解算模組的使用,類似於這種器件一般都是使用通訊的方式寫入晶元對應的暫存器的資料從而初始化晶元或得到可程式設計的結果 反之,我們也需要讀取其模組 晶元內部經過解算得到的儲存內容在spi的sclk引導下傳輸到dsp的硬體spi內的接收暫存器中。對於硬體spi的使用從成功啟動的角度來...
關於SPI通訊協議的NSS
spi庫函式配置中,結構體成員有spi nss這個東西,這個東西是什麼意思,當時看著是不知所云。經過不斷查詢資料得出以下答案 軟體模式 spi initstructure.spi nss spi nss soft 硬體模式 spi initstructure.spi nss spi nss hard...