这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 请教指针问题

共3条 1/1 1 跳转至

请教指针问题

助工
2011-10-17 17:02:58     打赏
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 )))

最后一句是什么意思?



关键词: 请教     指针     问题     INT32U     中断     使能    

助工
2011-10-17 17:05:40     打赏
2楼
最后一句,定义了一个带参数的宏。可以向CanNum这个参数写不同的数值来寻址不同的寄存器。
比如: CANIER(0x01) = 0x12345678;

助工
2011-10-17 17:16:56     打赏
3楼
CANIER_BADR应该是一个基址,CanNum是一个索引,CANIER_BADR+CanNum* CAN_OFFSET_ADR得到的是CanNum标示的寄存器的地址。然后通过强制类型转换和*得到这个寄存器的内容。

共3条 1/1 1 跳转至

回复

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