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处理器上未使用的外设、特别是 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:
/** - Disable Peripherals before peripheral powerup*/ systemREG1->CLKCNTL &= 0xFFFFFEFFU; pcrREG->PSPWRDWNSET1 = 0x5; /*Disable DCAN1 and DCAN2*/ /** - Enable Peripherals */ systemREG1->CLKCNTL |= 0x00000100U;
在 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。