본문 바로가기
Embedded SW/[Infineon] TC275 Lite Project

UART 통신 MCU Driver 초기화 설계 및 동작 확인 (Tx, Rx Interrupt)

by 방구석 임베디드 2021. 12. 2.
반응형

안녕하세요. 

오늘은 인피니언 MCU UART Driver Code를 조금더

심층적으로 분석해 보는 시간을 가지도록 하겠습니다.

 

참고로 이 글은 개발의 전체적인 내용을 연재하고 있는 글이 중에 하나입니다.

그래서, 앞에쓴 글을 보시면 더욱 도움이 되실것 같습니다.

아래 글을 링크 걸어둘께요. 필요하신 분은 한번 읽어 보세요.

(물론 이 글만 보셔도 크게 문제는 없습니다.)

 

1) 임베디드 SW, MCU에 대한 정리 (feat. 임베디드 SW 비전)

https://embeddedchallenge.tistory.com/210

2) MCU 개발 장비 구매 방법 정리 (인피니언 MCU TC275 Lite)

https://embeddedchallenge.tistory.com/211

3) 임베디드 SW 개발 환경 세팅 방법 정리 (소스코드 편집기, 컴파일러, 디버거 환경 설정 방법)

https://embeddedchallenge.tistory.com/212

4) 인피니언 IDE Tool 사용방법 정리 (프로젝트 생성 및 다운로드 수행)

https://embeddedchallenge.tistory.com/219

5) 인피니언 MCU LED Blinking (TC275 GPIO 설정)

https://embeddedchallenge.tistory.com/225

6) 인피니언 MCU Clock, 오실레이터 에 대한 이해 (TC275 보드에서 확인)

https://embeddedchallenge.tistory.com/226

7) 인피니언 MCU PLL 설정 및 주변기기 Clock 설정 (TC275)

https://embeddedchallenge.tistory.com/227

8) 인피니언 MCU 인터럽트/Interrupt 설정 (TC275 동작 확인)

https://embeddedchallenge.tistory.com/228

9) 스케줄링(scheduling)에 대한 정리, 인피니언 MCU Scheduler 설계 정리

https://embeddedchallenge.tistory.com/229

10) PWM이란 무엇인가? 인피니언 MCU를 이용한 PWM 설계 수행

https://embeddedchallenge.tistory.com/232

11) Motor Driver L298N 사용법 정리 (인피니언 MCU 개발)

https://embeddedchallenge.tistory.com/235

12) DC모터 드라이버 설계, RC카 전진,후진,회전 설계 (인피니언 MCU PWM, GPIO 설정)

https://embeddedchallenge.tistory.com/236

13) UART 통신 정리, UART 통신 MCU 설계 (인피니언 MCU)

https://embeddedchallenge.tistory.com/237

14) Teraterm 시리얼 통신 터미널 프로그램 사용법, 다운로드 방법 (feat 허큘리스)

https://embeddedchallenge.tistory.com/238

15) Logic analyzer 사용법 (saleae 로직 분석기 사용법 정리)

https://embeddedchallenge.tistory.com/239

 

이제, Teraterm 이용하여 'a'를 발사해 보도록 하겠습니다.

이 a는 노트북 USB 포트를 거쳐 TTL 변환기를 통과하여 UART 신호 레벨로 변경이되어

MCU안의 UART 모듈 Rx 라인으로 들어가게 됩니다.

전압의 흐름은 아래와 같습니다.

0x61은 아스키코드표에서 'a'를 의미합니다.

이제 이 전압을 받으려고 합니다.

어떻게 해야할까요?

이제 아래 MCU로 들어갑니다.

MCU라인은 P15.3번이 Rx이고 P15.2가 Tx입니다.

 

그렇다면 이 2개의 Pin을 UART Tx와 Rx로 쓰겠다는 초기화를 수행해 주어야 합니다.

아래 초기화가 보이죠?

P15.3 UART Rx로 사용하고 P15.2 UART Tx사용하겠다는 뜻입니다.

지금 저 모듈은 ASC를 초기화하는 모듈입니다.

UART라고 생각하시면 됩니다.

 

MCU안에는 UART 모듈이 들어 있습니다.

위에서 ASCLIN 모듈은 asynchronous serial communication을 지원한다는 내용을 확인 할 수 있습니다.

아래는 ASCLIN 모듈의 Block Diagram을 나타내고 있습니다.

보낼데이터는 TXFIFO 모듈에 넣어두면 발사를 하고

RX받은 DATA는 RXFIFO안으로 들어오게 됩니다.

Clock은 fspb 100MHz를 사용하고 있습니다.

이제 Spec을 조금더 분석해 보도록 하겠습니다.

Tx, Rx 16개의 버퍼를 가지고 있습니다.

그리고 LSB부터 보내네요.

방금전 LSB 신호를 보냅니다.

0x61 -> 0110 0001

빨강색 1이 LSB입니다.

따라서 1부터 왼쪽으로 전달을 합니다.

그래서 아래와 같이 보내고 있는것을 볼수 있씁니다.

LSB부터 보내는 모듈입니다.

이제 초기화 코드를 조금더 살펴 보도록 하겠습니다.

인피니언의 Driver 초기화는 아래와 같습니다.

먼저 파라미터를 구조체에 넣은다음

그 구조체에 넣은 것을 ILLD API를 통해서 UART 모듈 레지스터에 입력합니다.

그런데 ILLD가 무엇일까요?

현재 우리는 Infineon MCU를 개발하고 있습니다.

iLLD는 infineon Low Level Driver의 약자입니다.

결국 Device Driver를 설정하는데

우리가 직접 레지스터를 하나하나씩 설정할수도 있지만

iLLD와 같은 Driver API를 이용하여 설저할수도 있습니다.

예를들어서, 아래와 같이 UART 초기화하는 iLLD SW를 이용하면

아래 빨강동그라미에 우리가 원하는 설계 Parameter를 구조체로 넣어주면

그 구조체에 맞추어서 적절한 레지스터값을 이 함수에서 알아서 넣어주게 됩니다.

하나하나 직접 레지스터에 맞는 값을 내가 넣지 않아도 되니 참 좋습니다.

하지만, 우리는 처음에는 ILLD를 이용하여 설계할것이지만,

이 ILLD에 의존하지 않고 되도록 레지스터 단위에서 설계를 수행할 것입니다.

직접 reference manual을 보고 설계를 수행해야 실력이 늘고, 더 Driver에 대해서 잘 이해할수 있습니다.

물론 ILLD SW중에서도 잘못된 SW도 있고요 ㅎㅎ

 

그럼 다시 앞으로 나아가 보도록 하겠습니다.

 

그럼 ILLD의 매개변수인 설계파라미터를 어떻게 넣어주어야 할까요?

우선 기본적으로 3가지를 넣어주면 됩니다.

 

1) BaudRate

2) Interrupt 설정

3) Tx,Rx 버퍼주소 및 사이즈

1) Buad Rate

UART를 통해서 Data를 전송할때, 하나의 비트를 유지하는 시간이 중요하다고 하였습니다.

이것이 약속이 되어 있어야합니다.

위에서 9600이 보입니다.

이것은 1초에 9600개의 비트를 보내겠다는 의미입니다.

따라서 1개의 비트를 유지하는 시간은 1/9600 = 104us 입니다.

한번 볼까요?

아래와 같이 1개의 비트를 1로 표현하기 위하여 전압을 올리는데, 104us가 걸리는 것을 알수 있습니다.

당연히 지금 노트북과 통신을 하고 있으니까!

TeraTerm의 시리얼포트 속도도 9600으로 설정해야 겠지요?

참고로 더 느리게, 또는 더 빠르게 설정할수 있으니 확인하시면 좋을것 같습니다.

2) Interrupt 설정

Interrupt 설정은 간단합니다.

Rx는 하나의 비트를 전달받을때마다 인터럽트를 띄우고

Tx는하나의 비트를 보낼때 인터럽트를 띄우겠다는 의미입니다.

만일 Tx를 17개를 보낼때는 

처음 한번만 뜨고, 나머지는 16개를 보내고 인터럽트가 뜨게 됩니다.

이부분은 나중에 다시 예제로 다루어 보겠습니다.

 

3) Tx,Rx 버퍼주소 및 사이즈

송신을 할때, 버터에 데이터들을 넣어놓고

받을때도 데이터들을 받아 놓는데

이 버퍼의 주소와 크기를 적어달라는 것입니다.

 

Tx를 보낼때 넣어야 하는 버퍼공간이고

Rx를 받으면 저절로 넣어지는 버퍼공간입니다.

 

오늘은 좀 영양가 없는 글을 썼네요.

그래도 ILLD를 구조를 조금 맛보기를 했다는 것에 의미를 부여합니다.

 

그럼 오늘 포스팅은 이것으로 마치도록 하겠습니다.

감사합니다.

반응형

댓글