Bare metal C Ch06 CMSIS - Hongjayeong-02/Basic_SoC_implementation GitHub Wiki
๋ชฉํ
Ch02์ ์ง์ ์ฃผ์/ํฌ์ธํฐ ๋ฐฉ์์์ CMSIS peripheral structure ๋ฐฉ์์ผ๋ก ์ ํํ๋ค.
CMSIS๋ Cortex-M ๊ธฐ๋ฐ MCU software interface๋ฅผ ํ์คํํ๋ header/interface ์ฒด๊ณ๋ค.
Ch02:
#define GPIOB_ODR (*(volatile unsigned int *)0x40020414UL)
Ch06:
GPIOB->ODR
๊ฐ๋ ์ ์ผ๋ก CMSIS๋ peripheral register layout์ C structure๋ก ํํํ๋ค.
typedef struct
{
volatile uint32_t MODER;
volatile uint32_t OTYPER;
volatile uint32_t OSPEEDR;
volatile uint32_t PUPDR;
volatile uint32_t IDR;
volatile uint32_t ODR;
} GPIO_TypeDef;
๊ทธ๋ฆฌ๊ณ base address์ structure pointer๋ฅผ ์ฐ๊ฒฐํ๋ค.
ํญ๋ชฉ | ์ง์ ์ฃผ์ ๋ฐฉ์ | CMSIS -- | -- | -- Register ์ฃผ์ | ์ง์ ๊ณ์ฐ | Header์ ์ ์ ํํ | *(volatile uint32_t *)... | GPIOB->MODER Bit ์ด๋ฆ | ์ง์ ์ ์ | ST header์ ์ ์ ๊ฐ๋ ์ฑ | ๋ฎ์ | ๋์ ์ค์ HW access | ๋์ผ | ๋์ผ
CMSIS๋ ์ฌ์ ํ register ์ง์ ์ ๊ทผ์ด๋ค.
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN;
์ Ch02์ direct register write์ ๊ฐ์ ์๋ฏธ๋ค.
Ch06_cmsis/
โโโ Src/
โ โโโ main.c
โโโ Startup/
โ โโโ startup_stm32f439zitx.s
โโโ STM32F439ZITX_FLASH.ld
โโโ STM32F439ZITX_RAM.ld
๊ณตํต startup/linker/syscalls๋ Ch04์์ ๋ค๋ค์ผ๋ฏ๋ก Chapter ๊ธฐ๋ฅ ์ฝ๋์ธ main.c๋ฅผ ์๋์ ์ ๋ถ ๊ธฐ๋กํ๋ค.
/*
* Ch06 - The Common Microcontroller Software Interface Standard (CMSIS)
*/
#include "stm32f4xx.h" /* STM32F439xx ๋งคํฌ๋ก์ ๋ฐ๋ผ stm32f439xx.h๋ฅผ ์๋ ํฌํจ */
#define LD1_PIN (1UL << 0) /* PB0 = LD1 (๋
น์) */
static void delay(volatile unsigned int count)
{
while (count--) { __NOP(); }
}
int main(void)
{
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN;
GPIOB->MODER &= ~(0x3UL << (0 * 2));
GPIOB->MODER |= (0x1UL << (0 * 2));
while (1)
{
GPIOB->ODR ^= LD1_PIN;
delay(800000);
}
}
#include "stm32f4xx.h"
์ด header๋ฅผ ํตํด RCC, GPIOB, RCC_AHB1ENR_GPIOBEN, __NOP() ๋ฑ์ ์ฌ์ฉํ ์ ์๋ค.
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN;
GPIOB->MODER &= ~(0x3UL << (0 * 2));
GPIOB->MODER |= (0x1UL << (0 * 2));
GPIOB->ODR ^= LD1_PIN;
Ch02
์ฃผ์๋ฅผ ์ง์ ๊ณ์ฐ
โ
volatile pointer ์ง์ ์์ฑ
โ
register access
Ch06
CMSIS header
โ
Peripheral structure
โ
register access
์ค์ hardware access์ ์๋ฏธ๋ ๋์ผํ๋ค.
Notion ๊ธฐ๋ก ๊ธฐ์ค:
STM32CubeIDE CMSIS include ๊ตฌ์ฑ
Build / Debug / Run
LD1(PB0) ์ ๋ฉธ ํ์ธ
.text = 664 bytes
CMSIS๋ register-level programming์ด๋ค.
GPIOB->MODER๋ base address + structure member offset์ผ๋ก ์ ๊ทผํ๋ค.์ง์ pointer ๋ฐฉ์๋ณด๋ค ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ์ข๋ค.
์ดํ Chapter๋ CMSIS ๊ตฌ์กฐ์ฒด ๋ฐฉ์์ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ๋ค.