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.

MSP430FR2353: No I2C Interrupts

Part Number: MSP430FR2353
Other Parts Discussed in Thread: MSP430FR2355, HDC2080, HDC2022,

I am trying to port the sample code in /msp430fr2355_demo_with_hdc2080/main.c to our hardware (FR2353, HDC2022). I'm using USCI_B1.

The I2C peripheral is not generating an interrupt (never hits the breakpoint I set on the first statement in the ISR).

First of all, am I using the correct keyword in the statement below:

#pragma vector = USCI_B1_VECTOR

How about this?

#pragma vector = EUSCI_B1_VECTOR

Do both point to the same interrupt vector?  Both Build with no errors.

Here are some of my code snippets that were modified to match my hardware.

void initGPIO()

......... skipped lines

// I2C pins (P4.7 is SCL, P4.6 is SDA)
P4SEL0 |= BIT6 | BIT7;
P4SEL1 &= ~(BIT6 | BIT7);

.......skipped lines


void initI2C()
UCB1CTLW0 = UCSWRST; // Enable SW reset
UCB1BRW = 160; // fSCL = SMCLK/160 = ~100kHz
UCB1I2CSA = SLAVE_ADDR; // Slave Address
UCB1CTLW0 &= ~UCSWRST; // Clear SW reset, resume operation

// I2C Interrupt ***************************************************************

#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector = USCI_B1_VECTOR
__interrupt void USCI_B1_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(USCI_B1_VECTOR))) USCI_B1_ISR (void)
#error Compiler not supported!
//Must read from UCB1RXBUF
uint8_t rx_val = 0;
switch(__even_in_range(UCB1IV, USCI_I2C_UCBIT9IFG))       <<<<<<<<<<<Breakpoint set here.....




I2C_Mode I2C_Master_WriteReg(uint8_t dev_addr, uint8_t reg_addr, uint8_t *reg_data, uint8_t count)
/* Initialize state machine */
TransmitRegAddr = reg_addr;

//Copy register data to TransmitBuffer
CopyArray(reg_data, TransmitBuffer, count);

TXByteCtr = count;
RXByteCtr = 0;
ReceiveIndex = 0;
TransmitIndex = 0;

/* Initialize slave address and interrupts */
UCB1I2CSA = dev_addr;
UCB1IFG &= ~(UCTXIFG + UCRXIFG); // Clear any pending interrupts
UCB1IE &= ~UCRXIE; // Disable RX interrupt
UCB1IE |= UCTXIE; // Enable TX interrupt

UCB1CTLW0 |= UCTR + UCTXSTT; // I2C TX, start condition
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0 w/ interrupts   <<<<<<<<<<<< HANGS HERE...............

return MasterMode;

When I run the program, it hangs on the line:

__bis_SR_register(LPM0_bits + GIE); // Enter LPM0 w/ interrupts

The breakpoint is not hit.

This is the first attempt to use I2C to talk to the HDC2022).