工具/软件:Code Composer Studio
大家好、我有一个问题、希望大家能帮忙。
我使用 TA0.1每30ms 触发一次 A0上的 ADC 转换。
除了我使用 LPM0而不是 while (1)之外、一切都能完美运行。
如果我使用 LPM0、它仅在第一次运行时起作用;TA0.1触发 ADC、在转换结束时、进入 ISR。
之后、它将永远不会退出 ISR、也不会再使用计时器来触发 ADC。
我想摆脱 while 循环、仅使用 LPM。
我有什么问题吗?
这是我的代码。
很抱歉打扰了。
Ralf
#include
volatile unsigned char datos[100];
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止 WDT
//配置 ADC12
ADC12CTL0 |= ADC12SHT01 + ADC12ON;// Con 采样定时器8 ciclos、ADC12打开
ADC12CTL1 |= ADC12SHP + ADC12CONSEQ_2;// usar 采样计时器,无通道,多路转换器
ADC12CTL2 = ADC12RES_0;//结果8位
ADC12MCTL0 |= ADC12INCH_0;// Canal A0、Vref=AVCC (默认值)
ADC12IE |= ADC12IE0;// se habilita interruption en A0
ADC12CTL1 |= ADC12SH_1;// Trigger viene de TA0.1
ADC12CTL0 |= ADC12ENC;//适应转换
//Configuracion de TA0.1
TA0CTL |= TASSEL_SMCLK + MC_UP + TACLR;//时钟计时器=SMCLK、MODO UP、清除 TA
TA0CCR0 = 32878;// Periodo de señal 1、085、000/33 -1= 1084 (第30ms 段)
TA0CCTL1 = OUTMOD_7;// salida 复位、设置
TA0CCR1 = 16439;//%CT=50%
_enable_interrupt ();
bis_SR_register (GIE + LPM0_bits);//如果我添加此行、将永远不会退出 ISR
//如果我只使用 while,工作正常
/*while (1){
__no_operation();
}*/
}
#pragma vector = ADC12_vector
_interrupt void ADC12_ISR (void)
{
静态 unsigned char i=0;//se 声明一个静态参数 evitar que se inicialice i cada que entra a ISR
switch (__evo_in_range (ADC12IV、34))
{
情况0:中断;//向量0:无中断
情况2:中断;//矢量2:ADC 溢出
情况4:中断;//矢量4:ADC 时序溢出
情况6://向量6:ADC12IFG0
dataos[i]= ADC12MEM0;// Pasa MEM0 A arreglo
i++;// Incrementa celda de arreglo
如果(i ==100) i=0;// vuelve a inicio del arreglo
中断;
情况8:中断;//向量8:ADC12IFG1
情况10:中断;//向量10:ADC12IFG2
情况12:中断;//向量12:ADC12IFG3
案例14:中断;//矢量14:ADC12IFG4
情况16:中断;//向量16:ADC12IFG5
情况18:中断;//向量18:ADC12IFG6
情况20:中断;//向量20:ADC12IFG7
情况22:中断;//向量22:ADC12IFG8
情况24:中断;//向量24:ADC12IFG9
情况26:中断;//向量26:ADC12IFG10
情况28:中断;//向量28:ADC12IFG11
情况30:中断;//向量30:ADC12IFG12
情况32:中断;//向量32:ADC12IFG13
案例34:中断;//矢量34:ADC12IFG14
}
}

