#define BIT_ADC (0x1)
#define BIT_RTC (0x1<<1)
#define BIT_UTXD1 (0x1<<2)
#define BIT_UTXD0 (0x1<<3)
#define BIT_SIO (0x1<<4)
#define BIT_IIC (0x1<<5)
#define BIT_URXD1 (0x1<<6)
#define BIT_URXD0 (0x1<<7)
#define BIT_TIMER5 (0x1<<8)
#define BIT_TIMER4 (0x1<<9)
#define BIT_TIMER3 (0x1<<10)
#define BIT_TIMER2 (0x1<<11)
按正常解释这段宏定义如BIT_ADC 展开后是(0x1) 不是一个地址,而不同寄存器的第一位都定义为(0x1)
这该怎么解释,对位操作BIT_ADC=1 具体是怎么实现位的变换?
这个的意思是ADC在相关寄存器的第0位
RTC在相关寄存器的第1位
UTXD1在相关寄存器的第2位
依此类推。。。
好处如下:
设寄存器为REG,
如果相把ADC置位为1,则REG|=BIT_ADC;
如果想把ADC清零,则REG&=BIT_ADC;
如果想把ADC和RTC置位,则REG|=(BIT_ADC|BIT_RTC);更多位需置1时依此类推即可;
如果想把ADC和RTC清零,则REG&=~(BIT_ADC|BIT_RTC);更多位需清零,依此类推即可;
是不是很方便,最重要的是它很直观,让读程序的人一眼就能看出你的程序做了什么工作。。。
这的这段宏定义我猜是针对中断相关的寄存器的。。。