首先閱讀前人的參考文獻:
1、這是有關i.mx51的sdma核心的簡短教程:
喬納的部落格
eli的部落格
要是你基礎紮實,按照上面大牛的教程,基本就可以實現sdma傳輸了。
2、這是恩智浦上的乙個帖子,裡面又許多大牛對dma的見解與資料首先閱讀前人的參考文獻:
1、jkan2001的部落格:imx6增加uart口的操作步驟
2、 恩智浦技術社群 :imx6平台串列埠通訊問題
3、漫不經心部落格:
tty初探—uart驅動框架分析(一)
uart驅動框架分析(二)
4、嘉明的部落格: imx6dl 串列埠驅動分析
6、明遠智睿技術論壇:imx6 uart開啟dma
7、蘇西守護者的部落格:imx6的uart小結(1)
8、美麗的時光機器的部落格:uart&tty驅動
參照以上文獻,足以將串列埠修改為dma傳輸。
雖然我沒有實現用dma傳輸資料,但如果用在應用層實現資料傳輸的話,我覺得我就差最後一部了(驗證是否可以dma傳輸),為了以後再進一步研究,把串列埠的sdma配置過程記錄下來。
與串列埠相關的函式及標頭檔案如下所示:
1、首先配置好io口,具體配置參考上面的部落格。 其實串列埠的dma設定非常簡單在board-mx6q_sabresd.c中有
static
inline
void
mx6q_sabresd_init_uart
(void
)
上面兩句就是配置串列埠1和串列埠3.
在board-mx6q_arm2.c有
static
const
struct imxuart_platform_data mx6_arm2_uart1_data __initconst =
;static
inline
void
mx6_arm2_init_uart
(void
)
2、串列埠波特率的修改,若直接用應用層呼叫串列埠的話一句話即可實現,然而,要是不呼叫函式怎麼修改串列埠控制預設值呢?
首先,我們要清楚串列埠的驅動雖然寫在核心,但它和uboot與跟檔案系統都是有關的,具體參考 :linux console驅動詳解
開啟uboot,找到相關的config,如們708dl.h
上面定義的就是115200波特率。
一般而言,串列埠在**初始化的就修改那個.**件。
修改完成後,發現開機時出現卡死,這是因為rc_mxc.s的設定和uboot的設定不一樣,
開啟根檔案的rc_mxc.s如下,將自己所要修改的串列埠預設波特率修改就可以了。
串列埠 波特率概念
波特率 系統中單位時間內傳輸的碼元 脈衝 個數。碼元 和進製有關,對於m進製碼元,位元率 資訊速率 rb與波特率 碼元速率 rb的關係式為 rb rb lbm。式中 lbm log2m,表示m的以2為底的對數。顯然,對於二進位制碼元,由於lb2 1,所以rb rb,即波特率與位元率在數 值上相等,但...
串列埠波特率的理解
bit就是位,也叫位元位,是計算機中最小的單位 byte是位元組,也就是b 1位元組 byte 8位 bit 既 位只有兩種形式0和1,只能表示2種狀態,而位元組是有8個位組成的。可以表示256個狀態。1byte 8 bit,1kb 1024 byte,1mb 1024 kb,1g 1024 mb,...
串列埠波特率等概念
1 位元率 9600bps 就是每秒中傳輸9600bit,也就是相當於每一秒中劃分成了9600等份。如此,那麼每1bit的時間就是1 9600秒 104.16666666666666666666666666667us。約0.1ms。既然是9600等份,即每1bit緊接著下乙個位元,不存在額外的間隔。...