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.

TM4C123 I2C MASTER NACK中斷異常

初始設定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	
			}
	}
	
}
x 出现错误。请重试或与管理员联系。