LPC2478的IIC使用

LPC2478带有三个IIC接口,每个IIC都可以工作在主机或者从机模式下,LPC的IIC的架构是一种状态机的形式,在不同的的时间做不同的工作之后有不同的状态来表示,

简单来说,就是发送起始字节之后会有一个状态,接收到ACK之后会有一个状态,软件上根据已知的外设状态来进行下一步操作

具体的状态请查看数据手册,IIC的可用寄存器如下

LPC2478的硬件IIC使用

对应不同的驱动方式,例如I2EN为1+STA为1,代表发送起始位+从机地址

LPC2478的硬件IIC使用

将置位寄存器的数据清零,BIT一一对应

LPC2478的硬件IIC使用

状态机的核心

LPC2478的硬件IIC使用

数据发送缓存

LPC2478的硬件IIC使用

从机地址,最高位读写位硬件自动加上

还有两个寄存器是SCL低电平占空比和高电平占空比,均为50%即可

 

具体代码如下所示

#ifndef __IIC0_H_
#define __IIC0_H_
#include "common.h"
#include "lpc24xx.h"
#include "clock.h"



#define STATUS_SENDSTART        0X08
#define STATUS_REPEATSTART      0X10
#define STATUS_SENDSLAVE_ACK    0X18
#define STATUS_SENDSLAVE_NACK   0X20
#define STATUS_SENDDATA_ACK     0X28
#define STATUS_SENDDATA_NACK    0X30
#define STATUS_LOSS             0X38
#define STATUS_READADDR_NACK    0X48
#define STATUS_READADDR_ACK     0X40
#define STATUS_RECV_ACK         0X50
#define STATUS_RECV_NACK         0X58



void IIC0Init(u32 baud);

u8 IIC0Start(void);

u8 IIC0SendWriteAddr(u8 addr);

u8 IIC0SendData(u8 data);

u8 IIC0SendStop(void);

u8 IIC0SendReadAddr(u8 addr);

u8 IIC0ReadData(u8* value,u8 ack);

u8 IIC0RepeatStart(void);

#endif











相关文章:

  • 2021-05-28
  • 2022-12-23
  • 2021-05-30
  • 2022-12-23
  • 2022-12-23
  • 2021-12-05
  • 2021-10-24
  • 2021-07-26
猜你喜欢
  • 2022-12-23
  • 2021-06-09
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案