串列 i/o(uart)
DESCRIPTION
串列 I/O(UART). 20010/12/08. What is UART. 個人電腦上所使用 RS-232 通訊介面上的非同步串列埠,能將平行格式的資料轉換成一系列循序的資料。 串列埠和平行埠兩者最大的不同點乃在於其傳遞資料的方式 : 平行埠:資料以 byte 為單位,同時由平行埠傳送出去。 串列埠:資料會轉換成 連續的 bit ,然後依序由埠送出,接收端收集這些資料後再將其合成為原來的 byte 。 RS-232 用來作序列傳輸的控制晶片稱 UART (Universal Asynchronous Receiver Transmitter). 實習基礎. - PowerPoint PPT PresentationTRANSCRIPT
串列 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 來決定鮑率值
電路圖
ARMCPU Module
RS-232Driver
SerialPort
程式流程圖
開始
UART 初始化
Q & A 模組
END
超級終端機
程式說明
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)
實習一