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.

[参考译文] 编译器/LAUNCHXL-F28377S:F28377D DCan NewDat 标志复位

Guru**** 2348500 points
Other Parts Discussed in Thread: C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/594861/compiler-launchxl-f28377s-f28377d-dcan-newdat-flag-reset

器件型号:LAUNCHXL-F28377S

工具/软件:TI C/C++编译器

你(们)好

C2000 Ware 包中包含一个新的 driverlib。

从这里、我获取了 CAN_ex1_loopback 示例、并将其修改为仅在我设置 sendMsg 标志(通过调试器)时发送消息。

我发送了一次,但是它收到了无数的信息

我认为 NewDat 标志在读取后不会被复位、但我没有找到这样做的方法。

这是我修改的部分。

if (SendMsg){
//
//从报文对象1发送 CAN 报文数据
//
CAN_sendMessage (CANA_base、1、MSG_DATA_LENGTH、txMsgData);
SendMsg = 0;
}
//
//接收数据前延迟
//
DEVICE_DELAY_US (50000);

//
//读取 CAN 消息对象2并检查新数据
//
if (CAN_readMessage (CANA_base、2、rxMsgData))
{

msgCount++;
} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好

    我可以确认这是驱动程序中的错误。 我将在下一个 C2000Ware 版本之前修复此问题。

    目前、如果您接收到数据(在第2条 if 语句中)、请使用以下命令清除 NewData:

    //
    //现在清除新的数据标志
    //
    HWREG_BP (CANA_base + CAN_O_IF2CMD)|= CAN_IF2CMD_TXRQST;
    
    //
    //将报文对象传输到由指定的报文对象
    // Objid。
    //
    HWREG_BP (CANA_base + CAN_O_IF2CMD)= 2和 CAN_IF2CMD_MSG_NUM_M;
    
    //
    //等待忙位清零
    //
    while (((HWREGH (CANA_base + CAN_O_IF2CMD)& CAN_IF2CMD_BUSY)== CAN_IF2CMD_BUSY)
    {
    } 

    谢谢!

    此致

    Chris