STC 诊断不适用于 STC1段1。 根据 TMS570LC43x 的 TRM 第10.10节、在 STCSEGPLR 寄存器中配置 SEGID_LOPAD 位后、FSEGID 永远不会设置为01。 根据 TRM、段0工作正常。 SPNZ180D 勘误文档 器件#47指出 STC1 (CPU)测试无法独立在段1上运行。 这是否也适用于 诊断。 如果是这种情况、如何使段1诊断工作。 感谢您的任何帮助。
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.
STC 诊断不适用于 STC1段1。 根据 TMS570LC43x 的 TRM 第10.10节、在 STCSEGPLR 寄存器中配置 SEGID_LOPAD 位后、FSEGID 永远不会设置为01。 根据 TRM、段0工作正常。 SPNZ180D 勘误文档 器件#47指出 STC1 (CPU)测试无法独立在段1上运行。 这是否也适用于 诊断。 如果是这种情况、如何使段1诊断工作。 感谢您的任何帮助。
感谢您的快速回复。 我在这里有几个问题。
1)第10.10节诊断步骤1说明:在 STCGCR0寄存器中将间隔计数配置为1。
这是否仍然有效(根据 TRM)或需要根据勘误表将间隔计数设置为2。 诊断代码与段0的间隔计数1一起工作。
请确认。
2)我的主要问题是 STC1、段1、即使在 STCSEGPLR 寄存器(0x1)和中配置了 SEGID_LOPAD 位、FSEGID 也不会设置为01
根据 TRM 第10.10节、STCGCR0寄存器中的 RS_CNT 位更改为1 (STCGCR0 = 0x01)。 已尝试使用间隔计数1和2、但无法正常工作。
我观察到、当设置 STCGCR0 = 0x02以启用 RS_CNT 时、FSEGID 设置为0x01、这是每个诊断所期望的。
您能否确认在本例中、段1需要为 RS_CNT 启用哪些正确位。
我有这个疑问、因为第3步中的 TRM 显示"Programming bit 0 of the STCGCR0 register to 1"。
第4步将 STCGCR0寄存器中的 RS_CNT 位设为1。 为什么在为 RS_CNT 设置相同位时这两句话之间存在差异。
如果它应该是 STCGCR0 = 0x01来启用 RS_CNT 位。 我还可以尝试使段1诊断正常工作
您好 Dhana、
这是我对 STC1段1的测试结果:
我的测试代码:
/*执行 STC 模块自检*/
void STC1_SelfCheck ()
{
易失性 uint32 i = 0U;
uint32_t 索引;
/*对 CPU 自检控制器运行诊断检查*/
/*首先将 STC 时钟分频器设置为仅支持高达90MHz 的 STC */
systemREG2->STCCLKDIV=(0x00u)<< 24;
/* STC 时钟现在是正常模式 CPU 时钟频率/2 = 300MHz/3 */
stcREG1->STCCLKDIV = 0x05050000U;//CLKDIV0和 CLKDIV1 = 5+1
/*选择一个测试间隔,下次重新启动自检,0x00010001 */
stcREG1->STCGCR0 = 0x00010001U;
/*启用比较器自检并在 CPU 中插入卡在0故障、0x1A */
stcREG1->STCSCSCR = 0x1AU;
/*最大超时周期*/
stcREG1->STCTPR = 0xFFFFFFU;
stcREG1->STCSEGPLR = 0x1;//对于段1
//根据 HCLK 与 VCLK 的比率、至少等待64个 VBUS 时钟周期
#define VBUS_CLK_CYCLS 64U
对于(索引= 0UL;索引<(VBUS_CLK_CYCLS +(VBUS_CLK_CYCLS * 1U));索引++);
/*启用自检*/
stcREG1->STCGCR1 = 0x50AU;//5:仅选择 Core1进行自检。
/*用户代码开始(9)*/
/*用户代码结束*/
asm (" WFI");
asm (" NOP");
asm (" NOP");
asm (" NOP");
asm (" NOP");
asm (" NOP");
asm (" NOP");
asm (" NOP");
asm (" NOP");
asm (" DMB");
asm (" DMB");
}