X210ARM裸機串列埠通訊詳解

2021-08-25 08:09:37 字數 1350 閱讀 2025

1、整個程式流程分析

(1)整個串列埠通訊相關程式包含2部分:uart_init負責初始化串列埠,uart_putc負責傳送乙個位元組

2、串列埠控制器初始化關鍵步驟

(1)初始化串列埠的tx和rx引腳所對應的gpio(查原理圖可知rx和rx分別對應gpa0_1和gpa0_0)

(2)gpa0con(0xe0200000),bit[3:0] = 0b0010    bit[7:4] = 0b0010    

(3)初始化這幾個關鍵暫存器ucon0 ulcon0 umcon0 ufcon0 ubrdiv0 udivslot0

3、主要的幾個暫存器

(1)ulcon0 = 0x3        // 0校驗位、8資料位、1停止位

(2)ucon = 0x5        // 傳送和接收都是polling mode

(3)umcon0 = 0x0        // 禁止modem、afc

(4)ufcon0 = 0x0        // 禁止fifo模式

(5)ubrdiv0和udivslot0和波特率有關,要根據公式去算的

4、在c原始檔中定義訪問暫存器的巨集

定義好了訪問暫存器的巨集之後,將來寫**時直接使用即可。

5、串列埠tx、rx對應的gpio的初始化

給gpa0con的相應bit位賦值為相應值,用c語言位操作來完成。

6、ucon、ulcon、umcon、ufcon等主要控制暫存器

依據上節中分析的值進行依次設定即可。

7、波特率的計算和設定

(1)第一步,用pclk_psys和目標波特率去計算div_val: div_val = (pclk / (bps x 16)) ?1

(2)第二步,ubrdiv0暫存器中寫入div_val的整數部分

(3)第三步,用小數部分*16得到1個個數,查表得ubdivslot0暫存器的設定值

8、串列埠傳送和接收函式的編寫

(1)寫傳送函式,主要傳送前要用while迴圈等待傳送緩衝區為空才能傳送。

9、綜合除錯

使用usb除錯過程中,發現無法列印出相應字元,且crt中顯示:uart negotiation error,而之前usb除錯過的led閃爍程式完全沒有問題。剛開始懷疑usb除錯出了問題,於是換用sd卡啟動,然後發現使用sd卡時,crt中只顯示no boot image,並未列印出字元。於是便懷疑串列埠的問題,確保串列埠是自己設定的com,且取消了流控,然而發現還是未列印出字元。

最後,想起自己以前聽過的一句話,硬體的問題,一般重啟或再次插拔就能解決。於是自己重新插拔usb轉串列埠線,發現終於成功了。附截圖一張:

ARM裸機 x210的啟動方式

x210的啟動方式 一.基本概念 1.記憶體 sram靜態記憶體 特點 容量小 高 不需要軟體初始化 上電就可以使用 dram動態記憶體 特點 容量大 低 不能上電就工作 需要軟體進行一定的初始化 2.外存 norflash 容量小 可以通過匯流排的方式直接連線到cpu cpu上電後就可以訪問 一般...

arm 裸機程式設計 串列埠篇

uart 通用非同步收發器,是一種全雙工序列非同步通訊 波特率與bps 實際上波特率並不等於bps。波特率 一秒鐘傳輸碼元的個數 bps 一秒鐘傳送的位元位位數 而碼元是承載資訊量的基本訊號單位,乙個二進位制碼元佔乙個位元位 所以僅傳輸二進位制碼元時,bps等於波特率 同步和非同步方式 非同步 非同...

ARM裸機 S5PV210簡析

armv7架構是在armv6架構的基礎上誕生的。該架構採用了thumb 2技術,thumb 2技術是在arm的thumb 壓縮技術的基礎上發展起來的,並且保持了對現存arm解決方案的完整的 相容性。thumb 2技術比純32位 少使用 31 的記憶體,減小了系統開銷。同時能夠提供比已有的基於thum...