p136, 159




MamoryMap

MamoryMap




RCC register map






GPIO register map



소스코드


int main(void){

(*(volatile unsigned*)0x40021018) |= 0x8;

(*(volatile unsigned*)0x40010C04) |= 0x10;


while(1)

{;}

}


schematic



volatile를 사용하는 이유:

컴파일과정에서 컴파일러가 쓸모없다고 판단하여 삭제해버리는 내용이 있다. 이를 삭제하지말고 컴파일 하게 할 때 사용한다.


소스해석


1.

(*(volatile unsigned*)0x40021018) |= 0x8;

0x40021018 : 위 메모리맵의 AHB 영역에서 RCC에 해당한다. RCC레지스터맵에서 0x18은 RCC_APB2ENR을 나타낸다.

0x8은 16진수표현이다. 이를 2진수로 표현하면 0b1000이다. RCC_APB2ENR에서 IOPBEN에 1이 들어간것과 같은의미.


APB2 peripheral clock enable register (RCC_APB2ENR)

address: 0x18    (해당주소. base 0x40021000 + 0x18 = 0x40021018)


역할

GPIO B를 사용하기 위해서, 이것에 Clock을 공급할 수 있도록 enable 시키는것.

APB2ENR의 IOPBEN을 ON시키기 위해서.


2.

(*(volatile unsigned*)0x40010C04) |= 0x10;

0x40010C04=0x40010C00+0x04

이는 GPIOB_CRH이다.


Port configuration register low(GPIOx_CRL)

Address offset : 0x00


Port configuration register high(GPIOx_CRH)

Address offset : 0x04


Table50을 보자. 32비트 레지스터 내용은 각 Pin별로 4비트씩 설정을 할 수 있도록 되어있다.

CRH에서 0x10을 or 시키면, 0b00010000이 된다. 핀 9번, 8번에 대하여 적용되어, pin8번은 0000, 핀9번은 0001이 적용되어 CNF:00, MODE:01이 된다.


책을보면, MODE 01로 Output mode, max speed 10MHz가 적용, CNFy 00으로 General purpose output push-pull이적용된다.


pull-up, pull-down.과

Open-Drain의 PMOS와 NMOS의 공부가 필요

'중도연재종료 > CORTEX M3' 카테고리의 다른 글

GPIO_Init  (0) 2013.05.25
Key가 눌린것 알아채기  (0) 2013.05.24
고급스러운 코딩1.  (0) 2013.05.24
LED 끄기[GPIO Set Reset 레지스터]  (0) 2013.05.24
Cortex M3 시작. 자료  (0) 2013.05.22
Posted by 십자성군