티스토리 뷰

AVR의 UART를 SPI 마스트 모드로 설정하여 LCD를 제어하는 방법에 대해서 먼저 설명하도록 하겠다.


"Using the Master SPI Mode of the USART"라는 문서에서 다음과 같은 그림을 볼 수 있다.


왼쪽이 SPI master 모드로 동작하는 AVR이고 오른쪽이 SPI slave모드로 동작되는 AVR이다.  두개의 AVR을 하나는 SPI 마스트로, 다른 하나를 SPI 슬레이브로 연결하는 방법을 설명하는 그림이다.

왼쪽 AVR을 보면 TXD핀이 MOSI처럼 동작하고 RXD가 MISO로, XCK가 SCK처럼 동작되는 것을 볼 수 있다.


AVR 데이터쉬트에서 USART챕터에 보면 Asynchronous mode일때와 Synchronous Master mode로 동작할 경우의 baud rate 구하는 공식이 나온다.  당연히 UBRR값을 구하는 공식도 같이 나오는 것을 볼 수 있다. Async mode일 경우에 16배 샘플링하기 위하여 16으로 나누어 주었지만, Sync mode일 경우에는 클럭 시그널이 동시에 제공되므로 2로 나누어 주는 것을 볼 수 있다.


UART를 SPI 마스트 모드로 설정하는 절차는 다음과 같다.

위의 절차대로 코드를 만들면 다음과 같은 모습이 된다.


가장 먼저 UBRR 레지스터 값을 0으로 만든다.

다음에는 XCK 포트를 출력모드로 설정한다.

그리고 난 다음엔, UCSR_C레지스터의 UMSEL 비트를 SPI Master Mode로 설정한다.

SPI의 polarity 설정을 하고, UART의 TX, RX를 enable 시킨다.

마지막으로 적당한 UBRR 값을 설정한다.


이번 프로젝트는 LCD로 데이터를 내보내는 동작만 할것이기 때문에 UART의 수신부분은 고려하지 않아도 된다.  그래서 TX 기능만 enable하였고, 

uart_tx() 함수만 만들었다.  데이터를 내보내는 방법은 일반적인 UART동작과 동일하다.

일반적인 UART 설정은 입문과정의 UART - 원리와 연결이후 몇개의 글을 참고하기 바란다.


uart.c

uart.h






댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함