我希望这条消息能让您满意。 我在 LCM 模块上有一个问题、锁步比较失败经常发生、但在我们频繁进行上电和断电测试时并不是很频繁。 当故障发生时、LCM_STATUS.LSEN=1、LCM_STATUS.CMP_FAIL=1、LCM_STATUS。 (位23位16)= 0x00、流程图如下:
问题1:为什么选择 LCM_STATUS。 发生故障时、软件复位无法清除 CMP_FAIL?
问题2:我们频繁进行通电和断电测试时、LCM 出现故障的原因、您有什么看法吗?
期待您的回复,谢谢。 
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.
我希望这条消息能让您满意。 我在 LCM 模块上有一个问题、锁步比较失败经常发生、但在我们频繁进行上电和断电测试时并不是很频繁。 当故障发生时、LCM_STATUS.LSEN=1、LCM_STATUS.CMP_FAIL=1、LCM_STATUS。 (位23位16)= 0x00、流程图如下:
问题1:为什么选择 LCM_STATUS。 发生故障时、软件复位无法清除 CMP_FAIL?
问题2:我们频繁进行通电和断电测试时、LCM 出现故障的原因、您有什么看法吗?
期待您的回复,谢谢。 
塞缪尔,你好!
为什么选择 LCM_STATUS。 发生故障时、软件复位无法清除 CMP_FAIL?
寄存器位已经将源设定为"PORESETn"。 这意味着它仅在器件下电上电时
如果您希望自行清除状态、则可以使用 LCM_STATUS_CLEAR 寄存器强制清除。 

Unknown 说:问题2:当我们频繁执行开机和关机测试时、您对 LCM 失败的原因有什么看法吗?
您在通电和断电测试中进行哪些测试?
看起来您在软件中强制执行比较失败? 在输出端强制比较误差
否则、它可能表明 设备出现功能故障、但让我们了解您在测试过程中具体做了什么、以及您测试了多少个显示此错误的单元?
谢谢。
Prarthan.
您好、Sam、
我们在同一个测试用例上再尝试了几次测试。
我们发现在下一个 XRSn 周期中启用比较之前、已发生比较失败。
因此、在前一周期和下一周期中启用比较失败和调查根本原因(可能是复位置位过程触发错误)之间会发生比较错误。
因此、对于这种情况、您应该按照此权变措施进行交叉验证并继续下一步。 我已经在最终验证了这一点、请检查一下、然后告诉我这是否对您有效
if((HWREG(LCM_CPU1_BASE + LCM_O_STATUS) & LCM_STATUS_CMP_FAIL) == 0U )
{
HWREG_BP(LCM_CPU1_BASE + LCM_O_CONTROL) |= LCM_CONTROL_CMPEN;
asm(" RPT #10 || NOP");
HWREG(CPUSYS_BASE + SYSCTL_O_SIMRESET) = 0xA5A50002;
asm(" RPT #10 || NOP");
}
else
{
Compare_error = true;
// Clear compare fail from previous cycle and enable compare to continue
HWREG_BP(LCM_CPU1_BASE + LCM_O_STATUS_CLEAR) |= LCM_STATUS_CLEAR_CMP_FAIL;
asm(" RPT #10 || NOP");
HWREG_BP(LCM_CPU1_BASE + LCM_O_CONTROL) |= LCM_CONTROL_CMPEN;
asm(" RPT #10 || NOP");
HWREG(CPUSYS_BASE + SYSCTL_O_SIMRESET) = 0xA5A50002;
}撒母耳、你好!
这里的重点是在启用比较之前清除比较标志、因为该标志是在上一个复位周期中设置的。
也发生故障
连续的复位触发器会触发比较错误、但只要您在启用比较之前检查标志并清除标志、就应该没有问题。
您能解释一下您想要在应用中实现什么与多个背对背 XRSn ?
谢谢!
Sam、您好!
我们已将问题范围缩小至 sysclkdivsel、因此在重复 xrsn 触发测试中、应该像您将 sysclkdivsel 设置为2而不是1一样有效。
#define DEVICE_setClock_CFG (SYSCTL_OSCSRC_XTAL | SYSCTL_IMULT (48)|\
SYSCTL_REFDIV (2)| SYSCTL_ODIV (4)|\
SYSCTL_SYSDIV (2)| SYSCTL_PLL_ENABLE |\
SYSCTL_DCC_BASE_0)
-> 将 SYSDIV 从1设置为2应该可以解决您的问题这个定义在 device.h 文件中
请尝试此操作、我们已验证此操作可以正常工作。
谢谢。
您好、Sam、
如果已将 sysdiv 设置为2、则在启用之前无需检查状态、否则它将正常工作。
将 sysdiv 设置为1并触发连续复位(在您的情况下为 SIMRESET. XRSn)在复位置位期间具有传播到比较器并产生错误的时钟干扰。 由于在复位生效期间发生错误并不重要、因此如果您希望 sysdiv 设置为1、那么您可以在启用前遵循状态清除权变措施、否则将 sysdiv 设置为2。