我使用28377D,使用位域的方式配置设置清息对象,如下面所示
CanaRegs.CAN_IF1MSK.all) = maskReg;
CanaRegs.CAN_IF1ARB.all = arbReg;
CanaRegs.CAN_IF1MCTL.all = msgCtrl;
CanaRegs.CAN_IF1CMD.all = (cmdMaskReg | (objID & CAN_IF1CMD_MSG_NUM_M));
消息对象能够正常收发,所有中断开启,CAN_GLB_INTFLG,IPENX,IPEN_21均指示正确,有中断挂起,但始终无法进入中断.
而__byte_peripheral_32方式接入CAN寄存器,如下面所示
HWREG_BP(0x048000 + CAN_O_IF1MSK) = maskReg;
HWREG_BP(0x048000 + CAN_O_IF1ARB) = arbReg;
HWREG_BP(0x048000 + CAN_O_IF1MCTL) = msgCtrl;
HWREG_BP(0x048000 + CAN_O_IF1CMD) = (cmdMaskReg | (objID & CAN_IF1CMD_MSG_NUM_M));
CAN的收发正常,启用中断能进入中进入中断.
请问,位域使用bp_32 __attribute__((byte_peripheral))对寄存器进行定义,但通过CanaRegs.CAN_IF1CMD.all 这样的名称接入寄存器 始终与使用HWREG_BP接入有区别,具体是什么原因造成CanaRegs.CAN_IF1CMD.all的32位访问有误,我想用CanaRegs.CAN_IF1CMD.all的形式访问寄存器 ,可行吗,有什么办法?
麻烦懂的人测试一下 给出回复,谢谢!