linux 串列埠波特率的修改與sdma的設定

2021-10-23 18:36:18 字數 1698 閱讀 8543

首先閱讀前人的參考文獻:

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緊接著下乙個位元,不存在額外的間隔。...