void i2c0_wr_byte(uint8_t da,uint8_t add)
{
LPC_I2C0->I2CONCLR=0x2c;
LPC_I2C0->I2CONSET|=0x60; //使能i2c控制器并发送起始位
while(!(LPC_I2C0->I2STAT==0x08)); //等待发送完起始位
LPC_I2C0->I2DAT=0xa0; //写入24c02从机地址+w位
LPC_I2C0->I2CONCLR|=0x28; //清零起始位和中断标志位
while(!(LPC_I2C0->I2STAT==0x18)); //等待发送完从机地址+w位和接收ack位
LPC_I2C0->I2DAT=add; //写入数据地址到I2DAT
LPC_I2C0->I2CONCLR|=0x08; //清零中断标志位
while(!(LPC_I2C0->I2STAT==0x28)); //等待发送完数据地址和接收ack位
LPC_I2C0->I2DAT=da; //写入数据到I2DAT
LPC_I2C0->I2CONCLR|=0x08; //清零标志位
while(!(LPC_I2C0->I2STAT==0x28)); //等待发送完数据和接收ack位
LPC_I2C0->I2CONSET|=0x10; //发送sto位
}
写一个数据到24c02的函数,i2c速率设定在100k,调试发现程序停在 (while(!(LPC_I2C0->I2STAT==0x18)); //等待发送完从机地址+w位和接收ack位)这里,状态寄存器i2cstat为0xf8,请高手帮忙看看,本人新手,请勿见笑。
此帖出自
小平头技术问答
一周热门 更多>