Embedded System

[임베디드] 데이터시트 활용하여 레지스터에 매핑된 메모리 영역 찾기

임아톰 2023. 3. 17. 08:43

소개

임베디드 시스템에서 주변장치(GPIO, I2C, PWM, ..)를 제어하려면 1) 먼저 주변장치에 대한 설정을 하고 2) 주변장치를 사용하면 됩니다. 따라서 설정하고 사용하는 방법을 알아야 되는데, 임베디드 시스템에서는 메모리 접근하는 방식과 동일하게 주변장치에 접근합니다. 이러한 방식을 Memory Mapped IO라 부릅니다. 

 

Memory mapped IO에서는 주변장치(IO Devicce)가 메모리 주소 공간의 특정 주소에 매핑되어 있습니다. 이러한 주소를 주변장치 레지스터라 부르며 해당 주소에 값을 쓰거나 읽는 것으로 주변장치와 데이터 교환을 수행합니다. 메모리와 주변 장치가 동일한 주소 공간에 매핑되어 있기 때문에 CPU는 메모리에 대한 명령과 주변장치에 대한 명령을 동일하게 처리할 수 있습니다.

 

따라서, 주변장치를 제어하려면 그 장치가 어느 메모리 주소에 매핑되어 있는지 알아야합니다. 그리고 그 정보는 MCU 데이터 시트에 나와있습니다. 이 글에서는 AURIX TC275 MCU 데이터시트에서 GPIO 모듈이 매핑된 메모리 영역을 찾는 방법을 알아보겠습니다. MCU와 주변장치는 다를 수 있지만, 큰 흐름에서는 다른 MCU, 다른 주변 장치도 동일한 방법으로 찾을 수 있습니다.

 

레지스터 시작 주소 찾기

임베디드 시스템에서 하드웨어에 맵핑된 메모리 영역은 레지스터라 부릅니다. 따라서 레지스터 주소를 찾는건 주변장치에 매핑된 메모리 영역을 찾는 것과 동일한 의미입니다.

 

이 글에서는 TC 275 MCU에서 GPIO를 제어한다고 가정하고 레지스터 주소를 찾아보겠습니다.예시에서는 GPIO 2번 포트 1번 핀을 제어한다고 가정합니다.

 

TC 275 MCU의 데이터시트 (Infineon-TC27x_D-step-UM-v02_02-EN) 3장에는 Memory Map에 관한 내용이 있습니다.

Infineon-TC27x_D-step-UM-v02_02-EN. P227

다음과 같이 메모리 맵에 Ports가 위치한 것을 찾아볼 수 있고 문서를 좀 더 내리면 Port 02에 대한 레지스터 주소를 찾을 수 있습니다.

Infineon-TC27x_D-step-UM-v02_02-EN. P230

Port 02의 레지스터의 시작 주소는 0xF003 A200 입니다. 앞으로 찾게될 Port 02 관련 레지스터는 Port 02의 시작 주소에 Offset Address를 더하여 구하면 됩니다.

 

레지스터 주소 찾기

GPIO 설정 시 사용하는 레지스터는 Pn_IOCR 레지스터 입니다. Pn_IOCR의 주소를 찾기 데이터시트에서 Pn_IOCR의 Offset Address를 찾으면 됩니다. Pn_IOCR의 Offset Address는 13장 GPIO 중 13.3 Port Register Description에 나와있습니다.

Infineon-TC27x_D-step-UM-v02_02-EN. P1074

Pn_IOCR0의 Offset Address는 0x0010이므로 Pn_IOCR0의 레지스터 주소는  0xF003 A200 + 0x0010 = 0xF003 A210 입니다. 레지스터 이름에 P2_IOCR0가 아닌 Pn_IOCR0로 표기된 건 다른 Port의 레지스터 구성도 동일하기 때문입니다. 따라서 Port 5의 Pn_IOCR0 레지스터 주소를 찾고 싶다면 Port5의 base address에 0x0010을 더하면 됩니다.

 

GPIO를 출력으로 사용할 때 GPIO를 사용하기 위한 레지스터는 Pn_OUT입니다. Pn_OUT의 레지스터 주소도 동일한 방법으로 주소를 구하면 됩니다.

Pn_OUT의 Offset Address는 0x0000이므로 Pn_OUT의 레지스터 주소는  0xF003 A200 + 0x0000 = 0xF003 A200 입니다.

반응형