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.

[参考译文] TMS320F28388D:TMS320F28388D 上的唤醒请求启用和自动唤醒位未在 MCANSS_CTRL 寄存器中更新

Guru**** 2961770 points

Other Parts Discussed in Thread: TMS320F28388D, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1658950/tms320f28388d-wakeup-request-enable-and-auto-wakeup-bits-are-not-updating-in-mcanss_ctrl-register-on-tms320f28388d

器件型号: TMS320F28388D
主题: C2000WARE 中讨论的其他器件

我正在使用 C28x 处理 TMS320F28388D、它在 C2000Ware 6.00.01.00 上运行、CM 在 C2000ware 26.00.00.00 上运行。 我尝试通过设置 MCANSS_CTRL 寄存器中的相应位来启用唤醒请求启用和自动唤醒功能。

我已经尝试了直接寄存器写入和读取 — 修改-写入序列:

RegVal = HW_RD_REG32(MCAN_SS_BASE + MCAN_MCANSS_CTRL);
RegVal |= 0x00000010;   // Wakeup Request Enable
RegVal |= 0x00000020;   // Auto Wakeup Enable
RegVal |= 0x00000008;   // Emulation Enable
HW_WR_REG32(MCAN_SS_BASE + MCAN_MCANSS_CTRL, RegVal);

然而、当我读回寄存器时、只会设置位 3(仿真使能):

MCANSS_CTRL = 0x00000008

唤醒请求使能(位 4)和自动唤醒使能(位 5)位不会更新。

请您澄清一下:

  1. 这些位是否可由软件在 F28388D 上写入?
  2. 在设置这些位之前、是否有任何先决条件(初始化模式,睡眠模式,时钟配置等)?
  3. 是否推荐通过 MCAN_InitParams 和(而不是直接写入寄存器)启用这些功能的方法 MCAN_init() ?

请提供任何指导。

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

    您好、Phani、

    可以写入仿真使能位这一事实意味着 MCAN 外设时钟已设置、CM 对 MCAN 寄存器具有写入所有权、但仍可以在例程中检查 CPUSER 是否配置为 CM、以便此时可以控制 MCAN 模块。

    可能导致唤醒位不可写的另一种可能性是 MCAN 时钟可能仍处于活动状态、因此第一步是停用它、然后启用自动唤醒功能。  建议您按照以下步骤操作:

    //===================================================================
    //先决条件—CPU1 端(必须在下面的 CM 代码之前运行)
    //===================================================================
    SysCtl_enablePeripheral (SYSCTL_PERIPH_CLK_MCAN);
    //根据需要为位时钟源配置 MCANBITCLKSEL

    //===================================================================
    //步骤 1—CM 侧:正常 MCAN 初始化
    //===================================================================
    MCAN_INIT (MCANA_DRIVER_BASE、&initParams);
    MCAN_setOpMode (MCANA_DRIVER_BASE、MCAN_OPERATION_MODE_NORMAL);

    //===================================================================
    //步骤 2—CM 侧:进入时钟停止(断电)状态
    // MCANSS_CTRL 中的唤醒位[5:4]只能在此处写入
    //===================================================================
    uint32_t regVal = HW_RD_REG32 (MCANA_DRIVER_BASE + MCAN_CCCR);
    regVal |= MCAN_CCCR.CSR;
    HW_WR_REG32 (MCANA_DRIVER_BASE + MCAN_CCCR、regVal);

    //等待硬件确认时钟停止
    while(!(HW_RD_REG32 (MCANA_DRIVER_BASE + MCAN_CCCR.CC) 和 MCAN_CCCR.CSA));

    //===================================================================
    //步骤 3 - CM 侧:设置唤醒位(仅在时钟停止时可写)
    //===================================================================
    regVal = HW_RD_REG32 (MCAN_SS_BASE + MCAN_MCANSS_CTRL);
    regVal |= 0x00000010;//位 4:唤醒请求启用
    regVal || 0x00000020;//位 5:启用自动唤醒
    regVal |= 0x00000008;//位 3:启用仿真
    HW_WR_REG32 (MCAN_SS_BASE + MCAN_MCANSS_CTRL、regVal);

    //验证位是否已写入
    regVal = HW_RD_REG32 (MCAN_SS_BASE + MCAN_MCANSS_CTRL);
    // regVal 现在应该为 0x00000038

    请告诉我这是否有效。

    此致、

    Joseph

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

    您好、Joseph:

    您能否确认的存储器地址 MCAN_SS_BASE + MCAN_MCANSS_CTRL 为 0x40080804?

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

    尊敬的 Phani:

    请参阅 TRM 中的正确地址:

     MCAN_SS_BASE + MCAN_MCANSS_CTRL should be 0x4007C404 on CM side.

    Regards,

    Joseph

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

    您好、Joseph:

    在 CM 侧、 MCAN_SS_BASE + MCAN_MCANSS_CTRL 应评估 0x4007C404、这是正确的。

    但在 DriverLib 中、 MCAN_MCANSS_CTRL 定义为 0x4400 + 4U、看起来不一致。 您能否确认该定义是否正确?

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

    尊敬的 Phani:

    是的、这个定义是正确的。  您还可以在 CCS“Expressions“窗口中查看:

    此致、

    Joseph