【发布时间】:2013-03-12 04:57:28
【问题描述】:
嗨,
我是嵌入式编码的新手。我正在研究 ARM lm3s8962 控制器。
谁能向我解释一下下面的代码在做什么?它正在实现 bit banging,但我想知道它是如何实现的。
//*****************************************************************************
//
// 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))
【问题讨论】:
-
呃,有什么可以得到的?它们只是做事的宏/程序员快捷方式。他们不靠自己做任何事情。
-
感谢您的回复,我想知道这个过程是如何进行的,就像 hWREG 返回地址一样,hwregh 和 b 也是如此,但是当涉及到 HWREGBITB(X,b) 时设置位(如果 m 没有错)我想知道它是如何设置这个位的,因为我对这么多移位操作感到困惑,你能解释一下吗?再次感谢
标签: bitmap arm cortex-m3 texas-instruments