UART(Universal Asynchronous Receiver-Transmitter)는 데이터를 직렬로 전송하는 통신 프로토콜이며, UART 컨트롤러는 이 프로토콜을 처리하는 하드웨어 모듈입니다.
1. 데이터 쓰기 - DAT 레지스터
데이터를 UART 컨트롤러로 전송하기 위해서는 UART_WRITE 함수를 호출하여 전송할 데이터를 UART의 DAT 레지스터에 기록합니다. 예를 들어, UART_WRITE(84)와 같이 84라는 값을 DAT 레지스터에 기록할 수 있습니다.
2. 송신 FIFO로 데이터 이동
DAT 레지스터에 값이 기록되면, 이 데이터는 자동으로 송신 FIFO로 이동합니다. 송신 FIFO는 여러 데이터 패킷을 일시적으로 저장하여 순차적으로 전송할 수 있도록 대기열을 형성하는 역할을 합니다.
3. THR 레지스터로 이동
데이터가 송신 FIFO로 들어오면, UART 컨트롤러는 해당 값을 THR(Transmit Holding Register) 레지스터로 전송합니다. 이 과정에서 THR 레지스터는 송신할 데이터를 순차적으로 받아들이며, 송신이 완료되면 다음 데이터를 대기 FIFO에서 가져옵니다.
참고로, 송신 인터럽트를 설정하면 THR 레지스터가 비어 있는지 여부에 따라 인터럽트가 동작하게 됩니다. THR 레지스터가 비어 있을 때 인터럽트가 발생하고, 이로 인해 인터럽트 핸들러 함수가 호출되어 다음 데이터를 준비하고 전송하는 프로세스를 처리하게 됩니다.
4. 병렬 데이터를 직렬화
THR 레지스터에 값이 들어가면, UART 컨트롤러 내부에서 이 데이터를 시리얼라이저가 병렬 데이터를 직렬화하여 전송할 준비를 합니다. 직렬화 과정은 데이터를 하나씩 순차적으로 나열하여 송신할 수 있게 변환하는 과정입니다.
5. TSR로 이동 후 데이터 전송
직렬화된 데이터는 Transmit Shift Register(TSR)에 들어갑니다. 여기서 Clock 신호에 맞추어 데이터를 순차적으로 송신하게 됩니다.
'개념 정리' 카테고리의 다른 글
UART 직렬 통신의 기본 개념과 데이터 전송 구조 (0) | 2024.10.29 |
---|---|
인코딩(Encoding) (0) | 2024.03.15 |
DMA(Direct Memory Access) (1) | 2023.11.22 |