MSP430 停止响应高频查询
Posted
技术标签:
【中文标题】MSP430 停止响应高频查询【英文标题】:MSP430 Stops Responding to Queries at High Frequencies 【发布时间】:2021-04-06 05:52:12 【问题描述】:我一直致力于将板载 ADC 与我在 MSP-EXP430FR2433 上的现有项目集成。为此,我使用了 WDT 间隔定时器,每次 WDT ISR 触发时都向 ADC 查询新数据(使用 ADCCTL0 |= ADCENC | ADCSC;)。在低频(WDT 间隔定时器)下,这种设计在大多数情况下都能正常工作,ADC ISR 会用数据响应查询。但是,当我增加 WDT 间隔定时器的频率时,ADC ISR 将完全停止响应我的查询。我最近的想法是查询中一定存在某种保持时间违规,但在上下文中我不确定这是否有任何意义。我还在考虑这样一个事实,即我没有正确配置 ADC 以使其按我想要的方式工作。为此,我在下面放弃了我的 ADC 配置。非常感谢您对此问题的任何帮助。
SYSCFG2 |= ADCPCTL1;
ADCCTL0 |= ADCON;
ADCCTL1 |= ADCSHP | ADCSSEL1 | ADCSSEL0;
ADCCTL2 |= ADCRES;
ADCMCTL0 |= ADCINCH_1;
ADCIE |= ADCIE0;
【问题讨论】:
WDT 和 ADC 中断的相对优先级是什么?与 WDT 间隔计时器的周期相比,WDT ISR 的执行时间是多少? 【参考方案1】:尝试用简单的软件延迟例程临时替换 WDT 间隔计时器。确保在程序开始时完全禁用 WDT。建议使用编译器内部函数 __delay_cycles(1000) 来进行延迟。这将消除中断优先级或错误 WDT 配置的可能性。如果这可行,那么开始减少延迟量,直到您达到所需的速率。如果您达到所需的速率(您想要的最快 ADC 采样),那么 ADC 就不是问题。然后,您可能想用真正的硬件定时器替换 WDT 间隔定时器,或者只是忍受 __delay_cycles() 软件延迟。
【讨论】:
以上是关于MSP430 停止响应高频查询的主要内容,如果未能解决你的问题,请参考以下文章