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 |