This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
初始設定Master收到NACK就會產生中斷
但是I2CMasterIntStatusEx(I2C0_BASE, true); 無法讀取到狀態值(但是卻會進入中斷),一直都是0
而且只有第一次NACK會進中斷,再來後面的NACK都無法進入
除非中途有成功通訊一次,即
NACK(進) > NACK(不會進) > NACK(不會進) > ACK > NACK(進) > NACK(不會進) > ACK > NACK(進)...
//=========================================================
void Initial_I2C(void) { memset(&gI2C_CMD, 0, sizeof(I2C_SESSION_INFO)); memset(&gFRU_CMD, 0, sizeof(FRU_SESSION_INFO)); // memset(&gEEPROM_Data, 0, sizeof(I2C_SESSION_INFO)); // test gI2C_CMD.u8SendData [0] = 0xAA; gI2C_CMD.u8SendData [1] = 0xBB; // i2c_0 Master EEPROM ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C0); ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_I2C0); ROM_GPIOPinConfigure(GPIO_PB2_I2C0SCL); ROM_GPIOPinConfigure(GPIO_PB3_I2C0SDA); ROM_GPIOPinTypeI2CSCL(GPIO_PORTB_BASE, GPIO_PIN_2); ROM_GPIOPinTypeI2C(GPIO_PORTB_BASE, GPIO_PIN_3); ROM_I2CMasterInitExpClk(I2C0_BASE, ROM_SysCtlClockGet(), false); // true=400 Kbps, false=100 Kbps HWREG(I2C0_BASE + I2C_O_FIFOCTL) = 80008000; // clear FIFO ROM_I2CMasterIntEnableEx(I2C0_BASE, I2C_MASTER_INT_NACK); ROM_I2CMasterEnable(I2C0_BASE); ROM_IntEnable(INT_I2C0); ROM_IntMasterEnable(); }
//=========================================================
void I2C0_Handler(void)
{
uint32_t int_status;
int_status = ROM_I2CMasterIntStatusEx(I2C0_BASE, true); // 即使進入讀到的也都是0
UART_DebugMSG(int_status, (int_status & I2C_MASTER_INT_NACK));
ROM_I2CMasterIntClearEx(I2C0_BASE ,int_status);
// if(int_status & I2C_MASTER_INT_NACK)
{
if(status_machine == STATUS_I2C)
{gI2C_CMD.i2c_Fail = ERROR_TYPE_I2C_NACK;
ROM_GPIOPinWrite(GPIO_PORTH_BASE, GPIO_PIN_1, GPIO_PIN_1); //LED_2
}
else if(status_machine == STATUS_FRU)
{gFRU_CMD.FRU_Fail = ERROR_TYPE_I2C_NACK;
ROM_GPIOPinWrite(GPIO_PORTH_BASE, GPIO_PIN_0, GPIO_PIN_0); //LED_1
}
}
}