Hi,team
I'm using MSP430FR5994 Launchpad kit. I'm trying to Initialize timer using function "timer_delay(delay);" but i'm not getting any interrupt.
I was able to blink LEDs and access switch inputs using another code. For accessing switch, i had to update MSP430FR5994.h file as per given in E2E forum.
The code i used is attached below. Please review.
//***************************************************************************************
// Blink the LED Demo - Software Toggle P1.0
//
// Description; Toggle P1.0 inside of a software loop.
// ACLK = n/a, MCLK = SMCLK = default DCO
//
// MSP430x5xx
// -----------------
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
// | P1.0|-->LED
//
// E. Chen
// Texas Instruments, Inc
// March 2016
// Built with Code Composer Studio v6
//***************************************************************************************
#include "./MSP430FR5xx_6xx/driverlib.h"
#include <stdio.h>
//#include <driverlib.h>
void initClock(void);
void timer_delay(uint32_t);
int flag1 = 0,flag2 = 0;
int delay_flag = 0;
int count = 0;
volatile int SW1_state=1,SW2_state=1;
int main(void)
{
volatile uint32_t i;
volatile uint8_t SW1,SW2;
volatile uint16_t SW1_interrupt=1,SW2_interrupt=1,SW1_interrupt_pre,SW2_interrupt_pre;
volatile uint32_t delay = 0;
// Stop watchdog timer
WDT_A_hold(WDT_A_BASE);
//initClock();
GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0); // Set Red LED output
GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN0); // Red LED off
GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN1); // Set Green LED output
GPIO_setOutputLowOnPin(GPIO_PORT_P1, GPIO_PIN1); // Green LED off
GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P5, GPIO_PIN6); // S1 P5.6: PxDIR, PxOUT and PxREN registers
GPIO_selectInterruptEdge(GPIO_PORT_P5, GPIO_PIN6,GPIO_HIGH_TO_LOW_TRANSITION); // S1 P5.6: PxIES register
GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P5, GPIO_PIN5); // S2 P5.5: PxDIR, PxOUT and PxREN registers
GPIO_selectInterruptEdge(GPIO_PORT_P5, GPIO_PIN5,GPIO_HIGH_TO_LOW_TRANSITION); // S2 P5.5: PxIES register
SW1 = GPIO_getInputPinValue(GPIO_PORT_P5,GPIO_PIN6);
SW2 = GPIO_getInputPinValue(GPIO_PORT_P5,GPIO_PIN5);
//SW1_state = SW1 & 0x08;
// Disable the GPIO power-on default high-impedance mode to activate previously configured port settings
PMM_unlockLPM5();
// Set all P5IFG to zero
P5IFG = 0x00;
GPIO_enableInterrupt(GPIO_PORT_P5, GPIO_PIN5);
GPIO_enableInterrupt(GPIO_PORT_P5, GPIO_PIN6);
__bis_SR_register(GIE); // Enable all interrupts
//*
// Enable Switch interrupt
GPIO_clearInterrupt(GPIO_PORT_P5, GPIO_PIN5);
GPIO_clearInterrupt(GPIO_PORT_P5, GPIO_PIN6);
//*/
SW1_interrupt_pre= GPIO_getInterruptStatus(GPIO_PORT_P5, GPIO_PIN6);
SW2_interrupt_pre= GPIO_getInterruptStatus(GPIO_PORT_P5, GPIO_PIN5);
while(1)
{
if (SW1_interrupt_pre != GPIO_getInterruptStatus(GPIO_PORT_P5, GPIO_PIN6))
{
if (SW1_interrupt == 1)
{
SW1_interrupt = 0 ;
}
else
{
SW1_interrupt = 1 ;
}
GPIO_clearInterrupt(GPIO_PORT_P5, GPIO_PIN6);
}
if (SW2_interrupt_pre != GPIO_getInterruptStatus(GPIO_PORT_P5, GPIO_PIN5))
{
if (SW2_interrupt == 1)
{
SW2_interrupt = 0 ;
}
else
{
SW2_interrupt = 1 ;
}
GPIO_clearInterrupt(GPIO_PORT_P5, GPIO_PIN5);
}
SW1 = GPIO_getInputPinValue(GPIO_PORT_P5,
GPIO_PIN6);
SW2 = GPIO_getInputPinValue(GPIO_PORT_P5,
GPIO_PIN5);
//if (GPIO_getInputPinValue(GPIO_PORT_P5,GPIO_PIN6) == GPIO_INPUT_PIN_HIGH)
if (SW2_state == 1)
{
if (flag1 == 0)
{
flag1 = 10;
GPIO_toggleOutputOnPin( GPIO_PORT_P1,GPIO_PIN1);
}
else
{
flag1 = flag1--;
}
}
if (GPIO_getInputPinValue(GPIO_PORT_P5,GPIO_PIN6) == GPIO_INPUT_PIN_HIGH)
{
if (flag2 == 0)
{
flag2 = 4;
GPIO_toggleOutputOnPin(GPIO_PORT_P1,GPIO_PIN0);
}
else
{
flag2 = flag2--;
}
}
// Delay
//for(i=1000; i>0; i--);
delay = 0xFFFFFFF;
timer_delay(delay);
timer_delay(delay);
//timer_delay(delay);
//__delay_cycles(16000000); //Wait 160000 CPU cycles
}
}
void timer_delay(uint32_t delay)
{
delay_flag = 0;
//Stop Timer_A
Timer_A_stop(TIMER_A1_BASE);
Timer_A_clearTimerInterrupt(TIMER_A1_BASE);
Timer_A_clearCaptureCompareInterrupt(TIMER_A1_BASE, TIMER_A_CAPTURECOMPARE_REGISTER_0 );
//Start TIMER_A
Timer_A_initContinuousModeParam initContParam = {0};
initContParam.clockSource= TIMER_A_CLOCKSOURCE_SMCLK;
initContParam.clockSourceDivider= TIMER_A_CLOCKSOURCE_DIVIDER_1;
initContParam.timerInterruptEnable_TAIE= TIMER_A_TAIE_INTERRUPT_DISABLE;
initContParam.timerClear= TIMER_A_DO_CLEAR;
initContParam.startTimer=false;
Timer_A_initContinuousMode(TIMER_A1_BASE, &initContParam);
//Enable Interrupt
Timer_A_enableInterrupt(TIMER_A1_BASE);
//Initialize compare mode
Timer_A_enableCaptureCompareInterrupt(TIMER_A1_BASE, TIMER_A_CAPTURECOMPARE_REGISTER_0 );
Timer_A_initCompareModeParam initCompParam = {0};
initCompParam.compareRegister= TIMER_A_CAPTURECOMPARE_REGISTER_0;
initCompParam.compareInterruptEnable= TIMER_A_CAPTURECOMPARE_INTERRUPT_ENABLE;
initCompParam.compareOutputMode= TIMER_A_OUTPUTMODE_OUTBITVALUE;
initCompParam.compareValue= 0x0C350; //50000 count
Timer_A_initCompareMode(TIMER_A1_BASE, &initCompParam);
Timer_A_clear(TIMER_A1_BASE);
Timer_A_startCounter( TIMER_A1_BASE,TIMER_A_CONTINUOUS_MODE);
count = 0;
while(!delay_flag)
{
//count=Timer_A_getCounterValue(TIMER_A1_BASE);
}
//Enter LPM0
//__bis_SR_register(LPM0_bits);
//For debugger
//__no_operation();
}
//******************************************************************************
//
//This is the Timer A interrupt vector service routine
//
//******************************************************************************
#pragma vector=TIMER0_A0_VECTOR
__interrupt void TIMER0_A0_ISR(void)
{
delay_flag = 1;
}
//******************************************************************************
//
//This is the PORT5_VECTOR interrupt vector service routine
//
//******************************************************************************
#pragma vector=PORT5_VECTOR //0xFFC6
__interrupt void Port_5(void)
{
//P5.5 = toggle
switch (P5IFG)
{
case 0b01000000: // S1 P5.6 = 64: toggle red LED
{
//P1OUT ^= BIT0; // Toggle P1.0
//P5IFG &= ~BIT6; // P5.6 clear interrupt flag
GPIO_clearInterrupt(GPIO_PORT_P5,GPIO_PIN6);
if (SW1_state == 1)
{
SW1_state = 0;
}
else
{
SW1_state = 1;
}
}
break;
case 0b00100000: // S2 P5.5 = 32: toggle green LED
{
//P1OUT ^= BIT1; // Toggle P1.1
//P5IFG &= ~BIT5; // P5.5 clear interrupt flag
GPIO_clearInterrupt(GPIO_PORT_P5,GPIO_PIN5);
if (SW2_state == 1)
{
SW2_state = 0;
}
else
{
SW2_state = 1;
}
}
break;
default: // should not be here!
{
//printf("Put an error message here. \n");
}
break;
}
//P5.5 IFG cleared
//GPIO_clearInterrupt(GPIO_PORT_P5,GPIO_PIN5);
}
