论坛» 嵌入式开发» MCU

请教指针问题

助工
2011-10-17 17:02 1楼
typedef union _canier_
{
INT32U Word; //字操作定义
struct
{
INT32U RIE :1; //接收中断使能位
INT32U TIE1 :1; //TxBUF1发送完成中断使能位
INT32U EIE :1; //错误报警中断使能位
INT32U DOIE :1; //数据溢出中断使能位
INT32U WUIE :1; //睡眠模式唤醒中断使能位
INT32U EPIE :1; //错误认可中断使能位
INT32U ALIE :1; //仲裁丢失中断使能位
INT32U BEIE :1; //总线错误中断使能位
INT32U IDIE :1; //接收到CAN标识符中断使能位
INT32U TIE2 :1; //TxBUF2发送完成中断使能位
INT32U TIE3 :1; //TxBUF3发送完成中断使能位
INT32U RSV21 :21;//保留位
}Bits;
}uCANIER,*P_uCANIER;
#define CANIER(CanNum) (*((volatile P_uCANIER)( CANIER_BADR+CanNum* CAN_OFFSET_ADR )))

最后一句是什么意思?
助工
2011-10-17 17:05 2楼
最后一句,定义了一个带参数的宏。可以向CanNum这个参数写不同的数值来寻址不同的寄存器。
比如: CANIER(0x01) = 0x12345678;
助工
2011-10-17 17:16 3楼
CANIER_BADR应该是一个基址,CanNum是一个索引,CANIER_BADR+CanNum* CAN_OFFSET_ADR得到的是CanNum标示的寄存器的地址。然后通过强制类型转换和*得到这个寄存器的内容。
共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]