int I2C_write(unsigned char SLAVE_ADDRESS,unsigned char reg_addr,unsigned char data)
{
unsigned char datasend;
datasend=data;
I2CMasterSlaveAddrSet(I2C1_BASE, SLAVE_ADDRESS, false);//false代表主模块发送,从模块接收。true代表主模块从从模块读取。
// I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_START);//发送开始指令
I2CMasterDataPut(I2C1_BASE,reg_addr);//将发送的地址放入数据存储器中
// 主模块开始发送数据
I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_START);//发送开始指令
// I2CMasterDataPut(I2C1_BASE,reg_addr);//将发送的地址放入数据存储器中
I2CMasterDataPut(I2C1_BASE,datasend);//将要发送的数据放入存储器中
I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_SINGLE_SEND);
//while(!(I2CSlaveStatus(I2C1_BASE) & I2C_SLAVE_ACT_RREQ))
// {
// }
while((I2CMasterBusy(I2C1_BASE) ))
{
}
I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_STOP);
/* */
//I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_STOP);//数据发送结束后,发送结束指令
}
int I2C_read(unsigned char SLAVE_ADDRESS,unsigned char reg_addr)
{
unsigned char datarecieve;
// datarecieve=data;
// I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_START);
I2CMasterSlaveAddrSet(I2C1_BASE, SLAVE_ADDRESS, false);
I2CMasterDataPut(I2C1_BASE,reg_addr);
I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_START);
I2CMasterSlaveAddrSet(I2C1_BASE, SLAVE_ADDRESS,true);//true 代表主机接收
I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_RECEIVE_CONT);
// while(!(I2CSlaveStatus(I2C1_BASE) & I2C_SLAVE_ACT_TREQ))
// {
// }
datarecieve=I2CMasterDataGet(I2C1_BASE);
// UARTprintf(" Sending: '%c' . . . ", data[i]);//读取从主机接收到的字节
return 0;
}
shuang di:
麻烦大家帮我看一下哪里出问题了
xyz549040622:
回复 shuang di:
不是有官方的例程吗,照着官方的配置就是没问题的。大部分都是初始化的问题。