This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Interrupt not working

Other Parts Discussed in Thread: MSP430FR4133

I am using a MSP430fr4133.  When I use the sample code msp430rf413x_P103.c it works fine.   I have code I wrote to use GPIO pin closer to trip a count on an LCD that works fine.  Now when I that the interrupt code and replace my GPIO pin code my program will not count.  I leave the led status in the code and it just stays on no toggle.  can someone help?

 Part of my code:

#include <msp430.h>

#include <LCD.h>

 

volatile signed int Ctr; // Loop counter: volatile!

volatile unsigned char pos; // saves the position of the LCD Char

volatile signed int Ctr1; // ones place

volatile signed int Ctr2; // hundreds place

volatile signed int Ctr3; // thoundsand place

volatile signed int Ctr4; // ten thoundsands place

volatile signed int Ctr5; // hundred thoundsands place

volatile signed int Ctr6; // one million place

void Calculate(void);

void SPI(void);

volatile signed int Stop=0;

 

 

 

 

 

 

int main( void )

{

 

WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer

//Initialize GPIO

// Configure XT1 oscillator

P4SEL0 |= BIT1 | BIT2; // P4.2~P4.1: crystal pins

P1SEL0 |= BIT0 | BIT1 | BIT2 | BIT3; // set 4-SPI pin as second function

do

{

CSCTL7 &= ~(XT1OFFG | DCOFFG); // Clear XT1 and DCO fault flag

SFRIFG1 &= ~OFIFG;

}while (SFRIFG1 & OFIFG); // Test oscillator fault flag

CSCTL6 = (CSCTL6 & ~(XT1DRIVE_3)) | XT1DRIVE_2; // Higher drive strength and current consumption for XT1 oscillator

PMMCTL0 = PMMPW; // Open PMM Module

 

//sets input Mode

P1SEL0 &= ~BIT5;

P1DIR &= ~BIT5;

P1OUT|=BIT5;

// Sets pull up resistor on switch

P1REN |= BIT5;

 

 

 

// Configure LCD pins

SYSCFG2 |= LCDPCTL; // R13/R23/R33/LCDCAP0/LCDCAP1 pins selected

LCDPCTL0 = 0xFFFF;

LCDPCTL1 = 0x07FF;

LCDPCTL2 = 0x00F0; // L0~L26 & L36~L39 pins selected

LCDCTL0 = LCDSSEL_0 | LCDDIV_7; // flcd ref freq is xtclk

// LCD Operation - Mode 3, internal 3.08v, charge pump 256Hz

LCDVCTL = LCDCPEN | LCDREFEN | VLCD_6 | (LCDCPFSEL0 | LCDCPFSEL1 | LCDCPFSEL2 | LCDCPFSEL3);

LCDMEMCTL |= LCDCLRM; // Clear LCD memory

LCDCSSEL0 = 0x000F; // Configure COMs and SEGs

LCDCSSEL1 = 0x0000; // L0, L1, L2, L3: COM pins

LCDCSSEL2 = 0x0000;

LCDM0 = 0x21; // L0 = COM0, L1 = COM1

LCDM1 = 0x84; // L2 = COM2, L3 = COM3

LCDMEM[pos5] = LCD_Tab[Ctr1];

LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected

PMMCTL0_H = PMMPW_H; // Open PMM Registers for write

PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF

 

 

LCDMEM[pos6] = LCD_Tab[Ctr2];

LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected

PMMCTL0_H = PMMPW_H; // Open PMM Registers for write

PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF

LCDMEM[pos4] = LCD_Tab[Ctr2];

LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected

PMMCTL0_H = PMMPW_H; // Open PMM Registers for write

PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF

LCDMEM[pos3] = LCD_Tab[Ctr2];

LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected

PMMCTL0_H = PMMPW_H; // Open PMM Registers for write

PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF

 

 

LCDMEM[pos2] = LCD_Tab[Ctr2];

LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected

PMMCTL0_H = PMMPW_H; // Open PMM Registers for write

PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF

 

 

LCDMEM[pos1] = LCD_Tab[Ctr2];

LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected

PMMCTL0_H = PMMPW_H; // Open PMM Registers for write

PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF

LCDMEM[11] = 0x1; //Decimal point

LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected

PMMCTL0_H = PMMPW_H; // Open PMM Registers for write

PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF

LCDMEM[13] = 0x01;// battery indcator

LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected

PMMCTL0_H = PMMPW_H; // Open PMM Registers for write

PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF

// set varables to zero

Ctr=0;

Ctr1=0;

Ctr2=0;

Ctr3=0;

Ctr4=0;

Ctr5=0;

Ctr6=0;

 

 

 

 

 

while(!Stop) { // Loop forever

 

 

 

if ((P1IN & BIT5) == 0) // Loop while button down

{

Calculate();

__delay_cycles(1200000); // Delay for 100000*(1/MCLK)=0.1s

 

 

}

 

 

}

}

  • Randy,

    maybe anyone else will answer to your question, but I do not understand your problem (but I'm normally speaking German, maybe that is the reason why I do not understand it). Furthermore your code is not easy to read - when you press reply and then rich formatting on the lower right you will get more options. There is a tool that is called SyntaxHighlighter [</>] which will add line numbers to your code. This makes it much easier to read.


    Dennis

  • The problem is when I add the interrupt the led will not flash or the LCD will not count.  I can not get the interrupt to work in place of the GPIO.
    Thanks




    #include <msp430.h> #include <LCD.h> volatile signed int Ctr; // Loop counter: volatile! volatile unsigned char pos; // saves the position of the LCD Char volatile signed int Ctr1; // ones place volatile signed int Ctr2; // hundreds place volatile signed int Ctr3; // thoundsand place volatile signed int Ctr4; // ten thoundsands place volatile signed int Ctr5; // hundred thoundsands place volatile signed int Ctr6; // one million place void Calculate(void); void SPI(void); volatile signed int Stop=0; int main( void ) { WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer //Initialize GPIO // Configure XT1 oscillator P4SEL0 |= BIT1 | BIT2; // P4.2~P4.1: crystal pins // P1SEL0 |= BIT0 | BIT1 | BIT2 | BIT3; // set 4-SPI pin as second function do { CSCTL7 &= ~(XT1OFFG | DCOFFG); // Clear XT1 and DCO fault flag SFRIFG1 &= ~OFIFG; }while (SFRIFG1 & OFIFG); // Test oscillator fault flag CSCTL6 = (CSCTL6 & ~(XT1DRIVE_3)) | XT1DRIVE_2; // Higher drive strength and current consumption for XT1 oscillator PMMCTL0 = PMMPW; // Open PMM Module /* //sets input Mode P1SEL0 &= ~BIT5; P1DIR &= ~BIT5; P1OUT|=BIT5; // Sets pull up resistor on switch P1REN |= BIT5; // set output mode P1OUT &= ~BIT0; // Clear P1.0 output latch for a defined power-on state P1DIR |= BIT0; // Set P1.0 to output direction PM5CTL0 &= ~LOCKLPM5; // Disable the GPIO power-on default high-impedance mode // to activate previously configured port settings P1IE |= BIT5; // P1.5 interrupt enabled P1IES |= BIT5; // P1.5 Hi/Low edge */ // Configure GPIO P1OUT &= ~BIT0; // Clear P1.0 output latch for a defined power-on state P1DIR |= BIT0; // Set P1.0 to output direction P1OUT |= BIT3; // Configure P1.3 as pulled-up P1REN |= BIT3; // P1.3 pull-up register enable P1IES |= BIT3; // P1.3 Hi/Low edge P1IE |= BIT3; // P1.3 interrupt enabled // Disable the GPIO power-on default high-impedance mode // to activate previously configured port settings PM5CTL0 &= ~LOCKLPM5; P1IFG &= ~BIT3; // P1.3 IFG cleared // Configure LCD pins SYSCFG2 |= LCDPCTL; // R13/R23/R33/LCDCAP0/LCDCAP1 pins selected LCDPCTL0 = 0xFFFF; LCDPCTL1 = 0x07FF; LCDPCTL2 = 0x00F0; // L0~L26 & L36~L39 pins selected LCDCTL0 = LCDSSEL_0 | LCDDIV_7; // flcd ref freq is xtclk // LCD Operation - Mode 3, internal 3.08v, charge pump 256Hz LCDVCTL = LCDCPEN | LCDREFEN | VLCD_6 | (LCDCPFSEL0 | LCDCPFSEL1 | LCDCPFSEL2 | LCDCPFSEL3); LCDMEMCTL |= LCDCLRM; // Clear LCD memory LCDCSSEL0 = 0x000F; // Configure COMs and SEGs LCDCSSEL1 = 0x0000; // L0, L1, L2, L3: COM pins LCDCSSEL2 = 0x0000; LCDM0 = 0x21; // L0 = COM0, L1 = COM1 LCDM1 = 0x84; // L2 = COM2, L3 = COM3 LCDMEM[pos5] = LCD_Tab[Ctr1]; LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected PMMCTL0_H = PMMPW_H; // Open PMM Registers for write PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF LCDMEM[pos6] = LCD_Tab[Ctr2]; LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected PMMCTL0_H = PMMPW_H; // Open PMM Registers for write PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF LCDMEM[pos4] = LCD_Tab[Ctr2]; LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected PMMCTL0_H = PMMPW_H; // Open PMM Registers for write PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF LCDMEM[pos3] = LCD_Tab[Ctr2]; LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected PMMCTL0_H = PMMPW_H; // Open PMM Registers for write PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF LCDMEM[pos2] = LCD_Tab[Ctr2]; LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected PMMCTL0_H = PMMPW_H; // Open PMM Registers for write PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF LCDMEM[pos1] = LCD_Tab[Ctr2]; LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected PMMCTL0_H = PMMPW_H; // Open PMM Registers for write PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF LCDMEM[11] = 0x1; //Decimal point LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected PMMCTL0_H = PMMPW_H; // Open PMM Registers for write PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF LCDMEM[13] = 0x01;// battery indcator LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected PMMCTL0_H = PMMPW_H; // Open PMM Registers for write PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF // set varables to zero Ctr=0; Ctr1=0; Ctr2=0; Ctr3=0; Ctr4=0; Ctr5=0; Ctr6=0; while(1) { __bis_SR_register(LPM3_bits | GIE); // Enter LPM3 w/interrupt __no_operation(); // For debugger P1OUT ^= BIT0; // P1.0 = toggle } /* while(!Stop) { // Loop forever if ((P1IN & BIT3) == 0) // Loop while button down { Calculate(); __delay_cycles(1200000); // Delay for 100000*(1/MCLK)=0.1s P1OUT ^= BIT0; // P1.0 = toggle } } */ }

  • Hello Randy,

    I am also confused by the description of your issue. I do not see your ISR in the code you provided, without the Port 1 ISR you will never exit LPM3 hence why P1.0 never toggles.

    Regards,
    Ryan
  • Here is the complete code the port interrupt is at the very end.



    #include <msp430.h> #include <LCD.h> volatile signed int Ctr; // Loop counter: volatile! volatile unsigned char pos; // saves the position of the LCD Char volatile signed int Ctr1; // ones place volatile signed int Ctr2; // hundreds place volatile signed int Ctr3; // thoundsand place volatile signed int Ctr4; // ten thoundsands place volatile signed int Ctr5; // hundred thoundsands place volatile signed int Ctr6; // one million place void Calculate(void); void SPI(void); volatile signed int Stop=0; int main( void ) { WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer //Initialize GPIO // Configure XT1 oscillator P4SEL0 |= BIT1 | BIT2; // P4.2~P4.1: crystal pins // P1SEL0 |= BIT0 | BIT1 | BIT2 | BIT3; // set 4-SPI pin as second function do { CSCTL7 &= ~(XT1OFFG | DCOFFG); // Clear XT1 and DCO fault flag SFRIFG1 &= ~OFIFG; }while (SFRIFG1 & OFIFG); // Test oscillator fault flag CSCTL6 = (CSCTL6 & ~(XT1DRIVE_3)) | XT1DRIVE_2; // Higher drive strength and current consumption for XT1 oscillator PMMCTL0 = PMMPW; // Open PMM Module /* //sets input Mode P1SEL0 &= ~BIT5; P1DIR &= ~BIT5; P1OUT|=BIT5; // Sets pull up resistor on switch P1REN |= BIT5; // set output mode P1OUT &= ~BIT0; // Clear P1.0 output latch for a defined power-on state P1DIR |= BIT0; // Set P1.0 to output direction PM5CTL0 &= ~LOCKLPM5; // Disable the GPIO power-on default high-impedance mode // to activate previously configured port settings P1IE |= BIT5; // P1.5 interrupt enabled P1IES |= BIT5; // P1.5 Hi/Low edge */ // Configure GPIO P1OUT &= ~BIT0; // Clear P1.0 output latch for a defined power-on state P1DIR |= BIT0; // Set P1.0 to output direction P1OUT |= BIT3; // Configure P1.3 as pulled-up P1REN |= BIT3; // P1.3 pull-up register enable P1IES |= BIT3; // P1.3 Hi/Low edge P1IE |= BIT3; // P1.3 interrupt enabled // Disable the GPIO power-on default high-impedance mode // to activate previously configured port settings PM5CTL0 &= ~LOCKLPM5; P1IFG &= ~BIT3; // P1.3 IFG cleared // Configure LCD pins SYSCFG2 |= LCDPCTL; // R13/R23/R33/LCDCAP0/LCDCAP1 pins selected LCDPCTL0 = 0xFFFF; LCDPCTL1 = 0x07FF; LCDPCTL2 = 0x00F0; // L0~L26 & L36~L39 pins selected LCDCTL0 = LCDSSEL_0 | LCDDIV_7; // flcd ref freq is xtclk // LCD Operation - Mode 3, internal 3.08v, charge pump 256Hz LCDVCTL = LCDCPEN | LCDREFEN | VLCD_6 | (LCDCPFSEL0 | LCDCPFSEL1 | LCDCPFSEL2 | LCDCPFSEL3); LCDMEMCTL |= LCDCLRM; // Clear LCD memory LCDCSSEL0 = 0x000F; // Configure COMs and SEGs LCDCSSEL1 = 0x0000; // L0, L1, L2, L3: COM pins LCDCSSEL2 = 0x0000; LCDM0 = 0x21; // L0 = COM0, L1 = COM1 LCDM1 = 0x84; // L2 = COM2, L3 = COM3 LCDMEM[pos5] = LCD_Tab[Ctr1]; LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected PMMCTL0_H = PMMPW_H; // Open PMM Registers for write PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF LCDMEM[pos6] = LCD_Tab[Ctr2]; LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected PMMCTL0_H = PMMPW_H; // Open PMM Registers for write PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF LCDMEM[pos4] = LCD_Tab[Ctr2]; LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected PMMCTL0_H = PMMPW_H; // Open PMM Registers for write PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF LCDMEM[pos3] = LCD_Tab[Ctr2]; LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected PMMCTL0_H = PMMPW_H; // Open PMM Registers for write PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF LCDMEM[pos2] = LCD_Tab[Ctr2]; LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected PMMCTL0_H = PMMPW_H; // Open PMM Registers for write PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF LCDMEM[pos1] = LCD_Tab[Ctr2]; LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected PMMCTL0_H = PMMPW_H; // Open PMM Registers for write PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF LCDMEM[11] = 0x1; //Decimal point LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected PMMCTL0_H = PMMPW_H; // Open PMM Registers for write PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF LCDMEM[13] = 0x01;// battery indcator LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected PMMCTL0_H = PMMPW_H; // Open PMM Registers for write PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF // set varables to zero Ctr=0; Ctr1=0; Ctr2=0; Ctr3=0; Ctr4=0; Ctr5=0; Ctr6=0; while(1) { __bis_SR_register(LPM3_bits | GIE); // Enter LPM3 w/interrupt __no_operation(); // For debugger P1OUT ^= BIT0; // P1.0 = toggle } /* while(!Stop) { // Loop forever if ((P1IN & BIT3) == 0) // Loop while button down { Calculate(); __delay_cycles(1200000); // Delay for 100000*(1/MCLK)=0.1s P1OUT ^= BIT0; // P1.0 = toggle } } */ } void Calculate() { Ctr+=1; if (Ctr<=9) { Ctr1=Ctr; } if(Ctr>9)//ones { Ctr2=Ctr/10;// Ctr2 is the 10's place Ctr1=Ctr-(Ctr2*10);// Ctr1 is the one place } if(Ctr>99)//hunderds { Ctr3=Ctr/100; // Ctr3 is the hunderds place Ctr2=Ctr/10-(Ctr3*10);// Ctr1 is the 10's place Ctr1=Ctr-(Ctr2*10)-(Ctr3*100);// Ctr2 is the one place } if(Ctr>999)//thousands { Ctr4=Ctr/1000;// Ctr4 is the thousand place Ctr3=Ctr/100-(Ctr4*10); // Ctr3 is the hunderds place Ctr2=Ctr/10-(Ctr3*10)-(Ctr4*100);// Ctr1 is the 10's place Ctr1=Ctr-(Ctr2*10)-(Ctr3*100)-(Ctr4*1000);// Ctr2 is the one place } if(Ctr>9999)//Ten thousands { Ctr5=Ctr/10000;// Ctr5 is the Ten Thousands place Ctr4=Ctr/1000-(Ctr5*10);// Ctr4 is the thousand place Ctr3=Ctr/100-(Ctr4*10)-(Ctr5*100); // Ctr3 is the hunderds place Ctr2=Ctr/10-(Ctr3*10)-(Ctr4*100)-(Ctr5*1000);// Ctr1 is the 10's place Ctr1=Ctr-(Ctr2*10)-(Ctr3*100)-(Ctr4*1000)-(Ctr5*10000);// Ctr2 is the one place } if(Ctr>99999)//Ten thousands { Ctr6=Ctr/1000000;//Ctr6 is the Hunders Thousands Place Ctr5=Ctr/10000-(Ctr6*10);// Ctr5 is the Ten Thousands place Ctr4=Ctr/1000-(Ctr5*10)-(Ctr6*100);// Ctr4 is the thousand place Ctr3=Ctr/100-(Ctr4*10)-(Ctr5*100)-(Ctr6*1000); // Ctr3 is the hunderds place Ctr2=Ctr/10-(Ctr3*10)-(Ctr4*100)-(Ctr5*1000)-(Ctr6*10000);// Ctr1 is the 10's place Ctr1=Ctr-(Ctr2*10)-(Ctr3*100)-(Ctr4*1000)-(Ctr5*10000)-(Ctr6*1000000);// Ctr2 is the one place } LCDMEM[pos6] = LCD_Tab[Ctr1]; LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected PMMCTL0_H = PMMPW_H; // Open PMM Registers for write PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF LCDMEM[pos5] = LCD_Tab[Ctr2]; LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected PMMCTL0_H = PMMPW_H; // Open PMM Registers for write PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF LCDMEM[pos4] = LCD_Tab[Ctr3]; LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected PMMCTL0_H = PMMPW_H; // Open PMM Registers for write PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF LCDMEM[pos3] = LCD_Tab[Ctr4]; LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected PMMCTL0_H = PMMPW_H; // Open PMM Registers for write PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF LCDMEM[pos2] = LCD_Tab[Ctr5]; LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected PMMCTL0_H = PMMPW_H; // Open PMM Registers for write PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF LCDMEM[pos1] = LCD_Tab[Ctr6]; LCDCTL0 |= LCD4MUX | LCDON; // Turn on LCD, 4-mux selected PMMCTL0_H = PMMPW_H; // Open PMM Registers for write PMMCTL0_L |= PMMREGOFF_L; // and set PMMREGOFF /* * This code makes the battery indcator cycle I will use this a a signal indcator for RF */ return; } // Port 1 interrupt service routine #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__) #pragma vector=PORT1_VECTOR __interrupt void Port_1(void) #elif defined(__GNUC__) void __attribute__ ((interrupt(PORT1_VECTOR))) Port_1 (void) #else #error Compiler not supported! #endif { P1IFG &= ~BIT3; // Clear P1.3 IFG __bic_SR_register_on_exit(LPM3_bits); // Exit LPM3 }

  • Hi Randy,

    I understand your problem now, the ISR is never being serviced. In order to fix this, set PM5CTL0 &= ~LOCKLPM5; after initializing the LCD pins. Note that after the LOCKLPM5 bit is set, it can be cleared only by software or by a power cycle. Also, LCDCTL0 and PMMCTL0 only need to be written to once.

    Regards,
    Ryan
  • That does not work. The line
    LCDCTL0 = LCDSSEL_0 | LCDDIV_7; // flcd ref freq is xtclk
    stops the interrupt from working. But I need it for the LCD.
  • Using your code I moved PM5CTL0 &= ~LOCKLPM5; to right before the while(1) loop, grounded P1.3, and was able to enter the Port 1 ISR. I am surprised that you are not seeing the same on your end.  Instead of moving this line of code try setting the following lines of code:

        LCDCTL0 |= LCD4MUX | LCDON;                                // Turn on LCD, 4-mux selected
    
        PMMCTL0_H = PMMPW_H;                                       // Open PMM Registers for write
        PMMCTL0_L |= PMMREGOFF_L;                                  // and set PMMREGOFF

    But only once and right before starting the while loop.

    Regards,
    Ryan

  •  PMMCTL0_H = PMMPW_H;                                       // Open PMM Registers for write
      PMMCTL0_L |= PMMREGOFF_L;  							// and set PMMREGOFF
    

    I am doing the same thing with no luck.  the only way I get it to work is to comment out the lcd from  the start of line 152 (see above)

    then it works but my lcd don't work

**Attention** This is a public forum