[STM32]Cortex-M3 에서 bit banding

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 터치 세트

제품 구매

WAT-STM32-2.8 [STM32F103RB Board + 2.8인치 TFT LCD 터치 세트] 는 https://kit128.com/goods/view?no=221 에서 구매하실 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다