Tool/software: Code Composer Studio
Hello!
My name is Trujillo and I'm from Spain. First of all, my apologies for any English writing mistake I could probably do.
Actually I'm working with a MSP430FR5969 and I'm trying to generate a PWM signal (Timer B) (in the range of audible frequencies) from a Timer A Interrupt. The problem I find is that the PWM signal from the Timer B appears correctly but I need that the PWM from Timer A keeps working. An the last thing doesn't happen. It's seems that the ISR has a lot of thing to do and the CPU can't handle it as quicker as I need. Here is the code, if someone can help me I will be truly grateful.
#include <msp430.h> #include <msp430fr5969.h> unsigned int mostra(void); unsigned int valor=0; unsigned long resultat=0.0; unsigned int vector[48]={0}; unsigned int puntero=0; unsigned long mitja=0.0; /* * main.c */ int main(void) { WDTCTL = WDTPW | WDTHOLD; // Stop WDT // Configure GPIO //---------------------------------------------------------------------------------------------// P1DIR |= BIT2; P1SEL0 |= BIT2; P1DIR |= BIT5; P1SEL0 &= ~BIT5; P1DIR = 0x10; P1SEL0 = 0x10; P4SEL0 |= BIT4; P4SEL1 |= BIT4; // Disable the GPIO power-on default high-impedance mode to activate // previously configured port settings PM5CTL0 &= ~LOCKLPM5; //----------------------------------------------------------------------------------------------------------------// // CONFIGURACIÓN DE LOS CLOCKS //-----------------------------------------------------------------------------------------------------------------// CSCTL0_H = CSKEY >> 8; // Unlock CS registers CSCTL1 = DCOFSEL_6; CSCTL2 = SELA__VLOCLK | SELS__DCOCLK | SELM__DCOCLK; CSCTL3 = DIVA__8 | DIVS__8 | DIVM__1; CSCTL0_H = 0; //-----------------------------------------------------------------------------------------------------------------// //CONFIGURACIÓN DEL ADC12 //-----------------------------------------------------------------------------------------------------------------// ADC12CTL0 = ADC12SHT1_0 | ADC12ON; ADC12CTL1 = ADC12SHP | ADC12SSEL_3 | ADC12PDIV_1 | ADC12CONSEQ_0; ADC12CTL2 =ADC12RES_2; ADC12CTL3 = ADC12CSTARTADD_10; ADC12MCTL10 = ADC12INCH_10 | ADC12VRSEL_0; //--------------------------------------------------------------------------------------------------// //CONFIGURACIÓN DE LA SEÑAL PWM Principal //--------------------------------------------------------------------------------------------------// TA1CTL = TASSEL__SMCLK | MC__UP | TACLR; TA1CCR0 = 2325-1; TA1CCTL1 = OUTMOD_7; TA1CCR1 = 1850; TA1CCTL2 = CCIE; TA1CCR2 = 1965; //--------------------------------------------------------------------------------------------------// __bis_SR_register(LPM0_bits+GIE); // Enter LPM0 y generamos la ISR while(1){}; } //----------------ISR--------------------------------------------------------------------------// #pragma vector=TIMER1_A1_VECTOR //INTERRUPCIÓN EN TIMER1: TA1.1 __interrupt void Temp(void) { switch (TA1IV) { case 4: // interrupción en TA1CCR2 mostra(); int i; vector[puntero]=mostra(); if(puntero==47){ puntero=0; for(i=0;i<48;i++){ mitja=mitja+vector[i]; } resultat=mitja/48; if (resultat<<205){ resultat=205.0; } //--------------- CONFIGURACIÓN DE LA SEÑAL PWM de salida de AUDIO para LOCALIZACIÓN----------------// TB0CTL = TBSSEL__SMCLK | MC__UP | CNTL_1 | TBCLR; TB0CCTL1 = OUTMOD_7; TB0CCR0 = (409600/resultat)-1; TB0CCR1 = TB0CCR0/2; mitja=0; resultat=0.0; } else puntero++; break; } TA1CTL &= ~TAIFG; } //--------------ADC12---------------------------------------------------------------------------------// unsigned int mostra(void) { ADC12MEM10=0; ADC12CTL0 |= ADC12ENC | ADC12SC; while((ADC12CTL0&ADC12SC)==ADC12SC){}; valor=ADC12MEM10; ADC12CTL0 &= ~ADC12ENC; return valor; }
Thank you so much!
Trujillo