您好!
1、如何使用 IF3寄存器集?
2 μ s 当我、IF1寄存器集从报文对象中设置一些值时、我设置 CAN_IF3OBS 寄存器和 CAN_IF3UPD 寄存器。
但我看不到来自 CCS "寄存器"中 IF3寄存器集的任何值。
谢谢!
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.
您好!
1、如何使用 IF3寄存器集?
2 μ s 当我、IF1寄存器集从报文对象中设置一些值时、我设置 CAN_IF3OBS 寄存器和 CAN_IF3UPD 寄存器。
但我看不到来自 CCS "寄存器"中 IF3寄存器集的任何值。
谢谢!
IF3的功能与 IF1/IF2相似、但它只能用于接收、并且一旦配置、IF3寄存器集的更新在接收数据时自动进行。 有关更多详细信息、请参阅 TRM。
[引用 userid="488408" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1020162/tms320f28379d-about-the-if3-register-set-of-can-module ]2、当我通过 IF1寄存器集从报文对象设置某个值时,[/引用]我不明白为什么你需要让 IF1参与进来。
[引用 userid="488408" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1020162/tms320f28379d-about-the-if3-register-set-of-can-module "]然后我设置 CAN_IF3OBS 寄存器和 CAN_IF3UPD 寄存器。您是指配置 IF3OBS 和 IF3UPD 寄存器。
[引用 userid="488408" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1020162/tms320f28379d-about-the-if3-register-set-of-can-module "]但我无法从 CCS "寄存器"中的 IF3寄存器集中看到任何值。[/quot]我很难说出原因。 确保您期望看到的帧实际上已在总线上传输。 检查您是否能够使用 IF1或 IF2读取帧。 更新到 CCS 的最新版本。 较旧版本在正确显示某些寄存器时会出现一些问题。
您好!
[引用 userid="10172" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1020162/tms320f28379d-about-the-if3-register-set-of-can-module/3770756 #3770756"]2 μ s 当我、 IF1寄存器置位报文对象的某个值时、
我不明白为什么你需要让 IF1参与进来。
[/报价]也就是说、我将首先从 IF1寄存器组中配置消息对象。 然后、我可以观察 IF3寄存器组中的消息对象。 这就是我应该配置 CAN_IF3OBS 寄存器和 CAN_IF3UPD 寄存器的原因。 我想确认这种方法是否正确。
谢谢!
您好!
我的测试程序是:
//////////////////////////////// IFX 寄存器测试////////////////////////////////////////////////////////
uint32 IF1_RDATA=0、IF2_RDATA=0、IF3_RDATA=0;
uint32 IF4_RDATA=0、IF5_RDATA=0、IF6_RDATA=0;
HWREGH (CANA_base + CAN_O_IF1CMD + 2) = 0x930000 >> 16;
HWREGH (CANA_BASE + CAN_O_IF1DATA) = 0x13579BDE;
HWREGH (CANA_BASE + CAN_O_IF1DATA + 2)= 0x13579BDE >> 16;
HWREGH (CANA_base + CAN_O_IF1DATB) = 0x5A6B7C8D;
HWREGH (CANA_base + CAN_O_IF1DATB + 2)= 0x5A6B7C8D >> 16;
HWREGH (CANA_base + CAN_O_IF1MCTL) = 0xE88;
HWREGH (CANA_base + CAN_O_IF1CMD) = 0x1;
while (HWREGH (CANA_base + CAN_O_IF1CMD)& CAN_IF1CMD_BUSY)
{
}
HWREGH (CANA_base + CAN_O_IF3OBS) = 0x1F;
HWREGH (CANA_base + CAN_O_IF3UPD) = 0xFFFFFFFF;
HWREGH (CANA_base + CAN_O_IF3UPD + 2)= 0xFFFFFFFF >> 16;
while (HWREGH (CANA_base + CAN_O_IF3OBS)& CAN_IF3OBS_IF3SC)
{
}
while (HWREGH (CANA_base + CAN_O_IF3OBS)& CAN_IF3OBS_IF3SDA)
{
}
while (HWREGH (CANA_base + CAN_O_IF3OBS)& CAN_IF3OBS_IF3SDB)
{
}
IF1_RDATA = HWREGB (CANA_base + CAN_O_IF3DATA);//使用 HWREGB
IF2_RDATA = HWREGB (CANA_base + CAN_O_IF3MCTL);
IF3_RDATA = HWREGB (CANA_base + CAN_O_IF3DATB);
IF4_RDATA = HWREGH (CANA_base + CAN_O_IF3DATA);//使用 HWREGH
IF5_RDATA = HWREGH (CANA_base + CAN_O_IF3MCTL);
IF6_RDATA = HWREGH (CANA_base + CAN_O_IF3DATB);
////////////////////////////////////////////////////////////////////// 测试完成////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
结果如下所示。


出什么问题了吗?
是的、您需要先使用 IF1/IF2来配置报文对象。
HWREGH (ui32Base + CAN_O_IF1ARB)= 0; //降低16位
HWREGH (ui32Base + CAN_O_IF1ARB + 2)= 0;//高16位
在处理 CAN 等字节外设时、必须添加2来访问高16位。
是的。