Skip to content

20260507_CMSIS

Jaedeok Kim edited this page May 14, 2026 · 20 revisions

ba56352

Overview

해당 Commit은 STM32H723에 들어 있는 ARM Cortex-M7 프로세서와 그 주변 장치 (ITCM/DTCM RAM, SRAM, Flash Memory, USB Controller 등)을 더 편리하게 제어할 수 있는 CMSIS-Core 라이브러리와 CMSIS-Device 라이브러리를 추가한다.

Background

STM32H723에는 약 140개의 Hardware Interrupt와 Software Interrupt (Exception)가 있는데[1], 이 중에서 54번째 Interrupt (TIM6_DAC)만을 비활성화하는 코드를 짜야 한다고 가정하자.

ARM Cortex-M7에서는 Interrupt가 발생하면 NVIC (Nested Vectored Interrupt Controller)라는 하드웨어 회로가 Interrupt가 발생했을 때 실행할 함수의 주소 (Interrupt Service Routine, Exception Handler)를 ITCM RAM의 0x00000000에 있는 Vector Table에서 찾고 해당 주소를 Program Counter에 넣는데, 특정 인터럽트를 비활성화시키기 위해서는 NVIC의 NVIC_ICERx라는 "Interrupt Clear-Enable" 레지스터[2]에서 그 인터럽트에 해당하는 비트를 켜거나 꺼야 한다.

// NOTE: 0번째부터 31번째 Interrupt까지는 `NVIC_ICER0`에서 담당함
#define NVIC_ICER1 0xE000E184

// NOTE: `NVIC_ICER1`의 22번째 비트를 꺼야 54번째 Interrupt만을 비활성화할 수 있음
*((volatile unsigned char *) NVIC_ICER1) |= (1 << 22);

[1] RM0468, Rev. 3, pp. 731-739.
[2] PM0253, Rev. 5, p. 184.

Clone this wiki locally