在我的应用中、在禁用 eusci SPI 外设和睡眠 lpm4.5之间没有延迟的情况下、似乎会通过 NMI 向量生成空存储器访问故障。 这似乎是可能的吗? 我的心理模型是 、当外设仍处于活动状态但内核已断电时、可能会生成 VMA 故障。 我还没有将代码缩减为一个小示例、但 在输入 lpm4.5之前插入/删除一个延迟调用时、行为似乎可以重现。
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.
在我的应用中、在禁用 eusci SPI 外设和睡眠 lpm4.5之间没有延迟的情况下、似乎会通过 NMI 向量生成空存储器访问故障。 这似乎是可能的吗? 我的心理模型是 、当外设仍处于活动状态但内核已断电时、可能会生成 VMA 故障。 我还没有将代码缩减为一个小示例、但 在输入 lpm4.5之前插入/删除一个延迟调用时、行为似乎可以重现。
[引用 user="Peter Spevak"]当您说正在禁用 eUSCI 时、如何执行此操作? 是否在 UCBxCTLW0寄存器中设置了软件复位位位位?[/QUERP]
我使用 DriverLib 函数、该函数的实现会将 UCBxCTLW0寄存器中的 RST 位置位
[引用 user="Peter Spevak"]您操作 SPI 的配置是什么? MSP430是主器件还是从器件? 在关闭至 LPMx.5期间是否有一些数据进入?[/quot]
MSP430是 AB0815实时时钟的主器件、而 AB0815实时时钟是从器件(不能作为主器件)。 在关断期间不应进行数据传输。
[引用 user="Peter Spevak"]当您将其称为访问冲突中断时、是否在 SYSRSTIV、SYSSNIV、SYSUNIV 寄存器中看到相应的标志? 这些内容是什么?
在 NMI 中断服务例程中、我读取中断发生器寄存器 SYSSNIIV、值为 SYSSNI_VMAIFG (然后使 LED 变亮以告诉我、我无法在调试器中调试它。) 我看不到知道其他寄存器的值是相关的。
我已经确定、50个周期的延迟不足以防止 VMA NMI、而500个周期的延迟就足够了。
我希望我明白为什么代码需要神秘的延迟才能工作。 我的模糊模型是 VMA 与 MSP430的内部地址总线相关、当总线主控(通常是 CPU)在总线上放置的地址没有单元(存储器或外设)响应时、就会生成 VMA。 我想 VMA 逻辑不受外设禁用的影响、您仍然可以读取已禁用外设寄存器的内容。
此外、我的模型是、为了知道是否可以输入 LPM4.5 (与其他电平相比)、PMM 必须以某种方式确定所有外设都被禁用。 在代码禁用外设与外设实际向 PMM 发出一些内部信号之间可能存在有限的延迟。 但我认为它不会生成 VMA、只会防止下降到 LPM4.5。