Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

MSP-EXP430FR6989 Using the Timer, Code bug or error somewhere. The main code is supposed to wait until the TAIFG flag is raised when the timer

MSP-EXP430FR6989 Using the Timer, Code bug or error somewhere.

The main code is supposed to wait until the TAIFG flag is raised when the timer resets to 0. Within the infinite for loop is a while loop that holds until the flag is raised. For some reason though no matter what I put into that while query, if its true the light stays on, if its false it never turns on. This leads me to believe that something about the timer isn't syntaxed or used correctly. Idk. Been working on this code for WAY longer than I'd like to admit.

I wrote the following code:

#include

#define redLED BIT0 // Red LED at P1.0

#define greenLED BIT7 // Green LED at P9.7

void config_ACLK_to_32KHz_crystal(void);

//****** Flashing the LED with Timer_A, continuous mode, via polling*********

void main(void) {

WDTCTL = WDTPW | WDTHOLD; // Stop the Watchdog timer

PM5CTL0 &= ~LOCKLPM5; // Enable the GPIO pins

P1DIR |= redLED; // Direct pin as output

P9DIR |= greenLED; // Direct pin as output

P1OUT &= ~redLED; // Turn LED Off

P9OUT &= ~greenLED; // Turn LED Off

config_ACLK_to_32KHz_crystal(); // Configure ACLK to the 32 KHz crystal (function call)

// Configure Timer_A

TA0CTL = TASSEL_1 | ID_0 | MC_2 | TACLR; // Use ACLK, divide by 1, continuous mode, clear TAR

TA0CTL &= ~TAIFG; // Ensure flag is cleared at the start

for(;;){ // Infinite loop

while(TA0CTL &= ~TAIFG){} // Empty while loop; waits here until TAIFG is raised

P1OUT ^= redLED; // Toggle the red LED

TA0CTL &= ~TAIFG; // Clear the flag

}

return;

}

//****** Configures ACLK to 32 KHz crystal*********

void config_ACLK_to_32KHz_crystal(){ // By default, ACLK runs on LFMODCLK at 5MHz/128 = 39 KHz

PJSEL1 &= ~BIT4; // Reroute pins to LFXIN/LFXOUT functionality

PJSEL0 |= BIT4; // Wait until the oscillator fault flags remain cleared

CSCTL0 = CSKEY; // Unlock CS registers

do {

CSCTL5 &= ~LFXTOFFG; // Local fault flag

SFRIFG1 &= ~OFIFG; // Global fault flag

}while((CSCTL5 & LFXTOFFG) != 0);

CSCTL0_H = 0; // Lock CS registers

return;

}

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image_2

Step: 3

blur-text-image_3

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Practical Issues In Database Management A Refernce For The Thinking Practitioner

Authors: Fabian Pascal

1st Edition

0201485559, 978-0201485554

More Books

Students also viewed these Databases questions