Hi Antscran, yes I have cross checked the address (0x68). I will use a lower value resistor for pulling the SDA and SCL lines. Unfortunately, I don't have access to a scope. But please find the attached code. I am using the Driver library for MSP432.
Code:
#include "driverlib.h"
#include "i2c.h"
#include <stdint.h>
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#define SLAVE_ADDRESS 0x68
#define NUM_OF_REC_BYTES 14
const uint8_t TXData[16] = {0x6B,0x00,0x3B,0x3C,0x3D,0x3E,0x3F,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48};
static uint8_t RXData[NUM_OF_REC_BYTES];
static volatile bool stopSent;
unsigned int ctr=0;
const eUSCI_I2C_MasterConfig i2cConfig =
{
EUSCI_B_I2C_CLOCKSOURCE_SMCLK, // SMCLK Clock Source
3000000, // SMCLK = 3MHz
EUSCI_B_I2C_SET_DATA_RATE_100KBPS, // Desired I2C Clock of 100khz
0, // No byte counter threshold
EUSCI_B_I2C_NO_AUTO_STOP // No Autostop
};
int main(void)
{
MAP_WDT_A_holdTimer();
MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P1,
GPIO_PIN6 + GPIO_PIN7, GPIO_PRIMARY_MODULE_FUNCTION);
stopSent = false;
memset(RXData, 0x00, NUM_OF_REC_BYTES);
/* Initializing I2C Master to SMCLK at 100kbs with no autostop */
MAP_I2C_initMaster(EUSCI_B0_MODULE, &i2cConfig);
/* Specify slave address */
MAP_I2C_setSlaveAddress(EUSCI_B0_MODULE, SLAVE_ADDRESS);
/* Set Master in transmit mode */
MAP_I2C_setMode(EUSCI_B0_MODULE, EUSCI_B_I2C_TRANSMIT_MODE);
/* Enable I2C Module to start operations */
MAP_I2C_enableModule(EUSCI_B0_MODULE);
//Enable master Receive interrupt
MAP_I2C_enableInterrupt(EUSCI_B0_MODULE, EUSCI_B_I2C_TRANSMIT_INTERRUPT0);
MAP_Interrupt_enableInterrupt(INT_EUSCIB0);
MAP_Interrupt_enableMaster();
while (MAP_I2C_masterIsStopSent(EUSCI_B0_MODULE) == EUSCI_B_I2C_SENDING_STOP);
while (I2C_isBusBusy(EUSCI_B0_MODULE)==EUSCI_B_I2C_BUS_BUSY);
MAP_I2C_masterSendMultiByteStart(EUSCI_B0_MODULE, TXData[0]);
while (I2C_isBusBusy(EUSCI_B0_MODULE)==EUSCI_B_I2C_BUS_BUSY);
MAP_I2C_masterSendMultiByteFinish(EUSCI_B0_MODULE, TXData[1]);
ctr=2;
while (1)
{
MAP_I2C_masterSendMultiByteStart(EUSCI_B0_MODULE, TXData[ctr]);
MAP_I2C_enableInterrupt(EUSCI_B0_MODULE, EUSCI_B_I2C_TRANSMIT_INTERRUPT0);
while(!stopSent);
ctr++;
if (ctr==16)
{
ctr = 2;
}
stopSent = false;
}
}
void euscib0_isr(void)
{
uint_fast16_t status;
status = MAP_I2C_getEnabledInterruptStatus(EUSCI_B0_MODULE);
MAP_I2C_clearInterruptFlag(EUSCI_B0_MODULE, status);
if (status & EUSCI_B_I2C_TRANSMIT_INTERRUPT0)
{
printf("sent\r\n");
MAP_I2C_disableInterrupt(EUSCI_B0_MODULE, EUSCI_B_I2C_TRANSMIT_INTERRUPT0);
MAP_I2C_setMode(EUSCI_B0_MODULE, EUSCI_B_I2C_RECEIVE_MODE);
MAP_I2C_masterReceiveStart(EUSCI_B0_MODULE);
MAP_I2C_enableInterrupt(EUSCI_B0_MODULE, EUSCI_B_I2C_RECEIVE_INTERRUPT0);
}
if (status & EUSCI_B_I2C_RECEIVE_INTERRUPT0)
{
int i=ctr-2;
RXData[i] = MAP_I2C_masterReceiveMultiByteNext(EUSCI_B0_MODULE);
printf("%d\r\n",RXData[i]);
RXData[i] = MAP_I2C_masterReceiveMultiByteFinish(EUSCI_B0_MODULE);
MAP_I2C_disableInterrupt(EUSCI_B0_MODULE, EUSCI_B_I2C_RECEIVE_INTERRUPT0);
MAP_I2C_setMode(EUSCI_B0_MODULE, EUSCI_B_I2C_TRANSMIT_MODE);
stopSent = true;
}
}
Your help is much appreciated. Thank you.