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.

[参考译文] TMDSCNCD280039C:C2000微控制器论坛

Guru**** 2511985 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1411976/tmdscncd280039c-c2000-microcontrollers-forum

器件型号:TMDSCNCD280039C

工具与软件:

如何复位 CAN_IF3MCTL 寄存器中的 NewDat 位?

if ( CanaRegs.can_IF3MCTL.bit.NewDat )

RxA.all = CanaRegs.CAN_IF3DATA.ALL;
RxB.all = CanaRegs.CAN_IF3DATB.all;
HWREG_BP (myCANA_BASE +CAN_O_IF3OBS)= CAN_IF3OBS_MASK |CAN_IF3OBS_ARB |CAN_IF3OBS_CTRL|CAN_IF3OBS_DATA_A|CAN_IF3OBS_DATA_B;

// CanaRegs.CAN_IF3OBS.all =(BP_32) 0x1F;

 即使我读了 CanaRegs。 CAN_IF3DATA 和 CanaRegs。 CAN_IF3DATB 寄存器时、NewDat 位不会复位。 我不知道该怎么做或如何对其进行复位。

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

    嗨、Oleg、

    向 IFxCMD 寄存器写入0x7F 和消息编号将触发从消息 RAM 到 IF 寄存器的消息传输、并且 NewDat 位和 IntPnd 位被清除。

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

    您好、Wang。
    IF3寄存器组中没有 IF3CMD 寄存器。 这就是问题所在。

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

    嗨、Oleg、

    当接收到 CAN 报文后报文对象被更新时、IF3x 寄存器可自动接收来自报文 RAM 的控制和数据。 CPU 不需要启动从消息 RAM 到 IF3寄存器组的传输。

    NewDat 和 IntPnd 应在传输完成后清零。

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

    您好、Van!
    你写入:NewDat 和 IntPnd 必须在传输完成后被清零。
    我不明白转让完成后您的意思。 读取 IF3DATA 寄存器后是否发生或是否进行其他操作。
    您能否编写一个示例、说明如何读取程序几行中的数据。 则所有问题都将被删除。 此致
    Oleg。

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

    嗨、Oleg、

    我将运行一个测试、然后在今天晚些时候给您回复。

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

    嗨、Oleg、

     MCTL 寄存器中的 NewDat 和 IntPnd 不会通过读取 IF3x 数据寄存器(或掩码、ARB 寄存器)来复位。  

     IF3OBS[4:0]用于确定 IF3寄存器的哪些数据段(ARB、MCTL、MSK 以及 DATA A 和 DATA B)。 如果 IF3OBS[4:0]=0x1F、IF3x 寄存器仅在读取 ARM/MCTL/MASK 和数据寄存器后才会使用新数据自动更新。 如果 IF3OBS[4:0]=0x1A、 则在读取数据寄存器和 ARB 寄存器之后、使用新数据更新 IF3x 寄存器。 更新 IF3x 寄存器时生成中断。

    我使用以下代码进行 IF3x 寄存器配置:

    //启用 CTL 寄存器中的 DE3位以在 IF3接收到数据时触发 DMA
    canREG->CTL |=(1U <<20U);

    //读取数据 A & B、ARB、MASK 和 CTL 位*/
    canREG->IF3OBS = 0x1F;//0x1A;

    //消息框2配置为自动更新
    CANREG->IF3UEy[0]= 0x000002;

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

    您好、QJ Wang!

    1.我不使用 DMA。

    2.这是我的测试程序:  

    CanaRegs。 CAN_IF3UPD = BIT0;
    CanaRegs.CAN_IF3OBS.all = 0x1F;// Read Dataa & DATAB
    CanaRegs.CAN_CTL.bit.DE3 = 1;


    IF3:while (CanaRegs.CAN_IF3MCTL.bit.NewDat)

    canaShadow = CanaRegs;
    DBG_RxA = CanaRegs.CAN_IF3DATA.all;
    DBG_RxB = CanaRegs.CAN_IF3DATB.all;

    DBG_IF3++;
    DEVICE_DELAY_US (1000u * 10u);//задержка на миллисекунды μ s
    }
    转至 IF3;

    3.我每秒向邮箱 BIT0发送一条消息

    4.位(CanaRegs.can_IF3MCTL.bit.NewDat)从不复位。

    我不知道该怎么办。

    现在我通过 IF2寄存器集解决了这个问题。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="622669" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1411976/tmdscncd280039c-c2000-microcontrollers-forum/5430660 #5430660"]CanaRegs.can_IF3OBS.all = 0x1F;//读取 dataa 和 datab

    要复位 NewDat、必须读取 ARB、MCTL、MASK、DATAA 和 DATAB 寄存器