관련글
잡동사니 세상 :: stm32 레지스터 직접 접근 (5. Exception / Interrupt [설명 & 코드 Part 01]) (tistory.com)
잡동사니 세상 :: stm32 레지스터 직접 접근 (5. Exception / Interrupt [인터럽트 설정 Part 02]) (tistory.com)
잡동사니 세상 :: stm32 레지스터 직접 접근 (소개) (tistory.com)
잡동사니 세상 :: stm32 레지스터 직접 접근 (0. Microcontroller와 ARM ) (tistory.com)
잡동사니 세상 :: stm32 레지스터 직접 접근 (1. STM32F10x란) (tistory.com)
잡동사니 세상 :: stm32 레지스터 직접 접근 (2. 프로그램 설치 및 설정) (tistory.com)
잡동사니 세상 :: stm32 레지스터 직접 접근 (3. RCC) (tistory.com)
잡동사니 세상 :: stm32 레지스터 직접 접근 (4. GPIO [Output]) (tistory.com)
잡동사니 세상 :: stm32 레지스터 직접 접근 (4. GPIO [Input]) (tistory.com)
잡동사니 세상 :: stm32 레지스터 직접 접근 (5. Exception / Interrupt [설명 & 코드 Part 01]) (tistory.com)
잡동사니 세상 :: stm32 레지스터 직접 접근 (5. Exception / Interrupt [인터럽트 설정 Part 02]) (tistory.com)
서론
외부인터럽트 EXTI를 사용하기 위해서는 여러가지 registers를 사용해야만했습니다. 이번 포스트에서는 인터럽트 시리즈를 마치면서 사용된 중요 Registers와 사용한 비트들의 의미들을 알아보고자합니다.
RCC
GPIOG
AFIO
EXTI
NVIC
참고 자료
STM32F103ZET6 Reference Manual
Section 7.3.7 [APB2 peripheral clock enable register] (112 ~ 114 page)
Section 9.2.1 [Port configuration register low] (171 page)
Section 9.2.4 [Port output data register] (173 page)
Section 9.4.4 [External interrupt configuration register 2] (191page)
Section 10.3.4 [Falling trigger selection register] (212 page)
Section 10.3.3 [Rising trigger selection register] (212 page)
Section 10.3.1 [Interrupt mask register] (211 page)
Section 10.3.6 [Pending register] (213 page)
STM32F10xxx/20xxx/21xxx/L1xxxx Cortex®-M3 programming manual
Section 4.3.2 [Interrupt set-enable registers] (120 page)
RCC
APB2ENR
Address: 0x18
Absolute address: 0x40021000 + 0x18
IOPGEN: GPIOG에 클럭을 인가합니다.
AFIOEN: Alternate Function Input / Output 기능에 클럭을 인가합니다.
GPIOG
CRL
Address: 0x00
Absolute address: 0x40012000 + 0x00
CNF6[1:0], MODE6[1:0]: PG6를 pull-up / pull-down 모드로 설정합니다. (1000)
ODR
Address: 0x0C
Absolute address: 0x40012000 + 0x0C
ODR6: PG6에 High 신호를 보내 pull-up 모드로 설정합니다.
AFIO
EXTICR2
Address: 0x0C
Absolute address: 0x40010000 + 0x0C
EXTI6: EXTI에 연결할 핀을 설정합니다. (0110)
0000 | PA6 |
0001 | PB6 |
0010 | PC6 |
0011 | PD6 |
0100 | PE6 |
0101 | PF6 |
0110 | PG6 |
EXTI
FTSR
Address: 0x0C
Absolute address: 0x40010400 + 0x0C
TR6: EXTI6가 Falling edge에서도 발생될 수 있도록 합니다.
RTSR
Address: 0x08
Absolute address: 0x40010400 + 0x08
TR6: EXTI6가 Rising edge에서도 발생될 수 있도록 합니다.
IMR
Address: 0x00
Absolute address: 0x40010400 + 0x00
MR6: EXTI6의 인터럽트 신호를 받아들일 준비를 합니다.
PR
Address: 0x14
Absolute address: 0x40010400 + 0x14
PR6: EXTI6가 발생되었는지를 알려줍니다.
EXTI6 Handler가 발생되면 (정확히는 EXTI9_5 Handler) PR register의 PR6는 0으로 초기화시켜줘야합니다.
NVIC
ISER0
Address: 0x00
Absolute address: 0xE000E100 + 0x00
SETENA[23]: EXTI6를 활성화합니다.
EXTI6의 고유 번호는 Interrupt vector table에 나와있는 것처럼 23번입니다.
'stm32 > 강좌' 카테고리의 다른 글
stm32 레지스터 직접 접근 (6. Timer/Counter [함수 설명 Part 02]) (0) | 2021.03.10 |
---|---|
stm32 레지스터 직접 접근 (6. Timer/Counter [코드 Part 01]) (0) | 2021.03.06 |
stm32 레지스터 직접 접근 (5. Exception / Interrupt [인터럽트 설정 Part 02]) (0) | 2021.03.01 |
stm32 레지스터 직접 접근 (5. Exception / Interrupt [설명 & 코드 Part 01]) (0) | 2021.02.27 |
stm32 레지스터 직접 접근 (4. GPIO [Input Part 02]) (0) | 2021.02.19 |