OVERVIEW

S3C2800 UART는 2개의 GPIO port를 제공하며 각 포트는 interrupt-base 또는 DMA-base mode 동작을 할 수 있다

UART 는 CPU와 UART 간 데이터 전송을 위해서 interrupt 나 DMA request를 생성할 수 있다.

230.4kbps를 전송을 지원.

각 UART channel은 데이터 송신 및 수신을 위해서 2개의 16byte FIFO를 갖는다.

각 UART는 baud-rate 생성기, 송신기, 수신기, 제어기로 구성된다. (그림 1 참조)

baud-rate 생성기는 PLCK에 의해서 clock을 생성한다.

FEATURE

RxD0, TxD0, RxD1, TxD1 with DMA-based or interrupt-based operation

UART 0 with IrDA 1.0 and 16 byte FIFO

UART 1 with IrDA 1.0 and 16 byte FIFO

Supports transmit/receive handshake

RxDn = Receive data

TxDn = Transmit data

UART OPERATION

UART 동작 종류 : Data 전송, Data 수신, Interrupt 생성, Baud-rate 생성, loopback 모드, AFC( auto flow control )

DATA 전송

송신을 위한 Data frame은 프로그램 제어가 가능하다.

Data frame 구성

Start bit, 5~8 data bit, parity bit (옵션), 1~2 stop bit

Data frame 구성은 line control register(ULCONn)로 정의

One frame을 전송할 수 있는 시간동안 serial 출력이 계속 ‘0’을 유지한다면 ( 예 0 000000 0 ) 전송기는 break condition을 발생한다.  Break condition은 송신중인 word를 완전히 송신한 이후의 break signal를 송신한다.

Break signal 전송 이후 데이터를 Tx FIFO로 계속 전송 한다.

DATA RECEPTION

DATA Transmission 똑같이 Line control register(ULCONn)로 정의

수신기는 overrun error, parity error, frame error and break condition 등을 감지 할 수 있으면 각 error flag는 set 할 수 있다.

Overrun error

: 먼저 수신된 데이터를 읽기 전에 새로운 데이터를 overwritten 할 때 발생

Parity error

Frame error

: 수신된 데이터에 stop bit가 없는 경우 발생

break condition

: . One frame을 전송 할 수 있는 시간동안 RxD input이 계속 ‘0’을 유지한다면 ( 예 0 000000 0 ) 수신측은 break condition을 發生.

3번의 데이터(word)수신 시간(interval) 동안 수신된 데이터가 없고 현재 FIFO 모드에서 Rx FIFO가 비워져 있지 않다면 Receive time-out condition이 발생.

AUTO FLOW CONTROL (AFC)

S3C2800 UART는 UART와 UART간 연결에서 AFC를 지원

UART와 modem 간의 연결에서 AFC를 disable 할 것을 충고

UMCON register의 Auto flow control bit를 disable 하고 RTS signal을 컨트롤.

AFC mode에서 RTS 컨트롤은 receiver condition에 의해서, 전송 동작 컨트롤은 CTS signal에 의해서 가능.

UART 전송기는 CTS 시그널이 active 할 때 FIFO안의 데이터를 전송

UART는 데이터 수신 전

Receive FIFO가 2byte이상의 공간이 있을 때 RTS는 동작(active) 된다

Receive FIFO가 1byte이하의 공간이 있을 때 RTS는 동작하지(inactive) 않는다.

NON AUTO-FLOW-CONTROL ( CONTROLLING NRTs AND NCTS BY S/W )

RX operation

1.    receive 모드 선택

2.    UFSTAT register의 Rx FIFO count 값을 체크.

값이 15이하인 경우, 사용자가 UMCON의 값을 1로 세트 ( RTS active )

값이 15이상이거나 같을 경우, 사용자가 UMCON의 값을 0로 세트 (RTS inactive )

3.    2번째 아이템 다시 수행

Tx operation

1.    transmit 모드 선택

2.    UMSTAT 값을 체크

값이 1 (CTS is actived ), 사용자가 Tx FIFO register에 데이터를 저장한다.( 쓰기 )

RS-232c INTERFACE

사용자가 modem interface( 널모뎀이 아닌)와 연결한다면, RTS, CTS, DSR, DTR, DCD, RI signals이 필요. 사용자는 이 signal들을 컨트롤하기 위해 소프트웨어를 이용해서 GPIO port를 사용한다.

INTERRUPT/DMA REQUEST GENERATION

UART는 7개의 상태 시그널을 갖음

Overrun error, parity error, frame error, break, receive buffer data ready, transmit buffer empty, transmit shifter empty이 모든 시그널 들은 UART status Register (UERSTAT/UTRSTAT)의 내용에 나타난다.

Overrun error, parity error, frame error, break condition들은 수신에러상태와 관계가 있으며,  Rx error status interrupt enable bit(UCON)가 set 되면, receive error status interrupt request한다. Rx error status interrupt가 발생하면, UERSTST를 읽어서 Rx error를 확인할 수 있다.

Interrupt request mode가 선택되면

FIFO 모드에서,

송수신 데이터가 Rx/Tx FIFO trigger level만큼 쌓이면 Rx/Tx 인터럽트가 발생.

Non FIFO 모드에서

Rx : Rx buffer에 데이터가 수신되면 인터럽트가 발생

Tx : 데이터 송신이후 Tx buffer가 Empty가 되면 인터럽트가 발생

DMA request mode가 선택되면

UCON의 Rx/Tx 모드가 선택되었을 때 DMA request 발생이며 Rx/ Tx interrupt 보다 높은 우선 순위를 갖음.

Type	FIFO Mode	Non-FIFO Mode
Rx interrupt	Rx FIFO의 trigger level을 만족한다면 Rx interrupt 발생 (Rx FIFO trigger level ) Rx FIFO에 데이터 수신이 3번 이상 없을 경우 Rx interrupt 발생 (receive time out )	수신 데이터가 full이면, receive holding register가 interrupt 발생
Tx interrupt	Tx FIFO의 trigger level을 만족한다면 Tx interrupt 발생 (Tx FIFO trigger level)	송신 데이터가 empty이면, transmit holding register 가 interrupt 발생
Error interrupt	parity error, frame error, break signal 감지하면 error interrupt 발생 receive FIFO의 top 위치에 존재하는 데이터를 읽기 전에 데이이터를 수신하면 error interrupt 발생	모든 error 중 한가지 Error가 발생하면 error interrupt가 즉시 발생 같은 시간에 에러가 2개 발생夏眠 Interrupt 는 하나만 발생

UART ERROR STATUS FIFO

UART의 status FIFO 는 Rx FIFO register와 관련이 있다.

Status FIFO는 FIFO register에 error 데이터가 도착했을 경우 이것을 가리킨다.

Status FIFO가 clear 되기 전에 반드시 URXH와 UERSTAT를 읽어야 한다.

아래 그림은 UART Rx FIFO의 A,B,C,D,E 중 수신 중 ‘B’는 frame error을 발생하며 D는 parity error을 발생한다.

각각의 Error 발생은 문자를 읽을 때 나타난다.

Figure 11-3. The case that UART Receives 5 Characters Including 2 Errors

BAUD-RATE GENERATION

각 UART’s baud-rate generator는 송신 및 수신을 위한 시리얼 클럭을 제공.

Baud-rate generator을 위한 source clock은 S3C2800 APB bus clock(PLCK)에 의해 선택.

Baud-rate clock은 source 클럭을 나누어서 생성한다. 이때 source 클럭을 나누기 위한 값(나눗수)은 baud-rate divisor register (UBRDIV) 값을 이용한다.

UBRDIVn = (round_off)(PCLK/(bps * 16))-1

예를 들어 bard-rate : 230400, PCLK 50Mhz 일 경우

UBRDIVn = (int)( 500000000 / (230400 * 16 )+ 0.5 ) –1

= (int)(13.6 + 0.5)-1

= 14 –1 =13

0.5 의 값의 의미를 모르겠네요..알려주세요…

LOOP-BACK MODE

S3C2800 UART는 loopback 모드를 제공. Communication link의 단절 문제를 보완하기 위해 필요. 이 모드에서는 송신된 데이터를 즉시 받는다. Local UART 송신과 수신이 정상임을 확인. Loop-back모드의 선택은 UART control register(UCONn)의 loopback-bit를 셋팅.

BREAK CONDITION

송신데이터 출력 시 프레임 송신을 위한 계속적인 low level signal로 정의

UART SPECIAL FUNCTION REGISTERS

UART LINE CONTROL REGISTER ( ULCON )

Register	Address	R/W	Description	Reset Value
ULCON0	0x1017 0000	R/W	UART 0 line control register	0x0000 0000
ULCON1	0x1018 0000	R/W	UART 1 line control register	0x0000 0000

ULCONn	Bit	Description	Initial State
Infra-Red Mode	[7]	Infra-Red mode의 사용 결정 0: Normal mode operation 1: Infra-Red Tx/Rx mode	0
Parity Mode	[6:4]	Parity 발생을 어떻게 할 것인지 결정 0xx = No parity 100 = Odd parity 101 = Even parity 110 = Parity forced/checked as 1 111 = Parity forced/checked as 0	000
Reserved	[3]	Reserved	0
Number of stop bit	[2]	Frame 끝을 알리는 stop bit의 수 결정 0 = One stop bit per frame 1 = Two stop bit per frame	0
Word length	[1:0]	송신과 수신 Data bit의 수를 결정 00 = 5 bit 01 = 6 bit 10 = 7 bit 11 = 8 bit	00

UART CONTROL REGISTER (UCONn)

UCON0 , UCON1

Register	Address	R/W	Description	Reset Value
UCON0	0x1017 0004	R/W	UART 0 control register	0x0000 0000
UCON1	0x1018 0004	R/W	UART 1 control register	0x0000 0000

UCONn	Bit	Description	Initial State
Tx interrupt type	[9]	0 = Pulus non FIFO mode : Tx buffer가 empty 되면 즉시 인터럽트 발생 FIFO mode : Tx FIFO가 trigger level에 도착하면 즉시 인터럽트 발생 1 = Level non FIFO mode : Tx buffer가 empty 되는 동안 인터럽트 발생 FIFO mode : Tx FIFO가 trigger level에 있는 동안 인터럽트 발생	0
Rx interrupt type	[8]	0 = Pulus non FIFO mode : Rx buffer가 empty 되면 즉시 인터럽트 발생 FIFO mode : Rx FIFO가 trigger level에 도착하면 즉시 인터럽트 발생 1 = Level non FIFO mode : Rx buffer가 empty 되는 동안 인터럽트 발생 FIFO mode : Rx FIFO가 trigger level에 있는 동안 인터럽트 발생	0
Rx time out Interrupt	[7]	UART FIFO 모드가 동작 중 일 때 사용 Rx time out 인터럽트가 Disable/Enable된다. 0 = Disable, 1 = Enable	0
Rx error status interrupt enable	[6]	Break, frame error, parity error, overrun error q발생 했을 경우 이 bit가 1이면 인터럽트 발생 0 이면 인터럽트는 발생하지 않는다.	0
Loop-back mode	[5]	0 = Normal mode, 1 = loop-back mode	0
Send break signal	[4]	UART가 break signal을 보내면 1 frame을 전송할 동안 1로 셋트, 이후 자동 clear 된다. 0 = normal transmit 1 = Send break signal	0
Transmit mode	[3:2]	현재 Tx data를 어떤 방식으로 UART transmit holding register에 저장하는 가를 결정 00 = disable, 01 = Interrupt request 1x = DMA request	00
Receive mode	[1:0]	현재 Rx data를 어떤 방식으로 UART transmit holding register에 저장하는 가를 결정 00 = disable, 01 = Interrupt request 1x = DMA request 10 = 7 bit 11 = 8 bit	00

UART FIFO CONTROL REGISTER (UFCONn)

UFCON0 , UFCON1

Register	Address	R/W	Description	Reset Value
UFCON0	0x1017 0008	R/W	UART 0 FIFO control register	0x0000 0000
UFCON1	0x1018 0008	R/W	UART 1 FIFO control register	0x0000 0000

UFCONn	Bit	Description	Initial State
Tx FIFO trigger level	[7:6]	전송 FIFO의 trigger level 결정 00 = Empty , 01 = 4 byte 01 = 8 byte , 11 = 12 byte	00
Rx FIFO trigger level	[5:4]	수신 FIFO의 trigger level 결정 00 = Empty , 01 = 4 byte 01 = 8 byte , 11 = 12 byte	00
Reserved	[3]		0
Tx FIFO reset	[2]	FIFO resetting 이후 자동 clear 0 = Normal , 1 = Tx FIFO	0
Rx FIFO reset	[1]	FIFO resetting 이후 자동 clear 0 = Normal , 1 = Tx FIFO	0
FIFO enable	[0]	0 = FIFO disable , 1 = FIFO mode	0

NOTE : DMA 수신 모드 상태에서 FIFO trigger level 상태가 아니고 3 frame을 전송할 시간동안 더 이상 수신되는 데이터가 없을 때, Rx interrupt가 발생하며, 개발자는 FIFO 상태와 읽은 데이터를 체크 해야 한다.

UART MODEM CONTROL REGISTER ( UMCONn )

UMCON0, UMCON1

Register	Address	R/W	Description	Reset Value
UMCON0	0x1017 000C	R/W	UART 0 MODEM CONTROL REGISTER	0x0000 0000
UMCON1	0x1018 000C	R/W	UART 1 MODEM CONTROL REGISTER	0x0000 0000

UMCON n	Bit	Description	Initial State
AFC	[1]	0 = Disable, 1 = 1Enable	0
Request to send	[0]	AFC bit가 enable 이면 이 bit는 무시 AFC bit가 disable 이면 nRTS는 소프트 웨어로 control 된다. 0 = ‘H’ level( inactivate nRTS ) 1 = ‘L’ Level( Activate nRTS )	0

UART TX/RX STATUS REGISTER (UTRSTATn)

UTRSTAT0, UTRSTAT1

Register	Address	R/W	Description	Reset Value
UTRSTAT0	0x1017 0010	R	UART 0 Tx/Rx status register	0x0000 0006
UTRSTAT1	0x1018 0010	R	UART 1 Tx/Rx status register	0x0000 0006

UTRSTATn	Bit	Description	Initial State
Transmit shifter empty	[2]	Transmit buffer register에 전송할 데이터가 없고, Transmit shift register가 비워 있을 때 자동적으로 1로 세트 0 = Not empty 1= Transmit holding and shift register empty	1
Transmit FIFO empty/ Transmit buffer empty	[1]	Transmit buffer register가 empty인 경우 자동적으로 1로 세트 0 = The buffer register is not empty 1 = Empty Non-FIFO mode Interrupt 또는 DMA 요구 FIFO mode Tx FIFO trigger level 이 00 ( empty )인 경우 : Interrupt 또는 DMA 요구 UART의 FIFO를 사용한다면, 개발자는 Tx FIFO count bit와 UFSTAT register의 Tx FIFO full bit를 체크 해야 할 것 같다	1
Receive FIFO empty/ Receive buffer empty	[0]	Receive buffer register가 데이터를 가지고 있을 때는 항상 자동적으로 1로 세트 0 = Empty 1 = The buffer register has a received data Non-FIFO mode Interrupt 또는 DMA 요구 UART의 FIFO를 사용한다면, 개발자는 Rx FIFO count bit와 UFSTAT register의 Rx FIFO full bit를 체크 해야 할 것 같다	0

UART ERROR STATUS REGISTER (UERSTATn)

UERSTAT0, UERSTAT1

Register	Address	R/W	Description	Reset Value
UERSTAT 0	0x1017 0014	R	UART 0 Rx error status register	0x0000 0000
UERSTAT 1	0x1018 0014	R	UART 1 Rx error status register	0x0000 0000

UERSTATn	Bit	Description	Initial State
Break detect	[3]	Break signal 이 수신 되었음을 가리키는 bit 0 = No break receive 1 = Break receive ( Interrupt is requested )	0
Frame error	[2]	수신 동작 중 frame error가 발생 했음을 가리키는 bit 0 = No frame error during receive 1 = Frame error ( Interrupt is requested )	0
Parity error	[1]	수신 동작 중 Parity error가 발생 했음을 가리키는 bit 0 = No parity error during receive 1 = parity error ( Interrupt is requested )	0
Overrun error	[0]	수신 동작 중 Overrun error가 발생 했음을 가리키는 bit 0 = No overrun error during receive 1 = overrun error ( Interrupt is requested )	0

NOTE : UART error status register를 읽었을 때 UERSTAn[3:0] 자동적으로 clear(0) 된다.

UART FIFO STATUS REGISTER (UFSTATn)

UFSTAT0, UFSTAT1

Register	Address	R/W	Description	Reset Value
UFSTAT 0	0x1017 0018	R	UART 0 FIFO status register	0x0000 0000
UFSTAT 1	0x1018 0018	R	UART 1 FIFO status register	0x0000 0000

UERSTATn	Bit	Description	Initial State
Tx FIFO full	[9]	전송 동작 중 Transmit FIFO가 full 일 경우 세트 0 = 0 byte <= Tx FIFO data <= 15 byte 1 = full	0
Rx FIFO full	[8]	수신 동작 중 Receive FIFO가 full 일 경우 세트 0 = 0 byte <= Rx FIFO data <= 15 byte 1 = full	0
Tx FIFO count	[7:4]	Number of data in Tx FIFO	0
Rx FIFO count	[3:0]	Number of data in Rx FIFO)	0

UART MODEM STATUS REGISTER (UMSTATn)

UMSTAT0, UMSTAT1

Register	Address	R/W	Description	Reset Value
UMSTAT 0	0x1017 001C	R	UART 0 Modem status register	0x0000 0000
UMSTAT 1	0x1018 001C	R	UART 1 Modem status register	0x0000 0000

UMSTATn	Bit	Description	Initial State
Delta CTS	[1]	CPU가 UMSTAT를 읽은 이후부터 처음으로 nCTS 상태가 바뀌었음을 나타내는 비트 0 = Has not changed 1 = Has changed	0
Clear to send	[0]	0 = CTS signal is not activated (nCTS pin is high) 1 = CTS signal is activated(nCTS pin is low)	0

UART TRANS BUFFER REGISTER (HOLDING REGISTER &FIFO REGISTER) (UTXHn)

UTXH0, UTXH1

Register	Address	R/W	Description	Reset Value
UTXH 0	0x1017 0020 (L) 0x1017 0023 (B)	R	UART 0 transmit buffer register	Undefined
UTXH 1	0x1018 0020 (L) 0x1018 0023 (B)	R	UART 0 transmit buffer register	undefined

UTXHn	Bit	Description	Reset Value
TXDATAn	[7:0]	Transmit data for UARTn	Undefined

NOTES:

1.    (L) Indicates Little-endian mode

2.    (H) Indicates Big-endian mode

UART RECEIVE BUFFER REGISTER (HOLDING REGISTER &FIFO REGISTER) (URXHn)

URXH0, URXH1

Register	Address	R/W	Description	Reset Value
URXH 0	0x1017 0024 (L) 0x1017 0027 (B)	R	UART 0 Receive buffer register	Undefined
URXH 1	0x1018 0024 (L) 0x1018 0027 (B)	R	UART 0 Receive buffer register	undefined

URXHn	Bit	Description	Reset Value
RXDATAn	[7:0]	Receive data for UARTn	Undefined

NOTES:

3.    (L) Indicates Little-endian mode

4.    (H) Indicates Big-endian mode

UART BAUD RATE DIVISION REGISTER (UBRDIVn)

UBRDIVn

시리얼 Tx/Rx clock rate를 결정 할 때 사용

UBRDIVn = (round_off) ( PCLK/(bsp * 16 )) –1

예를 들어 bard-rate : 230400 bps, PCLK 25Mhz 일 경우

UBRDIVn = (int)( 250000000 / (230400 * 16 )+ 0.5 ) –1

= (int)(6.8 + 0.5)-1

= 7 –1 = 6 ( 0x6 )

0.5 의 값의 의미를 모르겠네요..알려주세요…

Register	Address	R/W	Description	Reset Value
UBRDIV 0	0x1017 0028	R/W	UART 0 baud-rate divisior register	0x0000 0000
UBRDIV 1	0x1018 0028	R/W	UART 1 baud-rate divisior register	0x0000 0000

UBRDIVn	Bit	Description	Initial State
UBRDIV	[15:0]	Baud rate division value UBRDIVn >0	0x000D