UART鮑率除數暫存器(UBRDIVn)

Download Report

Transcript UART鮑率除數暫存器(UBRDIVn)

串列I/O(UART)
20010/12/08
What is UART


個人電腦上所使用 RS-232 通訊介面上的非同步串列
埠,能將平行格式的資料轉換成一系列循序的資料。
串列埠和平行埠兩者最大的不同點乃在於其傳遞資料
的方式:



平行埠:資料以byte為單位,同時由平行埠傳送出去。
串列埠:資料會轉換成連續的bit,然後依序由埠送出,接收
端收集這些資料後再將其合成為原來的byte。
RS-232 用來作序列傳輸的控制晶片稱 UART
(Universal Asynchronous Receiver Transmitter)
實習基礎


S3C4510B 提供了兩個獨立非同步串列I/O埠(UART0、UART1)
重要特色包含:
 可規劃的鮑率。
 Infra-red (IR)傳送/接收。
 各個frame可插入1或2個停止位元。

可選擇5位元,6位元,7位元或者是8位元的資料傳送。

同位(parity)檢查。
鮑率產生器可由內部系統時脈(MCLK)或是外部時脈(UCLK)來驅動

傳輸器(TX)和接收器(RX)各擁有資料緩衝暫存器和資料位移器

非同步傳輸的資料格式
UART特殊暫存器
UART線路控制暫存器
UART狀態暫存器
UART傳送緩衝暫存器
UART接收緩衝暫存器
鮑率產生器
UART鮑率產生器電路圖
UART鮑率除數暫存器

UART鮑率除數暫存器 (UBRDIVn)
[3:0]:鮑率除值CNT1
xxx0 = 除 1
xxx1 = 除 16
[15:4] :時間常數值CNT0
UART鮑率計算範例



MCLK2 = MCLK / 2 ;CNT1= 0 or 1
Ex : BRGOUT = 19200
(CNT1 = 0)





CNT0 = 50M/(32*19200) - 1 ≒ 80
 CNT0 ≒ 80
 UBRDIVx =0x500
若MCLK=50MHz,則MCLK2=25MHz
故最大BRGOUT = MCLK2/16(1.5625MHz)
UART一般鮑率
設定CNT0與CNT1來決定鮑率值
電路圖
ARM
CPU Module
RS-232
Driver
Serial
Port
程式流程圖
開始
UART初始化
Q & A模組
END
超級終端機
程式說明
[email protected]

int console_init(void)
{
//Line control register : Normal, No parity,1 stop,8 bits
outl(0x03, ULCON0);
//control register, receive interrupt and transmit interrupt
outl(0x09, UCON0);
//setting baud rate 19200
outl(0x500, UBRDIV0);
//Wait until tx shifter is empty.
while (!(inl(USTAT0) & 0x80));
return 0;
}
終端機顯示畫面
可應用函式



getch():讀取輸入的字元。
putch():輸出字元。
puts():輸出字串。
實習



實習一:當RS232傳輸線只能使用38400bps
和7bit傳送時,使用原本的程式將會產生錯誤
。修正使其資料可以和4510互傳。
實習二:承上題將UART0改成以UART1輸出
。
實習三:參考console.c所提供的函式getch(),
putch(), puts()做出如下圖效果(輸入&顯示自己的英
文名字)
(Hint : enter鍵的 ASCII code 為 0x0d)
實習一