Estoy haciendo un proyecto sencillo con MSP430FR6989 donde estoy convirtiendo una señal analógica a digital, cuando termine la conversión saltará a un ISR e incrementará un entero.
Podemos configurar el ADC12_B (módulo ADC para el microcontrolador) para que empiece a muestrear y convertir fijando el bit ADC12SC del registro ADC12CTL0, o a través de varios disparadores específicos del dispositivo.
( Guía del usuario pg 867/1021)
( Ficha técnica pg 91/183)
Estoy configurando mi MSP430 para que empiece a convertir utilizando el disparador de salida TA0 CCR1 ( ADC12SHSx = 001 )
Con la información que tengo, me imaginé que si el CCIF un poco de TA0CCTL1 se activará una conversión del ADC, y cuando la conversión esté terminada y almacenada en el buffer del ADC, se activará una rutina de servicio de interrupción
He escrito mi código según la información que tengo, he construido el proyecto y lo he depurado, pero durante mi sesión de depuración mi MSP430 nunca salta a mi rutina ISR.
¿Puede alguien ayudarme con este asunto?
Este es un ejemplo del código que he escrito: dentro del main()
función:
int main (void)
{
//code
init_Timer ();
//configures TA0 CCR1 to 50 ms
init_ADC ();
//ADC12SHSx = 001 (Trigger is TA0 CCR1)
//ADC12IER0 = ADC12IE0; enables ADC12 Interrupt
ADC12CTL0 = ADC12CTL0 | ADC12ENC; //enable Conversion
_BIS_SR(GIE);//enable global interrupt
//rest of code
}
dentro de la función ISR
#pragma vector = ADC12_VECTOR
__interrupt void ADC12_ISR (void)
{
static int x = 0;
++x;
}
EDIT_0
dentro del init_ADC ()
función
void init_ADC (void)
{
ADC12CTL0 = ADC12ON | ADC12SHT0_2;
//ADC ON, 16 ADC12CLK
ADC12CTL1 = ADC12SHS_1 | ADC12SHP | ADC12SSEL_1;
//TA0 CCR1 Output, SAMPCON from Sample Timer, ACLK
ADC12CTL2 = ADC12RES__12BIT;//12 bit resolution
ADC12MCTL0 = ADC12INCH_10;//A10 P9.2
ADC12IER0 = ADC12IE0;//enable MEM0 interrupt (if it's value changed)
ADC12IFGR0 = ADC12IFGR0 & (~ADC12IFG0);
}
Dentro de init_Timer ()
función
void init_Timer (void)
{
TA0CTL = MC__UP | TASSEL__ACLK;//counts to TA0CCR0, and source from ACLK
TA0CCR0 = 1667;//50 ms count = 50/.03 (Tperiod of ACLK = .03)
TA0CCR1 = 1667;// 50 ms
}
FIN de EDIT_0