Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

1#include 2 3#define TCNT CONST 10000 4 5// Non-blocking using timer interrupt i

ID: 3604295 • Letter: 1

Question

1#include 2 3#define TCNT CONST 10000 4 5// Non-blocking using timer interrupt implementation 6 int main(void) 5 // Stop watchdog timer 8 I/ Upon reset CPU frequency is 16MHz 9 10 PJDIRBITeBIT1; 11 PJOUTBITe; 12 PJOUT &=nBIT1; 13 14 Configure timer A as a clock divider to generate delay 15 TA0CCTL0=CCIE; 16 TA0CTL TASSEL 2 + 1D 3 + MC 1; // Use the SMCLK to clock the counter, SMCLK/8, count up mode 17 TA0CCRO=TCNT CONST-1; 18 // Set PJ.0 and PJ.1 to output direction. We only select these two LEDs to alternate toggling // Arbitrarily set PJ.0 to ON // Set PJ.1 to OFF // Enable counter interrupt on counter compare register 0 // Set maximum count (Interrupt frequency 8MHz/8/TCNT CONST = 10Hz) // Enter LPMe 19 _BIS_SR(CPUOFF) 20 disable interrupt(): 21 22 return 0 23 24 25// TimerA interrupt service routine 26#pragma vector = TIMER0 AO VECTOR 27_interrupt void Timer_A (void) f 28 PJoUT BITe BIT1; 29 30 // Disable interrupts because already set auto startup // Requires a return for new Energia version to be safe from compilation errors // Toggle between PJ.0 and PJ.1 using XOR

Explanation / Answer

THE CODE IS MODIFIED

#include <msp430fr5739.h>
#define TCNT_CONST 10000

int main(void){
WDTCTL = WDTPW | WDTHOLD;
PJDIR | = BIT0 + BIT1;
PJOUT | = BIT0;
PJOUT & = ~ BIT1;

TA0CCTL0 = CCIE;
TA0CTL = TASSEL_2 + ID_3 + MC_1;
TA0CCR0 = TCNT_CONST -1;

_BIS_SR(CPUOFF);
_disable_interrupt();

return 0;
}

#prgma vector = TIMER0_A0_VECTOR
_interrupt void Timer _A (void){
PJOUT ^= BIT0 + BIT1;
}