Tool/software: Code Composer Studio
hi everybody,
I am trying to connect the MCU MSP430FR5969 with SSD1306 OLED (by I2C communication). When I debug step by step, it works, but nothing happens when I try to run all in once. Please someone has any idea to guide me?. I am stuck. Many thanks in advance.
#include <msp430.h> const unsigned char Init[] = {0xAE,0x81,0x07,0x20,0x01,0x21,0x00,0x7F,0x22,0x00,0x07,0x40,0xA0,0xA8,0x3F, 0xC0,0xD3,0x00,0x8D,0x14,0xDA,0x12,0xD5,0x80,0xD9,0x22,0xDB,0x20,0xA6,0xA4,0xAF,0xA5}; //const unsigned char Mod[] = {0xA5}; void main(void){ WDTCTL = WDTPW | WDTHOLD; P1SEL1 |= BIT6 + BIT7; P1DIR |=BIT0; P1OUT &=~BIT0; PM5CTL0 &=~LOCKLPM5; UCB0CTLW0 |= UCSWRST; UCB0CTLW0 |= UCMODE_3 | UCMST | UCSYNC | UCSSEL_2; // I2C master mode UCB0CTLW1 = UCASTP_2; // Use SMCLK, keep SW reset UCB0BR0=0X40; UCB0I2CSA = 0x3C; // address UCB0CTL1 &= ~UCSWRST; UCB0IE |= UCTXIE; while(1){ __delay_cycles(20); while(UCB0CTL1 & UCTXSTP); UCB0CTLW0 |= UCTR | UCTXSTT; __bis_SR_register(LPM0_bits | GIE); } }//FIN MAIN //////////////////////////////////////// #pragma vector = USCI_B0_VECTOR __interrupt void USCI_B0_ISR(void){ switch(__even_in_range(UCB0IV, 0X1e))//USCI_I2C_UCBIT9IFG)) { case USCI_NONE: break; // Vector 0: No interrupts case USCI_I2C_UCALIFG: break; // Vector 2: ALIFG case USCI_I2C_UCNACKIFG: // Vector 4: NACKIFG UCB0CTL1 |= UCTXSTT; // I2C start condition- Resend start if NACK break; case USCI_I2C_UCSTTIFG: break; // Vector 6: START case USCI_I2C_UCSTPIFG: UCB0IFG &=~UCSTPIFG; break; // Vector 8: STOP DETECTED case USCI_I2C_UCRXIFG3: break; // Vector 10: RXIFG3 case USCI_I2C_UCTXIFG3: break; // Vector 12: TXIFG3 case USCI_I2C_UCRXIFG2: break; // Vector 14: RXIFG2 case USCI_I2C_UCTXIFG2: break; // Vector 16: TXIFG2 case USCI_I2C_UCRXIFG1: break; // Vector 18: RXIFG1 case USCI_I2C_UCTXIFG1: break; // Vector 20: TXIFG1 case USCI_I2C_UCRXIFG0: break; // Vector 22: RXIFG0 MASTER 0 case USCI_I2C_UCTXIFG0: P1OUT ^= BIT0; //__delay_cycles(20000); UCB0TXBUF = 0x80; unsigned int c; for(c = 0; c < 32; c++){ P1OUT ^= BIT0; //__bis_SR_register(LPM0_bits + GIE); UCB0TXBUF = Init[c]; //__bis_SR_register(LPM0_bits + GIE); } //UCB0CTL1 |= UCTXSTP; //UCB0IFG &=~ UCTXIFG; break; // Vector 24: TXIFG0 MASTER 0 case USCI_I2C_UCBCNTIFG: // Vector 26: BCNTIFG //P1OUT ^= BIT0; // Toggle LED on P1.0 break; case USCI_I2C_UCCLTOIFG: break; // Vector 28: clock low timeout case USCI_I2C_UCBIT9IFG: break; // Vector 30: 9th bit default: break; } }
Sunny Regards