목차
Bit Banding
Cortex-M3 에서는 비트 연산을 빠르게 할 수 있도록 ‘비트밴딩’ 이라는 것을 제공합니다.
Bit Banding을 사용하면 코드가 간단해 지며 좀더 빠른 연산이 가능합니다.
(자세한 내용은 ‘Programming manual 을 참조하세요. ^^)
메모리 구조
먼저 메모리 맵을 보면 0x40000000 부터 0x43FFFFFF 까지 Peripheral 의 bit banding 영역입니다.
Bit band region 은 실제 사용하고 있는 메모리 주소이고
Bit band alias 는 Bit band region와 연결해 주는 주소입니다.
32bit x 1MB 의 Bit band region을
각 비트 별로 매칭을 해주니 32MB 가 되는 겁니다.
주소
Bit Banding 주소는 아래와 같이 구할 수 있습니다.
bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number x 4)
Bit Banding 예제
Normal
GPIOA.2 는 보통 이런 식으로 사용됩니다.
GPIOA->BRR = GPIO_Pin_2; // SET GPIOA->BSRR = GPIO_Pin_2; // CLEAR if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2){} // READ STATUS
Bit Banding
Bit Banding 을 사용하면 코드가 깔끔해 집니다.
물론 #define 선언은 한번은 해줘야 하며 그 이후로는 간단히 사용할 수 있다는 겁니다.^^.
#define LED_ON (*(volatile unsigned long*)(GPIOA+ 0x0c x32 + 2x4)) = 1 #define LED_Toggle (*(volatile unsigned long*)(GPIOA+ 0x0c x32 + 2x4)) ^=1 #define LED_OFF (*(volatile unsigned long*)(GPIOA+ 0x0c x32 + 2x4)) = 0 #define LED_STATE (*(volatile unsigned long*)(GPIOA+ 0x08 x32 + 2x4)) // bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number x 4) LED_ON; // LED ON LED_Toggle ; // LED Toggle LED_OFF; // LED OFF if(LED_STATE ){} // read LED STATUS
WAT-STM32-2.8보드 전체 예제
제품 구매
WAT-STM32-2.8 [STM32F103RB Board + 2.8인치 TFT LCD 터치 세트] 는 https://kit128.com/goods/view?no=221 에서 구매하실 수 있습니다.