是的,对于 Peripheral 来说是可以位带操作的。但对这些操作,通常是有 API 函数来完成的。
楼主是想自己定义变量,当然是定义在 SRAM 区。
对于 Cortex-M3 内核,虽然为 SRAM 去分配 512MB,但有 1MB 是有位带别名区的。
而目前 MCU 的 SRAM 都是小于 1MB 的。
所以将变量定义为 volatile ,让后用下面对应的 macros 来操作就可以完成对一个变量的位操作。
//*****************************************************************************
//
// Macros for hardware access, both direct and via the bit-band region.
//
//*****************************************************************************
#define HWREG(x) \
(*((volatile unsigned long *)(x)))
#define HWREGH(x) \
(*((volatile unsigned short *)(x)))
#define HWREGB(x) \
(*((volatile unsigned char *)(x)))
#define HWREGBITW(x, b) \
HWREG(((unsigned long)(x) & 0xF0000000) | 0x02000000 | \
(((unsigned long)(x) & 0x000FFFFF) << 5) | ((b) << 2))
#define HWREGBITH(x, b) \
HWREGH(((unsigned long)(x) & 0xF0000000) | 0x02000000 | \
(((unsigned long)(x) & 0x000FFFFF) << 5) | ((b) << 2))
#define HWREGBITB(x, b) \
HWREGB(((unsigned long)(x) & 0xF0000000) | 0x02000000 | \
(((unsigned long)(x) & 0x000FFFFF) << 5) | ((b) << 2)) |