串列 i/o(uart)

25
串串 I/O(UART) 20010/12/08

Upload: licia

Post on 13-Jan-2016

149 views

Category:

Documents


0 download

DESCRIPTION

串列 I/O(UART). 20010/12/08. What is UART. 個人電腦上所使用 RS-232 通訊介面上的非同步串列埠,能將平行格式的資料轉換成一系列循序的資料。 串列埠和平行埠兩者最大的不同點乃在於其傳遞資料的方式 : 平行埠:資料以 byte 為單位,同時由平行埠傳送出去。 串列埠:資料會轉換成 連續的 bit ,然後依序由埠送出,接收端收集這些資料後再將其合成為原來的 byte 。 RS-232 用來作序列傳輸的控制晶片稱 UART (Universal Asynchronous Receiver Transmitter). 實習基礎. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 串列 I/O(UART)

串列 I/O(UART)

20010/12/08

Page 2: 串列 I/O(UART)

What is UART

個人電腦上所使用 RS-232 通訊介面上的非同步串列埠,能將平行格式的資料轉換成一系列循序的資料。

串列埠和平行埠兩者最大的不同點乃在於其傳遞資料的方式 : 平行埠:資料以 byte 為單位,同時由平行埠傳送出去。 串列埠:資料會轉換成連續的 bit,然後依序由埠送出,接

收端收集這些資料後再將其合成為原來的 byte 。 RS-232 用來作序列傳輸的控制晶片稱 UART

(Universal Asynchronous Receiver Transmitter)

Page 3: 串列 I/O(UART)

實習基礎 S3C4510B 提供了兩個獨立非同步串列 I/O 埠 (UART0 、 UART1) 重要特色包含:

可規劃的鮑率。 Infra-red (IR) 傳送 / 接收。 各個 frame 可插入 1 或 2 個停止位元。 可選擇 5 位元, 6 位元, 7 位元或者是 8 位元的資料傳送。 同位 (parity) 檢查。

鮑率產生器可由內部系統時脈 (MCLK) 或是外部時脈 (UCLK) 來驅動 傳輸器 (TX) 和接收器 (RX) 各擁有資料緩衝暫存器和資料位移器

Page 4: 串列 I/O(UART)

非同步傳輸的資料格式

Page 5: 串列 I/O(UART)

UART 特殊暫存器

Page 6: 串列 I/O(UART)

UART 線路控制暫存器

Page 7: 串列 I/O(UART)

UART 狀態暫存器

Page 8: 串列 I/O(UART)

UART 傳送緩衝暫存器

Page 9: 串列 I/O(UART)

UART 接收緩衝暫存器

Page 10: 串列 I/O(UART)

鮑率產生器

UART 鮑率產生器電路圖

Page 11: 串列 I/O(UART)

UART 鮑率除數暫存器

UART鮑率除數暫存器 (UBRDIVn)

[3 : 0] :鮑率除值 CNT1 xxx0 = 除 1 xxx1 = 除 16

[15 : 4] :時間常數值CNT0

Page 12: 串列 I/O(UART)

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)

Page 13: 串列 I/O(UART)

UART 一般鮑率

設定 CNT0與 CNT1 來決定鮑率值

Page 14: 串列 I/O(UART)

電路圖

ARMCPU Module

RS-232Driver

SerialPort

Page 15: 串列 I/O(UART)

程式流程圖

開始

UART 初始化

Q & A 模組

END

Page 16: 串列 I/O(UART)

超級終端機

Page 17: 串列 I/O(UART)
Page 18: 串列 I/O(UART)
Page 19: 串列 I/O(UART)
Page 20: 串列 I/O(UART)

程式說明

Page 21: 串列 I/O(UART)

[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;

}

Page 22: 串列 I/O(UART)

終端機顯示畫面

Page 23: 串列 I/O(UART)

可應用函式

getch() :讀取輸入的字元。 putch() :輸出字元。 puts() :輸出字串。

Page 24: 串列 I/O(UART)

實習

實習一:當 RS232 傳輸線只能使用 38400bps和 7bit 傳送時,使用原本的程式將會產生錯誤。修正使其資料可以和 4510 互傳。

實習二:承上題將 UART0 改成以 UART1 輸出。

實習三:參考 console.c 所提供的函式 getch(), putch(), puts() 做出如下圖效果 ( 輸入 & 顯示自己的英文名字 )

(Hint : enter 鍵的 ASCII code 為 0x0d)

Page 25: 串列 I/O(UART)

實習一