这个bitband,我早就对其有点意见哈,它的终止是用一个大的字节来应映一个比特。我之所以对它有意见是我觉得这样做
有点浪费,当然这是对ARM有意见,其它家厂都得照做。
处理器包括两个bit-band范围,SRAM的低1MB和外设存贮区。在bit_band区里应射每一个字到相应的内存中的比特位。
在Atmle Studio6.2开发环境中,插入开发板则自动弹出该板的界面:
bit_band区地宏在这里:
#define BITBAND_ALIAS_ADDRESS(addr, bit) \
((volatile uint32_t*)((((uint32_t)(addr) & 0xF0000000) + 0x02000000) \
+((((uint32_t)(addr)&0xFFFFF)*32)\
+( (uint32_t)(bit)*4))))
而点灯是在下边:
while (1) {
/* Toggle LED with bit banding. */
if (*BITBAND_ALIAS_ADDRESS(&LED0_PIO->PIO_ODSR, uc_led_bit)) {
/* Turn on the LED. */
*BITBAND_ALIAS_ADDRESS(&LED0_PIO->PIO_CODR, uc_led_bit) = 1;
} else {
/* Turn off the LED. */
*BITBAND_ALIAS_ADDRESS(&LED0_PIO->PIO_SODR, uc_led_bit) = 1;
}
本程序的运行效果同上次一样也是一闪一闪的,但控制原理不一样,这次是bit_band控制。
|