Quantcast
Channel: MSP low-power microcontrollers
Viewing all articles
Browse latest Browse all 64959

Forum Post: RE: COMPILING FAILURE AT ISR FUNCTION

$
0
0
Hi Omer! It would be easier if you would use the Syntaxhighlighter for posting code: #include #include unsigned int timerCount = 0; int main( void ) { WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer P2OUT &= ~(BIT4); // preload 1pps to '0' // set I/O pins directions P1DIR |=BIT6+BIT7; //set p1.x to 11000000 P2DIR |=BIT4; // Set P2.4 to output direction PJDIR |=BIT0+BIT1+BIT3; // set pj.x output 0000 1011 P2SEL |= BIT4; // select the option of using TD0.0 in pin 2.4 P2IES |= BIT4; // high -> low is selected with IES.x = 1. P2IFG &= ~BIT4; // To prevent an immediate interrupt, clear the flag for P1.3 before enabling the interrupt. P2IE |= BIT4; // Enable interrupts for P1.3 // Configure XT1 (external oscillator) PJSEL |= BIT4+BIT5; // port select for xt1 UCSCTL6 &= ~(XT1OFF); //xt1 is on UCSCTL3 = 0; // FLL REFERENCE CLOCK REFERENCE = XT1 // configure TD0.0 to output of 1 pulse per second TD0CCR0=16000-1; // setting TAR count up value 16000 (12.8MHz / 8 = 1.6MHz , 1.6MHz / 100 = 16000 Hz) when 100 is passed means 1 second has passed as well //TD0CCR1= //DUTY CYCLE OF 50% //TD0CCTL1=CCIE + OUTMOD_7; //enabling interuption + RESET/SET OUTPUT MODE TD0CTL0 =MC_2+ID_3+TDSSEL_0+TAIE; //defining timer d TD0.0 (P2.4) __enable_interrupt(); for(;;) { // main loop (looping forever) // EXTERNAL / INTERNAL SELECTION BY SW4 if ((P2IN & BIT2)==0) // INTERNAL MODE { PJOUT |=BIT3; // sends '1' from pj.3 output to the multiplexer U4 (uses the internal 1pps) //PULSE 1 : DESCRETE ON/OFF AND SWITCH ON/BAD/OFF if ((P2IN & BIT0)==0 || (P1IN & BIT0)==0) // NORMAL SIGNAL OF 1PPS checks if descrete source is on or 1pps sw pulse 1 is on { P1OUT |= BIT6; //ENABLES PULSE BY THE 'AND' GATE PJOUT |= BIT0; //ENABLES TTL TO RS232 CONVERTER (FOR DIFF OUTPUT) #pragma vector = TIMER0_D0_VECTOR __interrupt void TIMER0_D0_ISR(void) { if (++timerCount > 50) // checks if the incrementation of timerCount reaches 50 (means 0.5 second has passed) { P2OUT ^=BIT4; // generates 1pps out of p2.4 timerCount = 0; // resets the timer count } P2IFG &=˜BIT4; // clears the fl } } else { P1OUT |= ~BIT6; //DISABLES PULSE BY SENDING A '0' TO THE AND GATE } Now you can easily see that there is missing something. And you cannot put your interrupt function inside of your code. #include #include unsigned int timerCount = 0; int main( void ) { WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer P2OUT &= ~(BIT4); // preload 1pps to '0' // set I/O pins directions P1DIR |=BIT6+BIT7; //set p1.x to 11000000 P2DIR |=BIT4; // Set P2.4 to output direction PJDIR |=BIT0+BIT1+BIT3; // set pj.x output 0000 1011 P2SEL |= BIT4; // select the option of using TD0.0 in pin 2.4 P2IES |= BIT4; // high -> low is selected with IES.x = 1. P2IFG &= ~BIT4; // To prevent an immediate interrupt, clear the flag for P1.3 before enabling the interrupt. P2IE |= BIT4; // Enable interrupts for P1.3 // Configure XT1 (external oscillator) PJSEL |= BIT4+BIT5; // port select for xt1 UCSCTL6 &= ~(XT1OFF); //xt1 is on UCSCTL3 = 0; // FLL REFERENCE CLOCK REFERENCE = XT1 // configure TD0.0 to output of 1 pulse per second TD0CCR0=16000-1; // setting TAR count up value 16000 (12.8MHz / 8 = 1.6MHz , 1.6MHz / 100 = 16000 Hz) when 100 is passed means 1 second has passed as well //TD0CCR1= //DUTY CYCLE OF 50% //TD0CCTL1=CCIE + OUTMOD_7; //enabling interuption + RESET/SET OUTPUT MODE TD0CTL0 =MC_2+ID_3+TDSSEL_0+TAIE; //defining timer d TD0.0 (P2.4) __enable_interrupt(); for(;;) { // main loop (looping forever) // EXTERNAL / INTERNAL SELECTION BY SW4 if ((P2IN & BIT2)==0) // INTERNAL MODE { PJOUT |=BIT3; // sends '1' from pj.3 output to the multiplexer U4 (uses the internal 1pps) //PULSE 1 : DESCRETE ON/OFF AND SWITCH ON/BAD/OFF if ((P2IN & BIT0)==0 || (P1IN & BIT0)==0) // NORMAL SIGNAL OF 1PPS checks if descrete source is on or 1pps sw pulse 1 is on { P1OUT |= BIT6; //ENABLES PULSE BY THE 'AND' GATE PJOUT |= BIT0; //ENABLES TTL TO RS232 CONVERTER (FOR DIFF OUTPUT) } else { P1OUT |= ~BIT6; //DISABLES PULSE BY SENDING A '0' TO THE AND GATE } } } } #pragma vector = TIMER0_D0_VECTOR __interrupt void TIMER0_D0_ISR(void) { if (++timerCount > 50) // checks if the incrementation of timerCount reaches 50 (means 0.5 second has passed) { P2OUT ^=BIT4; // generates 1pps out of p2.4 timerCount = 0; // resets the timer count } P2IFG &=˜BIT4; // clears the fl } And look at the last statement - there is a wrong symbol before BIT4 - it does not seem to be a "~".

Viewing all articles
Browse latest Browse all 64959

Latest Images

Trending Articles



Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>