2019. 8. 19. 13:22ㆍ개발 관련 학습정리/ARM(cortex-m3) Register 분석
cortex-m3의 구조와 입출력 레지스터를 다루어 보자.
대표적인 특징을 나열하자면,
1. Data bit, address bit는 1clk당 32bit전달
2. Core, Flash, sram은 bus로 연결
3. Core는 thread단위로 제어가능
4. Amba bus(bus matrix)는 master/slave모드로 구성되어 있고 (AHB, APB1…2) bridge로 나눔
5. RCC (Reset Clock Control)이 클록 제공
6. APB2 – gpio, adc / APB1 - I2C, USART, SPI가 포함되어있다.
7. DMA(Direct Memory Access) – flash에서 가져오는 정보를 따로 처리
등이 있다.
이제 cortex-m3의 아키텍처를 이해하였으면, 그에 대한 레지스터 구조를 알아보자.
cortex-m3의 레지스터 주소는 24비트의 base와 8비트의 offset으로 이루어져 있다.
그럼 본격적으로 gpio에 관련된 레지스터에 대해 알아보자.
1. RCC_APB2ENR
bit-14 (USART1EN) : USART통신에 필요한 클락을 활성화 시킵니다.
bit-12 (SPI1EN) : SPI통신에 필요한 클락을 활성화 시킵니다.
bit-11 (TMI1EN) : TIMER1에 필요한 클락을 활성화 시킵니다.
bit-10...9 (ADC1...2) : ADC에 필요한 클락을 활성화 시킵니다.
bit-6...2 (IOPXEN) : PORTX에 필요한 클락을 활성화 시킵니다.
bit-0 (AFIOEN) : Alternate function에 필요한 클락을 활성화 시킵니다.
2. GPIOx_CRL
CNFx
input일때 -
00 : analog input
01 : floating input
10 : pull-up/pull-down
11: x
output일때 -
00 : push-pull
01 : open-drain
10 : alternate push-pull
11: alternate open-drain
MODEx
00 : input
01 : output - 10MHz
10 : output - 2MHz
11: output - 50MHz
3. GPIOx_ODR
0~15비트를 이용하여 포트 16개를 출력하는데 사용하는 레지스터이다.
순서는 클럭 활성화 - GPIO 세팅 - GPIO 입출력 순이다.
이제 예제코드를 통해 알아보도록 하자.
int main (void) {
*(volatile unsigned int*)0x40021018 = 0x08; //RCC_APB2ENR - PORTB enable
*(volatile unsigned int*)0x40010C00 = 0x33000; //GPIOB_CRL - PORTB3,4 enable
for(;;) {
*(volatile unsigned int*)0x40010c0c |= 0x10; // PORTB 4pin output
Delay(100000);
*(volatile unsigned int*)0x40010c0c &= ~(0x10); // PORTB 4pin reset
*(volatile unsigned int*)0x40010c0c |= 0x08; //PORTB 3pin output
Delay(100000);
*(volatile unsigned int*)0x40010c0c |= 0x10;
Delay(100000);
*(volatile unsigned int*)0x40010c0c &= ~(0x10);
*(volatile unsigned int*)0x40010c0c &= ~(0x08); //PORTB 3pin reset
Delay(100000);
}
}
'개발 관련 학습정리 > ARM(cortex-m3) Register 분석' 카테고리의 다른 글
[Cortex-M3] 6. DMA와 ADC (0) | 2019.09.16 |
---|---|
[Cortex-M3] 5. Systick, TimerX 제어하기 (2) (0) | 2019.09.09 |
[Cortex-M3] 4. Systick, TimerX 제어하기 (1) (0) | 2019.09.08 |
[Cortex-M3] 3. EXTI(외부 인터럽트)와 AFIO, NVIC (1) | 2019.09.02 |
[Cortex-M3] 2. Cortex-M3의 GPIO 두번째 (0) | 2019.08.27 |