嵌入式Linux應用開發完全手冊(四)UART

2021-08-06 05:26:47 字數 3267 閱讀 2013

uart是universal asynchronous receiver transmitter的縮寫,即通用非同步收發器

uart用來傳輸序列資料:

- 傳送時,cpu將並行資料寫入uart,uart按照一定格式在一根電線上序列發出

- 接收時,uart檢測另一根電線上的訊號,收集序列資料存放在緩衝區,供cpu讀取

連線圖

圖中收發各有一條線,有的裝置比如sim卡,只有一條線,收發共用。

- 2條線可以實現全雙工

- 1條線可以實現半雙工

電平邏輯

rs-232

傳輸結構

波特率

每一位所需時間的倒數,即每秒可以傳輸的位數。

波形

上圖是乙個7位資料位的幀波形。

3個通道

工作模式

收發過程

發資料

收資料使用前的設定

uart通道工作模式

設定好以後的使用

1. uart管腳設定

所以gph2和gph3需要設定成txd0和rxd0管腳。

2. 波特率 ubrdivn暫存器

根據晶元手冊,時鐘頻率,波特率和ubvrdivn暫存器的數學關係如下

ubrdivn =int(uart clock/(baud rate x 16)) - 1
那麼如果給定時鐘頻率是40mhz,波特率要求是115200,那麼可以計算出暫存器ubrdivn的設定值應該是

ubrdivn = int(40000000/(115200 x 16)) - 1

=int(21.7) - 1 /*取最近接的整數*/

=22 - 1

=21

3. 傳輸格式 ulconn暫存器傳輸格式包括這幾個方面的設定

其他幾項的含義非常直觀,不贅述。

紅外模式的含義這裡按照晶元手冊複述一下,來龍去脈並不清楚。

下圖是正常的串列埠波形,高電平是1,低電平是0。

下圖是紅外模式的波形:

從圖中可以看出,在紅外模式中:

4. uart控制暫存器 uconn

從低位往高位分析:

接收/接收模式

break訊號

自環模式

接收錯誤狀態中斷

接收超時中斷

傳送/接收中斷型別

時鐘選擇

pclk是用於串列埠等速度較慢的外設的時鐘(用於apb 匯流排裝置),fclk是核心晶振的頻率(用於cpu),hclk用於液晶,記憶體等高速裝置(用於ahb匯流排裝置),uextclk是外接的時鐘,用於uart

在2440中,這幾個時鐘的頻率如下

最後如果選擇了fclk/n,那麼這個n由fclk divider確定。

規則比較複雜:

n = 22 ~ 36

n = 37 ~ 43

n = 44

5. fifo配置(ufconn暫存器),fifo狀態(ufstatn)

見下圖,含義比較明顯,不贅述。可以使用fifio佇列,也可以不使用。本篇的例項就沒有使用fifo

6. 流量控制(umconn),流量狀態(umstatn)

本篇不涉及。

7. 傳送/接收狀態(utrstatn)

記錄這3個狀態資訊

傳送緩衝為空,傳送緩衝區內沒有資料時,自動設為1

傳送器空,傳送緩衝區中沒有資料,並且最後乙個資料也傳送出去了,自動設為1

8. 錯誤狀態(uerstatn)

4種錯誤,見**。

讀取這個暫存器時,會自動清0。

9. 傳送緩衝暫存器(utxhn)

cpu將資料寫入這個暫存器,uart會立即將它儲存到緩衝區中,並自動傳送。

10. 接收緩衝暫存器(urxhn)

uart接收到資料時,cpu讀取這個暫存器,就可以獲得資料。

在串列埠上接收乙個字元,然後ascii + 1,從串列埠輸出

#include "s3c24xx.h"

#include "serial.h"

#define txd0ready (1<<2)

#define rxd0ready (1)

#define pclk 50000000 // init.c中的clock_init函式設定pclk為50mhz

#define uart_clk pclk // uart0的時鐘源設為pclk

#define uart_baud_rate 115200 // 波特率

#define uart_brd ((uart_clk / (uart_baud_rate * 16)) - 1)

/* * 初始化uart0

* 115200,8n1,無流控

*/void uart0_init(void)

/*

* 傳送乙個字元

*/void putc(unsigned

char c)

/*

* 接收字元

*/unsigned

char getc(void)

#include "serial.h"

int main()

return

0;}

嵌入式Linux應用開發完全手冊

嵌入式linux應用開發完全手冊 真正完整版,我共享的別人的,追究責任本人概不負責!2010年10月19日更新!第乙個 http download.csdn.net source 2766528 第二個 http download.csdn.net source 2766532 第三個 http d...

嵌入式linux應用開發完全手冊(一)

第一篇 嵌入式linux開發環境構建 1.1.2 嵌入式發展 1.2 基於arm處理器的嵌入式linux系統 1.2.2 嵌入式作業系統 2.1 pc和嵌入式裝置交叉開發模式 在主機上編譯bootloader,然後通過jtag燒入單板 在主機上編譯嵌入式linux核心,通過bootloader燒入單...

《嵌入式Linux應用開發完全手冊》 導讀

嵌入式linux在嵌入式領域發展迅速 需求旺盛,但是嵌入式linux的入門很難。初學者多是自己琢磨,效率不高。學習過程中碰到的問題千奇百怪,解決後卻往往發現是極其低階的錯誤,以作者為例,初學時在論壇瘋狂發帖求教,現在回頭一看不免感嘆 怎麼會提出這麼弱智的問題?但是,當時就是被這類問題折磨得寢食難安。...