본문 바로가기

Architecture/LM3S8962

[LM3S8962] UART

driverlib/uart.c driverlib/uart.h

1. UART 이용하기


1.1 UART 전제기능
 
Stellaris 제품군의 UART 특징
   - IrDA를 지원하는 2개의 programmable 16C550-type UARTs 제공
   - 16*8 bit receiver FIFO , 16*8 bit transmit FIFO 기능
   - Baud rate를 설정 가능 (3.125Mbps까지)
   - 1/8, 1/4, 1/2, 3/4, 7/8의 FIFO 트리거 레벨
   - IrDA serial-IR (SIR) encoder/decoder
   - DMA interface





UARTIFLS - UART Interrupt FIFO Level Select
UARTIM - UART Interrupt Mask
UARTMIS - UART Interrupt Masked Interrupt Status
UARTRIS - UART RAW Interrupt Status
UARTICR - UART Interrupt Clear

UARTRSR/ECR - UART Receive Status/Error Clear
UARTFR - UART Flag
UARTLCRH - UART Line Control
UARTCTL - UART Control
UARTILPR - UART IrDA Low-Power Register

UARTIBRD - UART Integer Baud-Rate Divisor
UARTFBRD - UART Fractional Baud-Rate Divisor





1.2 UART 기능개요

1. 송수신 로직


2. 전송속도 발생
 보레이트 속도는 22비트에서 16비트는 정부부분 6비트는 소수 부분을 나타낸다. 이 값에 의해 보레이트 속도가 결정된다.
 레지스터는 아래와 같다.

 baud-rate divisor (BRD) 는 UART 시스템 클럭과 연관된다.  식은 다음과 같다
 
BRD = BRDI + BRDF = UARTSysClk / (16 * Baud Rate)

 UARTSysClk은 시스템 클럭과 같다.

 자세한건 DataSheet 참고하기 바란다.

3. 데이터 송신
 데이터 송수신은 FIFO에 저장된다. 하나의 문자당 상태 정보는 4bit 이다. 송신하기위해 데이타는 송신FIFO에 쓰이게 된다.
 만약 UART가 활성화되어, 데이타 전송이 발생되면 UARTLCRH 레지스터의 파라미터가 알려준다. 데이터 전송은 FIFO의 왼쪽이 비어있을때까지 전송한다.
 UARTFR 레지스터 비트가 1이면  BUSY이다.
4. 인터럽트 제어
  Overrun Error
  Break Error
  Parity Error
  Framing Error
  Receiver Timeout
  Transmit (when condition defined in the TXIFLSEL bit in the UARTIFLS register is met)
  Receive (when condition defined in the RXIFLSEL bit in the UARTFLS register is met)

5. FIFO 사용
6. 루프작업
 UART 진단 또는 디버그 작업에 대한 내부 루프백 모드로 설정할 수 있다.
7. 직렬 적외선 프로토콜
 





1.3 UART 라이브러리 함수
 
<1. UART 구성 및 제어 함수>

UARTConfigSetExpClk() - UART 설정을 세팅한다.



 => UARTConfigSet() 함수를 API로 제공한다.
 
    #define UARTConfigSet(a,b,c) UARTConfigSetExpClk(a, SysCtlClockGet(), b, c)
    ex) 
 
    UARTConfigSet(UART0_BASE, 9600, UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE);


UARTConfigGetExpClk - UART설정을 얻는다.

 

 
 => UARTConfigGet() 함수를 API로 제공한다.
 
    #define UARTConfigSet(a,b,c) UARTConfigGetExpClk(a, SysCtlClockGet(), b, c)


UARTParityModeSet() - 패리티 비트 타입을 세팅한다.




UARTParityModeGet( ) - 현재 사용하고 있는 패리티비트 타입을 얻는다.




UARTFIFOLevelSet() - 인터럽트를 생성하는 FIFO Level을 설정한다.



The trigger points for the transmit interrupt are as follows:
UART_FIFO_TX1_8 : TX FIFO <= 1/8 full
UART_FIFO_TX2_8 : TX FIFO <= 2/8 full
UART_FIFO_TX4_8 : TX FIFO <= 4/8 full(default)
UART_FIFO_TX6_8 : TX FIFO <= 6/8 full
UART_FIFO_TX7_8 : TX FIFO <= 7/8 full






UARTFIFOLevelGet() - 인터럽트를 생성하는 FIFO Level을 알아낸다.








<2. UART 활성화/ 비활성화 함수>

UARTEnable() - UART 송수신 활성화




UARTDisable() - UART 송수신 비활성화



UARTEnableSIR() - IrDA UART 송수신 활성화



UARTDisableSIR() - IrDA UART 송수신 비활성화






UARTDMAEnable() - UART DMA 활성화





UARTDMADisable() - DMA UART 비활성화






<3. UART 데이터 송수신 함수>

UARTCharPut( ) - 지정된 포트에 문자를 보내고 기다림



UARTCharGet() - 지정된 포트에서 문자를 기다림





UARTSpaceAvail() - 송신 FIFO에 공간이 남아 있는지 리턴





UARTCharsAvail() - 수신 FIFO의 문자 공간이 남아 있는지 리턴




UARTCharPutNonBlocking() - Wait없이 정해진 포트로 문자를 보낸다.





UARTCharNonBlockingPut() - UARTCharPutNonBlocking() 함수와 같다.



UARTCharGetNonBlocking()
- Wait없이 바로 정해진 포트에서 문자를 받아옴



UARTCharNonBlockingGet() - UARTCharGetNonBlocking() 와 같다.


UARTBusy() - UART 송신중인지 확인하는 함수




UARTBreakCtl() - ??