软件代码如下所示:
软件启动 AD 转换、 然后等待 SEQ1序列转换完成标志 INT_SEQ1置1。 在正常情况下、启动 AD 转换后等待大约6us、AD 转换将完成、并且相应的 INT_SEQ1也将被置位。 但是、INT_SEQ1偶尔出现在实际应用中、但始终未设置、程序进入死区周期。 有人遇到过这种情况吗? 一般原因是什么?
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.
软件代码如下所示:
软件启动 AD 转换、 然后等待 SEQ1序列转换完成标志 INT_SEQ1置1。 在正常情况下、启动 AD 转换后等待大约6us、AD 转换将完成、并且相应的 INT_SEQ1也将被置位。 但是、INT_SEQ1偶尔出现在实际应用中、但始终未设置、程序进入死区周期。 有人遇到过这种情况吗? 一般原因是什么?
我的理论是、RST_SEQ1在 SOC_SEQ1被锁存时尚未完全传播、因此根本不会发生 SOC_SEQ1、 因此、我们会卡住、因为如果 SOC_SEQ1从未锁存、则不会再次发生、因为我们正在等待转换结束发生(但从未启动)。
由于这不是 ISR、此函数是否有可能被来自不同源的 ISR 中断?
现在、我没有怀疑缺陷或延迟。 客户是否在多个器件上看到这种情况、或者只有一个器件显示这种行为?
最棒的
Matthew
1.我明白,根据你所说的指令冲突的原因,这个问题应该很容易发生,但在实践中,这个问题的可能性很低。
2.在 Timer0中断中调用此函数。 Timer0中断被配置为不可中断、所以这个函数不会被其他中断源中断。
3.九台设备中有三台设备出现了此问题。 分析了其中一个芯片的问题后,我们发现芯片存在粘接线分层问题。但我认为 粘接线分层不能解决这个问题,那么你能提出其他建议吗?
非常感谢。
Wanhua、
我认为这取决于哪个引脚具有分层、尤其是当它是电源引脚并且我们有理由相信器件没有获得正确的电源电压/电流时、这可能会导致代码执行出现很多不同的问题。 或者、如果输入时钟引脚有一些问题、并且我们开始超出时钟的规格、这也可能导致问题。
很清楚、我不认为我的情景应该发生、但我想设法排除时间问题。 这3条指令都是写指令、因此它们将按照代码中写入的顺序发生、据我所知、一旦到达 ADC、这些都是单周期执行事件。
客户能否尝试以比正常速度慢的 CPU 时钟运行器件、并查看这是否有所改进? 或者、它的发生频率这么低、这不实用吗?
最棒的
Matthew