Cortex Microcontroller Software Interface Standard. 주소 상수를 손으로 쓰지 않게 해 준다.
/* 손으로 */
#define GPIOA_ODR (*(volatile uint32_t *)0x40020014)
/* CMSIS */
GPIOA->ODR |= (1u << 5);
칩 회사가 제공하는 헤더에 주변장치가 구조체로 선언돼 있고, 레지스터는 그 멤버다. 레지스터가 연속된 주소에 순서대로 배치돼 있기 때문에 구조체 하나로 딱 맞아떨어진다.
얻는 것
- 오타로 주소를 틀릴 일이 사라진다
- 비트 위치도
GPIO_ODR_OD5_Msk같은 매크로로 제공된다 - 코어 기능(NVIC·SysTick·DWT) 접근이 칩과 무관하게 같아진다
알아 둘 것
CMSIS 는 HAL 이 아니다. 레지스터를 그대로 노출할 뿐 동작을 감싸지 않는다. 그래서 데이터시트를 읽으며 쓰는 층이고, 이 층을 이해하는 것이 임베디드의 기본기다.