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.

[参考译文] TMS570LS0332:通过 PCR 关闭 DCAN2时出现问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1425531/tms570ls0332-problems-with-dcan2-shutdown-by-pcr

器件型号:TMS570LS0332
Thread 中讨论的其他器件: TMS570LS3137

工具与软件:

我们正在尝试禁用 TMS570LS0332处理器上未使用的外设、特别是 DCAN1和 DCAN2外设、它们分别与 pcrREG->PSPWRDWNSET1位0和2相关、因此将值0x5写入寄存器:  

PCR。 PSPwrDwnSet1 = 0x5

设置该位适用于 DCAN1 (位0)、但不适用于 DCAN2 (位2)、因此当读回 PSPwrDwnSet1 寄存器时、该值为:0x1

一旦外设在 periphInit()函数中启动、处理器似乎不允许禁用 DCAN2。

在执行 periphInit ()函数之前, PCR 的默认值。 PSPwrDwnSet1设置为0x5、这意味着默认情况下禁用它们

但在执行  periphInit ()函数内的指令后、PSPWRDWNSET1寄存器中的 DCAN2相关位会被设为0、而且无法再将其设回1、从而无法再禁用 DCAN2外设。

以下是 periphInit ()中的代码:

void periphInit (void)

   /**-在时钟上电之前禁用外设*/
   systemREG1->CLKCNTL &= 0xFFFFFFU; // Pena = 所有外设/外设存储器帧都处于复位状态。

 

   /**-为所有外设时钟上电*/
   pcrREG->PSPWRDWNCLR0 = 0xFFFFU;
   pcrREG->PSPWRDWNCLR1 = 0xFFFFFFFFU;
   pcrREG->PSPWRDWNCLR2 = 0xFFFFFFFFU;
   pcrREG->PSPWRDWNCLR3 = 0xFFFFFFFFU;

 

   /**-启用外设*/
   systemREG1->CLKCNTL |= 0x00000100U;// Pena = 所有外设/外设存储器帧均未复位。
}// periphInit 结束

 

附注  我们已尝试通过设置 PSPWRDWNCLR1 = 0xFFFFFFFBU 将 DCAN2外设从初始化中移除、但从此时开始仍无法使用 PCR 禁用外设。

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

    如需额外信息、在 我们用作主控器的 TMS570LS3137处理器上、我们能够成功禁用 DCAN2外设、该问题似乎仅存在于 TMS570LS0332上  

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

    Steven、您好。

    对延迟响应深表歉意。

    您可以尝试以下两种方法吗:

    1.可以先禁用 SPI 再尝试禁用 CAN2吗?

    向上面突出显示的位写入零、然后尝试禁用 DCAN?

    2.如果上述方法不起作用、您是否可以尝试使用以下方法来禁用 SPI (如第一步所述)、也可以通过以下突出显示的内容来重置 SPI 模块、然后尝试禁用?

    我这边现在没有用来测试的板。

    ——
    谢谢、此致、
    Jagadish。

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

    您好!

    不用担心!

    对于出现问题的 TMS570LS0332、我们拥有的代码 在尝试禁用未使用的外设之前未使用 SPI、是在尚未使用 SPI 的代码部分中、我仍然进行了测试、但当时 SPIGCR0和 SPIGCR1的寄存器按预期全部为0、因此禁用上述位的更改不会产生影响。

    仅禁用 DCAN2外设似乎是一个特定问题、因为 DCAN1外设被成功禁用。

    对于另一个处理器、我们使用作为主处理器(TMS570LS3137)、我们有一个类似的代码来禁用未使用的外设(在此之前也不使用 SPI)、但是、对于该处理器、我们能够成功地禁用两个外设 DCAN1和 DCAN2。

    此致、

    Steven

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

    Steven、您好。

    我对最后的评论表示歉意。

    正确的是、SPI 和 DCAN 之间不存在任何用于电源禁用的关系。 因此、请忽略我最后的评论。

    您能否尝试一次使用以下代码来禁用 DCAN2:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    /** - Disable Peripherals before peripheral powerup*/
    systemREG1->CLKCNTL &= 0xFFFFFEFFU;
    pcrREG->PSPWRDWNSET1 = 0x5; /*Disable DCAN1 and DCAN2*/
    /** - Enable Peripherals */
    systemREG1->CLKCNTL |= 0x00000100U;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    在  periphInit 函数 API 调用后仅使用上述代码、在主代码中使用。

    ——

    谢谢、此致、
    Jagadish。

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

    您好!

    感谢您的快速响应、我们似乎很快就找到了解决方案、在我们为 periphInit ()提供的原始代码中、我们已经 禁用/启用了 外设、甚至在禁用外设之前、 PSPWRDWNSET1的值已经为0x10000005、这意味着 DCAN1和 DCAN2默认情况下被禁用。 请参阅下图

    然后、我们添加了您提到的建议、在调用之前重复该过程以禁用 DCAN1和 DCAN2 (请参阅第106行)。  PSPWRDWNSET1 似乎被正确地设置为5值。

    但是、一旦在第110行再次启用外设、 PSPWRDWNSET1 寄存器会将值设置为1、这意味着只有 DCAN1被禁用、但 DCAN2不像预期的那样被禁用。  

    这是我们处理的主要问题、即使  PSPWRDWNSET1 寄存器也被设置为禁用 DCAN1和 DCAN2、只是由于某种原因第一个寄存器被禁用。  

    我将等待任何其他建议

    此致、

    Steven

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

    Steven、您好。

    我没有 TMS570LS0332开发板、因此我在几个其他 Hercules 开发板上测试了这种情况:

    RM46Lx:

    TMS570LS3137:

    在这里、我可以轻松禁用 DCAN1和 DCAN2的断电。 我不明白为什么我们无法仅为这一特定的 TMS570LS0332控制器断电。

    可能是芯片寄存器级问题。在确认之前、我们可以从您的末端设置一个实时调试会话、因为我没有从终端进行调试的电路板

    ——
    谢谢、此致、
    Jagadish。