首页 > 解决方案 > MSP430 停止响应高频查询

问题描述

我一直致力于将板载 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;

标签: microcontrollermsp430adc

解决方案


尝试用简单的软件延迟程序临时替换 WDT 间隔计时器。确保在程序开始时完全禁用 WDT。建议使用编译器内部函数__delay_cycles(1000)进行延迟。这将消除中断优先级或错误 WDT 配置的可能性。如果可行,则开始减少延迟量,直到您达到所需的速率。如果您达到所需的速率(您想要的最快 ADC 采样),那么 ADC 就不是问题。然后,您可能想用真正的硬件定时器替换 WDT 间隔定时器,或者只是忍受 __delay_cycles() 软件延迟。


推荐阅读