I'm getting a fault at these lines, I don't know what is wrong with it. have I coded the interrupt part wrong ?
NVIC_EnableIRQ(PORTA_IRQn);
NVIC_SetPendingIRQ(PORTA_IRQn);
Below is my complete code,
#include "clock_config.h"
#include "fsl_debug_console.h"
/* TODO: insert other include files here. */
/* TODO: insert other definitions and declarations here. */
#define MMA8451_REG_WHOAMI 0x0D
/* Enable clock for PORTE */
SIM->SCGC5 = (1 << SIM_SCGC5_PORTE_SHIFT);
/* Enable clock for I2C0 */
SIM->SCGC4 = (1 << SIM_SCGC4_I2C0_SHIFT);
/* PORTE24 pin as I2C0_SCL */
PORTE->PCR[24] = (5 << PORT_PCR_MUX_SHIFT) | (1 << PORT_PCR_PS_SHIFT) | (1<<PORT_PCR_PE_SHIFT) | (1<<PORT_PCR_SRE_SHIFT);
/* PORTE25 pin as I2C0_SDA */
PORTE->PCR[25] = (5 << PORT_PCR_MUX_SHIFT) | (1 << PORT_PCR_PS_SHIFT) | (1<<PORT_PCR_PE_SHIFT) | (1<<PORT_PCR_SRE_SHIFT);
/* clear interrupt flag and set pins of port A as gpio*/
PORTA->PCR[14]= (0 | PORT_PCR_ISF_MASK) | (1 << PORT_PCR_MUX_SHIFT) | PORT_PCR_IRQC(0xA);
//NVIC_REG->iser[0] = (1 << 16);
// NVIC_REG->icpr[0] = (1 << 16);
NVIC_EnableIRQ(PORTA_IRQn);
NVIC_SetPendingIRQ(PORTA_IRQn);
/* I2C0 Frequency Divider */
/* I2C0 Enable, Master Mode */
I2C0->C1 = (1 << I2C_C1_IICEN_SHIFT) | (1 << I2C_C1_IICIE_SHIFT);
I2C0->S |= (1 << I2C_S_IICIF_SHIFT);
/* I2C0 Check for Bus Busy */
while(I2C0->S & (1 << I2C_S_BUSY_SHIFT));
data = i2c_read(MMA8451_SA, MMA8451_REG_WHOAMI);
while(I2C0->S & (1 << I2C_S_BUSY_SHIFT));
data = i2c_read(MMA8451_SA, MMA8451_REG_WHOAMI);
data = i2c_read(MMA8451_SA, MMA8451_REG_WHOAMI);
i2c_write(MMA8451_SA, 0x2A, 0x01);
data = i2c_read(MMA8451_SA, 0x2A);
i2c_write(MMA8451_SA, CTRL_REG4, 0x01); // Enable DRDY interrupt
i2c_write(MMA8451_SA, CTRL_REG5, 0x01); // DRDY interrupt routed to INT1
//PORTA->PCR[14]=(0<< PORT_PCR_ISF_SHIFT); // Clear the interrupt flag
data = i2c_read(MMA8451_SA, 0x02);
data = i2c_read(MMA8451_SA, 0x03);
data = i2c_read(MMA8451_SA, 0x04);
data = i2c_read(MMA8451_SA, 0x05);
data = i2c_read(MMA8451_SA, 0x06);
data = i2c_read(MMA8451_SA, 0x07);
printf("XOFF: 0x%04x YOFF: 0x%04x ZOFF: 0x%04x\n", xoff, yoff, zoff);
PORT_ClearPinsInterruptFlags(PORTA, (1 << 12));