Quantcast
Viewing all articles
Browse latest Browse all 63778

Forum Post: I2C EEPROM write MSP430f6779 problem

Hello all, I am trying to write several bytes in MSP430f6779 here is my code, I have made an aray of 9 bytes and I'm trying to send I2C EEPROM. Program works perfectly for first time but My coontroller is not going into its ISR when I press reset and start my code again. #include #include void UCS_config(); void write2_eeprom(); void I2C_TX_CONFIG(); uint8_t i=0; unsigned char TXData[9]= {0x00, 0x11, 0xAA, 0xBB, 0xCC, 0x55, 0x77, 0x88, 0x99}; unsigned char TXByteCtr=9; void main(void) { WDTCTL = WDTPW | WDTHOLD; // Stop WDT UCS_config(); I2C_TX_CONFIG(); UCB0IE |= UCTXIE0; // I2C TX, start condition while(1) { while(UCB0CTLW0 & UCTXSTP) ; UCB0CTLW0 |= UCTXSTT | UCTR; // I2C TX, start condition __bis_SR_register(GIE); } } void UCS_config(void) { PMMCTL0_H = 0xA5; PMMCTL0_L = 0x03; UCSCTL3 = 0x0000; UCSCTL4 = UCSCTL4 & 0X0000; UCSCTL4 = UCSCTL4 | 0X0043; __bis_SR_register(SCG0); UCSCTL0 = UCSCTL0 | 0x1F00; UCSCTL1 = UCSCTL1 & 0x0000; UCSCTL1 = UCSCTL1 | 0x0050; //0040 UCSCTL2 = UCSCTL2 & 0x0000 ; // FLL Divider UCSCTL2 = UCSCTL2 | 0x403C; //0x303F; // for 32 MHz MCLK and 2.0 MHz SMCLK __bic_SR_register(SCG0); __delay_cycles(250000); do { UCSCTL7 &= ~(XT2OFFG | XT1LFOFFG | DCOFFG); SFRIFG1 &= ~OFIFG; }while(SFRIFG1 & OFIFG); } // void I2C_TX_CONFIG() { P2SEL0 |= BIT5 | BIT6; // Set P2.5,P2.6 to UCB0SCL, UCB0SDA UCB0CTLW0 |= UCSWRST; // Enable SW reset UCB0CTLW0 |= UCMODE_3 | UCSSEL_2 |UCMSTB0; // | UCTR; // I2C Master, synchronous mode UCB0BRW_L = 5; // fSCL = SMCLK/12 = ~100kHz UCB0BRW_H = 0; UCB0I2CSA = 0x0050; // Slave Address is 048h UCB0CTLW0 &= ~UCSWRST; // Clear SW reset, resume operation } void write2_eeprom() { UCB0TXBUF = TXData[i]; // Load TX buffer i++; if (i == TXByteCtr) { UCB0CTLW0 |= UCSWRST; UCB0CTLW0 |= UCTXSTP; // | UCTR; // I2C TX, start condition UCB0CTLW0 &= ~UCSWRST; UCB0IE &= ~UCTXIE0; // CLEAR tx interrupt i=0; } } //------------------------------------------------------------------------------- // The USCI_B0 data ISR is used to move received data from the I2C slave // to the MSP430 memory. It is structured such that it can be used to receive // any 2+ number of bytes by pre-loading RXByteCtr with the byte count. //------------------------------------------------------------------------------- #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__) #pragma vector = USCI_B0_VECTOR __interrupt void USCI_B0_ISR(void) #elif defined(__GNUC__) void __attribute__ ((interrupt(USCI_B0_VECTOR))) USCI_B0_ISR (void) #else #error Compiler not supported! #endif { switch (__even_in_range(UCB0IV, 30)) { case USCI_NONE: break; // No interrupts case USCI_I2C_UCALIFG: break; // ALIFG case USCI_I2C_UCNACKIFG: break; // NACKIFG case USCI_I2C_UCSTTIFG: break; // STTIFG case USCI_I2C_UCSTPIFG: //UCB0CTLW0 |=UCTXSTP; break; // STPIFG case USCI_I2C_UCRXIFG3: break; // RXIFG3 case USCI_I2C_UCTXIFG3: break; // TXIFG3 case USCI_I2C_UCRXIFG2: break; // RXIFG2 case USCI_I2C_UCTXIFG2: break; // TXIFG2 case USCI_I2C_UCRXIFG1: break; // RXIFG1 case USCI_I2C_UCTXIFG1: break; // TXIFG1 case USCI_I2C_UCRXIFG0: // RXIFG0 //read_data_frm_eeprom(); //read_over = 1; break; case USCI_I2C_UCTXIFG0: write2_eeprom(); break; // TXIFG0 case USCI_I2C_UCBCNTIFG: break; // CNTIFG case USCI_I2C_UCCLTOIFG: break; // LTOIFG case USCI_I2C_UCBIT9IFG: break; // BIT9IFG default: break; } } Thanks in advance Abhishek Parikh

Viewing all articles
Browse latest Browse all 63778

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>