由于KL02Z上面有两个I2C设备,为此,好好学习了一下I2C的编程.
通常要实现I2C,需要10个左右的函数.可用软件模拟及硬件实现. 每个硬件设备的I2C顺序不同.不用企图用一个通用的顺序实现. 下面就是自己总结的I2C可能用到的10个函数.再具体,就得自己一步一步调试咯~ //set pins:enable clock:set baudrate:enable. void Init(void); //set master mode:set transmit mode:send start signal. void Start(void); //resend start signal. void Restart(void); //set slave mode:set receive mode:send stop signal. void Stop(void); //W data to DATA register. void Write(u8); //R data from DATA register. u8 Read(void); ////set the device address:set operation direction:write to I2C. u8 Send7bitAddress(u7 add,u1 dir); //wait for transmit finish:wait for ACK:check RXAK. u8 WaitAck(void); //check the busy state(remembered by MCU). u8 IsBusy(void); //set ACK is included on the following receiving byte. void Ack(void); //set ACK is excluded. void Nack(void); //set Receive or transmit mode. void SetMasterDir(u1); //Start:Send7bitAddress:WaitAck:Stop. u8 Probe(u7 add); //Start:Send7bitAddress:WaitAck:send sub_add:Restart:Send7bitAddress:SetMasterDir:Read:Ack:WaitAck:Stop. u8 ReadArray(u7 add,u32 sub_add,u8 sub_add_len,u8* buf,u32 buf_len); //Start:Send7bitAddress:WaitAck:send sub_add:send data:Stop. u8 WriteArray(u7 add,u32 sub_add,u8 sub_add_len,u8* buf,u32 buf_len); ReadByte(); WriteByte();
|