關於SPI編程過程中遇到的問題(含解決方案)


  最近手上有個小項目,其中一個功能是要實現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口的思維。

      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM