i.MX6/i.MX7 EIM總線驅動-異步通信-DMA方式編碼實現

關於i.MX6/i.MX7 EIM總線驅動,我們前面已經用了兩個章節進行了介紹,第一節用來介紹時序(非常重要),第二節用來介紹通過非DMA的方式來進行DMA通信。

第二節,只是EIM總線通信的一個過渡章節,對於初學者或許有一點幫助,但是在實際的使用過程中,非DMA的方式基本都不會被應用到產品上,因爲使用非DMA的方式,會導致CPU的佔用率異常的高,同時在傳輸的穩定性上也不是很可靠。我們之前使用非DMA的方式進行傳輸,使用示波器去測試DMA總線上面的波形,發現波形的讀寫時鐘波動很大。

那麼,這一節,我們主要介紹一下EIM-DMA的傳輸方式。在熟悉了這一節後,EIM總線異步通信驅動基本就可以應用到產品上了。

先簡單介紹一下我們和FPGA通信的業務,不同的產品,對應的業務邏輯可能不一樣,具體的業務邏輯以實際產品爲主,這裏以我目前做過的一種來作爲分析。

我們的產品使用EIM和FPGA通信,主要是通過EIM去獲取FPGA採集到的數據,因此我們的FPGA板通過中斷的方式來通知ARM板什麼時候去讀取數據。

簡單點歸納:FPGA採集數據--->FPGA去觸發ARM的外部中斷--->ARM檢測到中斷後使用EIM去讀取數據--->最後進行數據校驗

簡單的介紹了上面的通信流程,那麼接下來就需要我們去實現ARM對應的驅動代碼了。

驅動代碼主要實現2個功能:

1、中斷

2、DMA傳輸

 

因爲設置了收費的關係,所以代碼還是一點一點的去貼。在最後的時候,再把整個代碼貼出來。

搭建驅動框架:

//頭文件就先不貼了,一大推,貼出來佔空間
#define D
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章