主题:controlSUITE中讨论的其他部件
你好,冠军,
我在以下示例中找到F2.8377万S:
controlSUITE中的"CAN_Loop_bitfields _CPU0"存在以下问题:
1.在 getCANMessage函数中,“忙”位检查在其他寄存器写入之后:
CanaRegs.CAN_IF2CMD.All = 0;
CanaRegs.CAN_IF2CMD.bit.Control = 1;
CanaRegs.CAN_IF2CMD.bit.DATA_A = 1;
CanaRegs.CAN_IF2CMD.bit.DATA_B = 1;
//
//如果注册,则将消息对象转移到消息对象。
//
CanaRegs.CAN_IF2CMD.bit.MSG_NUM = Objid;
//
//等待忙位清除。
//
while (CanaRegs.CAN_IF2CMD.bit.Busy)
{
}
但是在 setupMessageObject功能中,“忙”位检查在其他寄存器写入之前:
while (CanaRegs.CAN_IF1CMD.bit.Busy)
{
}
//
//清除并写出寄存器以对消息对象进行编程。
//
CanaRegs.CAN_IF1CMD.All = 0;
CanaRegs.CAN_IF1MSK.ALL = 0;
CanaRegs.CAN_IF1ARB.ALL = 0;
CanaRegs.CAN_IF1MCTL.ALL = 0;
//
//设置控制,掩码和ARB位,以便将它们转移到
//邮件对象。
//
CanaRegs.CAN_IF1CMD.bit.Control = 1;
CanaRegs.CAN_IF1CMD.bit.ARB = 1;
CanaRegs.CAN_IF1CMD.bit.Mask = 1;
CanaRegs.CAN_IF1CMD.Bit.DIR = 1;
因为在TRM中,在IFXCMD中的位,IFXMSK说它受繁忙位保护,所以它只能写入繁忙位=0,所以我不明白为什么 在getCANMessage函数中,它写入CMD,MSK提前注册,然后检查繁忙位,它有不能成功写入它的风险吗?
2. 在setupMessageObject函数和 getCANMessage/sendCANMessage类似的函数中,有大量寄存器再次写入
CanaRegs.CAN_IF2CMD.All = 0;
CanaRegs.CAN_IF2CMD.bit.Control = 1;
CanaRegs.CAN_IF2CMD.bit.DATA_A = 1;
CanaRegs.CAN_IF2CMD.bit.DATA_B = 1;
//
//如果注册,则将消息对象转移到消息对象。
//
CanaRegs.CAN_IF2CMD.bit.MSG_NUM = Objid;
API中的设置相同,例如,如果我只使用IF2接收消息RAM 2,我想了解,这是否意味着,我可以将IF2设置为使用 setupMessageObject发送RAM2消息,然后在CAN0INT中,我可以直接在 CAN_IF2DATA中读取,而不能再次使用"getCANMessage"功能? 由于我的客户系统中的CAN通信会频繁触发,因此我们不能让它占用太多时间,因此它将影响主要ISR。 因此,最好使用较少的功能来执行此操作。
谢谢!
巴西
乔