最近手上有個小項目,其中一個功能是要實現STM32與DSP的SPI通信。
從來沒有進行過通信編程的我,着實心中有很多煩惱。
首先是對這個SPI的通信協議,協議的定義時序看了很多遍了,但就是不知道怎么用,由於手中資源有限,也無法讓我自己去驗證,只能在項目的基礎上去摸索了。
其次,對於兩塊處理器芯片的SPI資源的調用方面。
STM32通用例程很多,在功能中又是工作在主模式上,所以實現起來還是比較的方便。
DSP方面,對於跑程序的處理器,一般不會把它工作在從模式上。然而我很不幸地就要這么子做了。
DSP是ADI公司最新的一塊SHARC系列ADSP-21489。里面很多資源都封裝得很好,只要簡單地修改寄存器就好了。
正如我現在要實現的從模式收發數據,讀寫數據從歷程中就是直接的對接收/發送寄存器進行操作,輔以狀態位的變化顯現。
困惑正是在於這里,今天花了一天的時間,以這種方式寫了個從模式下SPI接收數據的程序,還沒有實驗,還不知道成功沒有。
現在的幾個問題。
1、只要SPI功能打開,SPI就會像時序那樣傳送數據了么?
2、DSP工作在從模式方面,如何去獲取SPI使能的標志?
2、用我現在的編程方式是否可以實現接收信號?
2014年12月22日22:57:50
總算把STM32與ADSP-21489的SPI通信調通了,調通了之后才發現沒有這么難。
對於自己沒調通之前的疑惑,也總算有答案了。
答案一:只要SPI功能打開,SPI就會像時序描述的那樣傳送數據。
答案二:ADSP的SPI模塊有四個主要寄存器,配置寄存器,時鍾寄存器(工作在主模式)、標志寄存器和狀態寄存器。
ADSP工作在從模式,是通過標志寄存器中的ISSS標志位獲取使能的。
答案三:可以實現全雙工通信,現在也實現了全雙工通信,但是在一次發送/接受過程中,無法保證全雙工通信。
我現在的實現方式是,STM32一直發送數據,接受的數據驗證通過后,拉高原先拉低的引腳以確保通信成功。
STM32與ADSP-21489 SPI通信總結:
首先,STM32工作在主模式中,STM32的庫函數與例程資源特別豐富,基本在網上就能找到實現方式,又是主模式(標准模式)
所以實現起來特別容易。但也真是這樣讓我走了些彎路。
其次,ADSP工作在從模式中,一般這樣的處理器不會工作在從模式中的,因為在SPI的通信過程中會占用系統CPU資源,換句話說就是:
只要在SPI通信過程中,處理器就不能做其他的事情了。所以ADSP工作在從模式的情況只有外部啟動時才這么做。
本身對ADSP的接觸並不多,對直接的寄存器操作也不是很嫻熟。STM32順風順水的同時也讓我繞過了一種思維,就是直接對寄存器進行操作
來控制SPI口的思維。