void USCI_B_I2C_masterInit(uint16_t baseAddress, uint8_t selectClockSource, uint32_t i2cClk, uint32_t dataRate) { USCI_B_I2C_initMasterParam param = {0}; param.selectClockSource = selectClockSource; param.i2cClk = i2cClk; param.dataRate = dataRate; USCI_B_I2C_initMaster(baseAddress, ¶m); }
void msp430_i2c_init(void) { unsigned long _smclk; if (i2c.enabled) return; /**Configure Pins for I2C * Set P3.0 and P3.1 as Secondary Module Function Input. * Select Port 3 * Set Pin 0, 1 to input Secondary Module Function, (UCB0SIMO/UCB0SDA, UCB0SOMI/UCB0SCL). * */ GPIO_setAsPeripheralModuleFunctionInputPin( GPIO_PORT_P3, GPIO_PIN0 + GPIO_PIN1 ); _smclk = msp430_get_smclk_freq(); USCI_B_I2C_initMasterParam param = {0}; param.selectClockSource = USCI_B_I2C_CLOCKSOURCE_SMCLK; param.i2cClk = _smclk; param.dataRate = USCI_B_I2C_SET_DATA_RATE_400KBPS; USCI_B_I2C_initMaster(USCI_B0_BASE, ¶m); //Enable I2C Module to start operations USCI_B_I2C_enable(USCI_B0_BASE); USCI_B_I2C_clearInterrupt(USCI_B0_BASE, USCI_B_I2C_TRANSMIT_INTERRUPT + USCI_B_I2C_RECEIVE_INTERRUPT + USCI_B_I2C_NAK_INTERRUPT ); //Enable master Receive interrupt USCI_B_I2C_enableInterrupt(USCI_B0_BASE, USCI_B_I2C_TRANSMIT_INTERRUPT + USCI_B_I2C_RECEIVE_INTERRUPT + USCI_B_I2C_NAK_INTERRUPT ); /* Initialize struct. */ i2c.state = STATE_WAITING; i2c.slave_reg = 0; i2c.data = 0; i2c.length = 0; i2c.enabled = 1; }