本人使用的单片机是MKE04Z128,想用IIC模块与EEPROM进行数据传输,但是在向MST置1从而产生开始信号时,查看IIC控制寄存器值时,发现MST始终为0,用示波器抓SCL和SDA信号时,始终没有信号,麻烦各位大神找找原因,程序初始化如下:
void I2C_Init(void)
{
SIM_SCGC |= SIM_SCGC_I2C1_MASK;
I2C1_C1 = 0x00;
SIM_PINSEL1 &= (uint32_t)~(uint32_t)0x400u;
//I2C1_FLT = (I2C_FLT_STOPF_MASK | I2C_FLT_STARTF_MASK | I2C_FLT_FLT(0x00));
I2C1_A1 = 0x00; //(7-1) AD[7:1], 从机地址
I2C1_F = (I2C_F_MULT(0x02) | I2C_F_ICR(0x03)); //(7-6) MULT[1:0],I2C增频因子, 00mul=01,01mul=02,10mul=04
//(5-0) ICR[5:1],I2C时钟速率
//I2C1_F =0x00;
I2C1_S1 = I2C_S_IICIF_MASK | I2C_S_ARBL_MASK; //清除TCF、ARBL、I2CIF标志位 【1001 0010】 ?
//(7) TCF,发送完成标志 R
//(6) IAAS,地址被选择标志位 R/W
//(5) BUSY,总线忙标志 R
//(4) ARBL,仲裁丢失标志位 R/W
//(2) SRW,从机读写标志位 R
//(1) I2CIF,I2C中断标志位 R/W
//(0) RXAK,接收应答标识 R
I2C1_C1 = 0x80; //(7) I2CEN,I2C使能位【1000 0000】
//(6) I2CIE,中断使能位
//(5) MST,主机/从机模式选择位 0-从机,1-主机
//(4) TX,接收/发送模式选择位 0-接收,1-发送
//(3) TXAK,发送应答使能位
//(2) RSTA,重新开始
asm ("NOP"); //防止I2C1D被优化
asm ("NOP");
asm ("NOP");
}
void I2C_Start(void)
{
I2C1_S1 |= I2C_S_IICIF_MASK; // 清除中断标志
I2C1_C1 |= I2C_C1_TX_MASK; // TX = 1,传输模式为发送模式
I2C1_C1 &= (uint32_t)~(uint32_t)I2C_C1_TXAK_MASK; // TXAK = 0,接收完一个字节后发送应答到总线
I2C1_C1 &= (uint32_t)~(uint32_t)I2C_C1_MST_MASK;
asm ("NOP");
asm ("NOP");
asm ("NOP");
asm ("NOP");
I2C1_C1 |= I2C_C1_MST_MASK; //MST:0->1,产生开始信号,且设定为主机模式
asm ("NOP");
asm ("NOP");
asm ("NOP");
asm ("NOP");
asm ("NOP");
} |