본문 바로가기
임베디드SW/Peripheral for 임베디드

페리페럴 레지스터란 무엇인가? (feat. 임베디드 MCU)

by 바이너리 임베디드 2021. 12. 5.

페리페럴 레지스터란 무엇인가?



"페리페럴 레지스터 세팅 다했다" 

페리페럴은 무엇이고 레지스터는 무엇이고 레지스터 세팅은 무엇을 의미하는가에 대해 오늘 알아보도록 합시다.



페리페럴은 무엇인가?

우선 페리페럴을 설명하기 전에 데스크탑을 예로 들어 보겠습니다.

데스크톱 안에는 브레인 역할을 하는 CPU가 있습니다. 
그리고 CPU에서는 모니터와 키보드 프린터 마우스와 같은 주변기기들과 연결되어서 많은 연산을 수행하고 있습니다.
키보드나 마우스로부터 들어오는 입력값들을 모니터와 프린터 같은 장치에 출력을 내보내 주면서 데스크톱은 동작하게 됩니다.


임베디드 MCU에도 동일하게 브레인 역할을 하는 CPU가 있습니다. 
그리고 모니터 키보드에 해당하는 주변기기들 또한 있습니다. 
MCU에서 특정한 목적을 수행하는 주변기기로는 UART, PWM, SPI, CAN, Timer, ADC 등등이 있습니다.
그래서 CPU와 주변기기간에 입출력을 내보내면서 동작하게 됩니다.
이러한 주변기기들을 임베디드에서 페리페럴이라고 합니다.


페리페럴 레지스터란 무엇인가?

 

 


레지스터는 무엇인가?


임베디드 MCU 페리페럴에서 레지스터라 함은 전자기기의 패널 정도로 생각하시면 됩니다.

예를 들어 공기청정기 제품이 있고 공기청정기 제품을 동작시키기 위해 패널이 있습니다. 
공기 청정기 제품을 켜기 위해서 패널에 있는 전원 버튼을 누르면 제품이 켜지게 됩니다.
패널에는 제품이 켜졌다는것을 알려주기 위해 패널에 불이 들어오고 있습니다.
미세먼지가 많은 상태라 동작을 풍량 세기를 강으로 선택합니다. 
그럼 패널에는 미세먼지가 줄어드는 상태를 패널에서 보여주게 됩니다.

레지스터는 이런 패널과 비슷한 역할을 하고 있습니다. 
예를 들어 UART 페리페럴이 있다고 해봅시다.

UART통신 속도를 설정하고 싶습니다. 그래서 레지스터의 9600bps의 속도로 세팅할 수 있습니다.

이때 레지스터를 사용하는 것이죠.

데이터를 송신하라는 명령또한 레지스터에서 할수 있습니다.

수신된 데이터를 읽을 때도 레지스터를 통해 합니다.

기능들을 조작하고 어떤 상태인지 확인할 수 있는 것이 바로 레지스터라 할 수 있습니다.
또한 기능들을 조작하기 위해 있는 레지스터를 Control 레지스터라 하며

어떤 상태인지 알려주는 레지스터를 Status 레지스터라고 합니다.



레지스터를 셋팅한다는 것은 무엇인가?



레지스터를 셋팅한다는 것은 페리페럴 즉 MCU의 주변기기의 기능을 사용하려고 조작하는 행위를 하는 것이라 할 수 있습니다.
그럼 TC275 레퍼런스 매뉴얼에서 레지스터가 어떻게 생겼는지 그리고 실제로 어떻게 코드에서 셋팅을 할 수 있는지 살펴보도록 하겠습니다.

TC275 MCU에는 GTM 모듈에 PWM을 만들어내는 TOM이라는 페리페럴이 있습니다. TOM이라는 페리페럴의 GTM_TOM0_TGC0_GLB_CTRL이라는 레지스터를 세팅해보도록 하겠습니다.  





Base Address를 찾아보자

 

페리페럴 레지스터란 무엇인가?




레퍼런스 매뉴얼을 살펴보면 레지스터는 특정 메모리에 자리잡고 있습니다.
GTM 모듈은 0xF010 0000에서 시작해서 F019 FFFF에서 끝난다고 합니다. Base Address를 잘 기억해 두도록 합시다.

Start Address를 찾아보자

 

페리페럴 레지스터란 무엇인가?



GTM_TOMi_TGC0_GLB_CTRL (i = 0 - 2)은 (08030H + i*800H)라고 표현되어 있습니다.
음 천천히 잘 따라오면 별로 어렵지 않습니다.

GTM_TOM0_TGC0_GLB_CTRL 레지스터는 0x8030 + 0*0x800이고 여기에 Base Address를 더해주면Start Address가 됩니다.
Base Address 0xF010 0000이니까 여기에 0x8030을 더해주면 0xF010 8030이 Start Address가 됩니다.

GTM_TOM1_TGC0_GLB_CTRL 레지스터는 (0x8030 +(1* 0x800))이며 0x8830이고 Base Address를 더하면 0xF010 8830이 Start Address가 됩니다.

GTM_TOM2_TGC0_GLB_CTRL 레지스터는 0xF010 0000 + (0x8030 + (2*0x800))으로 계산하면 0xF010 9030이 Start Address가 됩니다.

참 쉽죠!!??ㅎㅎ

그럼 우리는 GTM_TOM0_TGC0_GLB_CTRL이라는 레지스터를 셋팅해보기로 했습니다.
Start Address를 찾았습니다. 0xF010 8030 입니다.



레지스터가 어떻게 생겼는지 찾아보자

 

페리페럴 레지스터란 무엇인가?



위의 숫자로 0 ~ 31까지 쓰여져 있습니다. 비트를 나타내며 0bit 에서 31bit까지 총 32bit 4byte의 크기를 갖는 레지스터라고 보시면 됩니다.
그럼 우리가 아까 찾은 Start Address가 0xF010 8030이었습니다. 
0xF010 8030부터 0xF010 8033번째까지 사용되고 있다고 보면 됩니다. 
그리고 0xF010 8030의 1bit는 HOST_TRIG라는 이름으로 사용되고 있습니다.  

그리고 rw / w / r 이라고 표기되어 있는 부분이 있습니다. 각각의 표기는 아래와 같은 뜻을 의미합니다.
 
rw : read / write
w : write
r: read

그래서 r의 의미는 해당 비트를 SW로 읽을 수 있다는 의미이며, w의 의미는 해당 비트에 SW로 쓸 수 있다는 의미이고 rw는 둘 다 가능하다는 의미입니다.

레지스터의 구조가 어떻게 되는지 생겼는지 분석해보았습니다.



레지스터 사용 설명서



그럼 레지스터 안에 각 비트별로 작은 레지스터들을 정의해 놓았으며 그 녀석들을 어떻게 사용할지를 레퍼런스 매뉴얼에서는 자세히 설명해놓고 있습니다.
그 설명에 따라 우리는 설명서에 나와 있는 대로 SW에서 그 해당하는 메모리에 접근하여 0으로 세팅할지 1로 세팅할지 결정해주면 됩니다. 
Read 하는 비트인 경우에는 SW에서 그 해당하는 메모리에 접근하여 Read 해서 읽어가면 되는 것입니다. 

페리페럴 레지스터란 무엇인가?


여기까지 레지스터 셋팅하는 것에 대한 의미를 심도 있게 살펴보았습니다.

 

마무리

 

지금까지 페리페럴이 무엇인지 빠르게 한번 살펴보았는데요.

글을 보시고 생기는 궁금증이 있으시면 아래 카페로 오시면 됩니다.

 

https://cafe.naver.com/binaryembedded

 

임베디드 유니버스 : 네이버 카페

임베디드 유니버스 : 임베디드의 세계로 초대합니다.

cafe.naver.com

 

댓글