如题,我在程序里面是这样操作的:
ECanaRegs.CANME.all &= (~mask) ; 此时mask值为0x00000004
但是仿真后出来的值不对,这个寄存器是32位的,看汇编的时候,分两步进行“AND”操作。
最后慢慢调试,改成下面这样,才可以!!
ECanaRegs.CANME.all = *((uint32_t *)&ECanaRegs.CANME.all) & (~mask) ;
请问大家,这个是为什么?? 像这种情况,如何在程序里对寄存器进行逻辑运算???
谢谢!!
Johnson Chen1:
请按32位操作,如果是对某个位进行操作的话,请参考下面方式:
ECanaShadow.CANMC.all = ECanaRegs.CANMC.all; ECanaShadow.CANMC.bit.STM = 1; // Configure CAN for self-test mode ECanaRegs.CANMC.all = ECanaShadow.CANMC.all;