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

