请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR5994 工具/软件:Code Composer Studio
下面是 FRAM 实用程序示例中的一个代码、它使用 ADC 来检测断电时间
如何修改此代码以检测器件何时降至特定电压
void initAdcMonitor(void){
/*初始化 ADC 触发的计时器。 *
TA0CCR0 =(SMCLK_FREQUENCY /ADC_MONITOR_FREQUENCY);
TA0CCR1 = TA0CCR0/2;
TA0CCTL1 = OUTMOD_3;
TA0CTL = tassel_SMCLK | MC__UP;
/*配置2.0V 内部基准电压。 *
while (REFCTL0和 REFGENBUSY);
REFCTL0 |= REFVSEL_1 | REFON;
while (!(REFCTL0 & REFGENRDY));
/*
*使用电池监控器初始化 ADC12_B 窗口比较器。
*监护仪将首先启用监护仪电压正极的高侧
0.1V、以确保电压足够高于阈值。 时间
*触发高侧中断服务例程将切换到
*低侧并等待电压降至阈值以下。 时间
*电压降至器件将调用的阈值电压以下
*通过断电关断功能进行计算以节省应用
*状态并进入器件完全关断状态。
*
ADC12CTL0 = ADC12SHT0_2 | ADC12ON;
ADC12CTL1 = ADC12SH_1 | ADC12SSEL_0 | ADC12CONSEQ_2 | ADC12SHP;
ADC12CTL3 = ADC12BATMAP;
ADC12MCTL0 = ADC12INCH_31 | ADC12VRSEL_1 | ADC12WINC;
ADC12HI =(uint16_t)(4096*((adc_monitor_threshold+0.1)/2)/(2.0));
ADC12LO =(uint16_t)(4096*(ADC_MONIT_THRESHOLD/2)/(2.0));
ADC12IFGR2 &=~(ADC12HIIFG | ADC12LOIFG);
ADC12IER2 = ADC12HIIE;
ADC12CTL0 |= ADC12ENC;
}
#pragma vector = ADC12_vector
__interrupt void ADC12_ISR (void)
{
switch (__evo_in_range (ADC12IV、ADC12IV_ADC12LOIFG)){
ADC12IV_NONE 案例: 中断; //向量0:无中断
案例 ADC12IV_ADC12OVIFG:中断; //向量2:ADC12MEMx 溢出
ADC12IV_ADC12TOVIFG 案例:中断; //向量4:转换时间溢出
ADC12IV_ADC12HIIFG 案例: //矢量6:窗口比较器高侧
/*禁用高侧并启用低侧中断。 *
ADC12IER2 &=~ADC12HIIE;
ADC12IER2 |= ADC12LOIE;
ADC12IFGR2 &=~ADC12LOIFG;
中断;
ADC12IV_ADC12LOIFG 案例: //矢量8:窗口比较器低侧
/*进入器件关断模式、超时为64ms。 *
ctpl_enterShutdown (CTPL_SHUTDOWN_TIMEOUT_64_MS);
/*禁用低侧并启用高侧中断。 *
ADC12IER2 &=~ADC12LOIE;
ADC12IER2 |= ADC12HIIE;
ADC12IFGR2 &=~ADC12HIIFG;
中断;
默认值:break;
}
}