这样初始化是否有问题,根据官方库来的:
/*
================================================================================
描述 :
输入 :
输出 :
================================================================================
*/
void IICxSlaveIntHandler(void)
{
I2CSlaveIntClear(IICx_BASE);
g_sWorkPort.recv_buff[g_sWorkPort.iRecv++]=I2CSlaveDataGet(IICx_BASE);
if(g_sWorkPort.iRecv>=PORT_BUFF_SIZE)
{
g_sWorkPort.iRecv=0;
}
}
/*
================================================================================
描述 : IIC从模式初始化
输入 :
输出 :
================================================================================
*/
void mcu_port_iic_slave_init(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C8);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
GPIOPinConfigure(GPIO_PD2_I2C8SCL);
GPIOPinConfigure(GPIO_PD3_I2C8SDA);
GPIOPinTypeI2CSCL(GPIO_PORTD_BASE, GPIO_PIN_2);
GPIOPinTypeI2C(GPIO_PORTD_BASE, GPIO_PIN_3);
I2CIntRegister(IICx_BASE, IICxSlaveIntHandler);//接收中断注册
IntEnable(INT_I2C8);
I2CSlaveIntEnableEx(IICx_BASE, I2C_SLAVE_INT_DATA);
I2CMasterInitExpClk(IICx_BASE, 120000000, true);
I2CSlaveEnable(IICx_BASE);
I2CSlaveInit(IICx_BASE, SLAVE_ADDRESS);
// I2CMasterSlaveAddrSet(I2C0_BASE, SLAVE_ADDRESS, false);
// IntMasterEnable();
}
头文件定义:
#define IICx_BASE I2C8_BASE
#define PORT_BUFF_SIZE 200
#define SLAVE_ADDRESS 0x3C
typedef struct
{
u8 recv_buff[PORT_BUFF_SIZE];
u16 iRecv;
}WorkPortStruct;
主机方面也是TM4C129,但是用的是模拟的IIC,根据反馈,从机IIC没有应答,所以想先确定从机的初始化是否有问题。另外,模拟的IIC原来一直有用来驱动eeprom等设备了,应该没问题。 如果主机用硬件IIC,会卡死。