主题:controlSUITE中讨论的其他部件
你(们)好
在controlSuit中,CAN寄存器设置如下所示
为什么不喜欢这个呢
它比使用HW_REG()。更方便
另一个问题是"HWREGH(Base + CAN_O_IF1CMD+2)= 0x00F3"这意味着将 DcanbRegs.CAN_IF1CMD寄存器设置为更高的16位,但为什么是"Base + CAN_O_IF1CMD+2",为什么不是"Base + CAN_O_IF1CMD+1"。
谢谢。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
你(们)好
在controlSuit中,CAN寄存器设置如下所示
为什么不喜欢这个呢
它比使用HW_REG()。更方便
另一个问题是"HWREGH(Base + CAN_O_IF1CMD+2)= 0x00F3"这意味着将 DcanbRegs.CAN_IF1CMD寄存器设置为更高的16位,但为什么是"Base + CAN_O_IF1CMD+2",为什么不是"Base + CAN_O_IF1CMD+1"。
谢谢。
您好,
您当然可以使用位字段方法(例如 DcanbRegs.CANIF1ARB.ALL =(ID | 0xE0万);)。 我们使用controlSUITE示例中指出的编程方法的主要目标是使我们所有微控制器中的编码标准化。 您还可以参考Tommy在此链接中发布的有关这两种方法的线程( CCS/TMS320F2.8377万S: Setting Up a project )。
关于CAN IF1CMD寄存器编程的下一个问题,由于2.8377万D的CAN模块硬件实施,它必须为"Base + CAN_O_IF1CMD+2"。 只能通过这种方式访问CAN模块寄存器。
此致,
约瑟夫
你好,摇摇着,
HWREG的目的是在我们的微控制器上采用标准化的driverlib编码方法,对我们来说,这是一个优势,因为我们可以在2.8377万D或任何其他微控制器上使用此方法,而无需为每个微控制器系列创建唯一的位域结构。 我们确实提供了更高级别的函数调用,如CANMessageSet()或CANMessageSet(),这些函数应该更易于用户在其代码中实现,因此您不必担心位级编程。 如果比特字段方法更方便,则不会阻止您使用该方法。
由于在2.8377万D (32位总线上的一个字节可寻址外围设备)中实现CAN模块的方式,偏移不符合规则。 这只是CAN模块的例外情况。 对于较高的16位IF1CMD寄存器[31:16],您必须使用
HWREG (ui32Base + CAN_O_IF1CMD + 2)。 例如,如果要设置CLRINTPND位,则应写入:
HWREG(ui32Base + CAN_O_IF1CMD +2)= CAN_IF1CMD_CLRPND >> 16; 我知道这会让人困惑,但这是您必须对其进行编码才能绕过2.8377万D上的CAN实现的方式。
此致,
约瑟夫