Cortex-M3 (NXP LPC1788)之IIC控制器
2019-07-12 11:21发布
生成海报
I2C通信协议在上篇文章中进行了介绍,下面对LPC1788的I2C控制器进行分析。要使用I2C模块,需要配置相应的寄存器,如功率、时钟、管脚等。以I2C0为例,配置P0.27和P0.28管脚分别为SDA和SCL功能,在PCONP中使能I2C0功率控制,根据PCLK和要使用的I2C的频率设置SCLH和SCLL。
I2C模块可以工作在主发送、主接收、从发送、从接收四种工作模式。开发板上LPC1788工作在主发送模式时发送数据给总线上的外设。工作在主接收模式时接收总线上的外设数据。
主发送模式的数据格式
操作流程如下:
1,发送一个S起始条件。初始化控制位寄存器,清除STA、STO、SI,然后向I2C控制置位寄存器I2CONSET中置位STA位,一旦总线空闲,I2C逻辑会马上测试I2C总线并产生一起始条件。如果起始条件得到总线应答,中断标志SI会置位,通读取I2C状态寄存器I2STAT的值,如果为0x08表示可以进入发送数据的操作。
2,第一个发送的字节包含接收设备的从机地址和数据方向位。方向位(R/W)设置成0,表示进行些操作,将该字节写入I2C数据寄存器I2CDAT进行发送。发送成功后会产生一个应答,并且SI再次置位,读取I2STAT中的状态,如果是0x18表示得到正确的应答,可以进行数据的传输。写入从机地址后,应该清零起始条件中置位的STA位,并且SI位必须在串行传输继续之前复位。
3,最后进行数据的发送,每个数据发送完成都会有一个应答,且SI置位,如果发送成功读取的STAT的值为0x28。要注意的是在下一次串行传输前必须复位SI。
4,数据发送完成后,发送一个P停止条件。在I2CONSET中置位STO标志,并且清除STA和SI标志。
至此,主发送模式结束。
主接收模式数据格式
操作流程如下:
1,发送一个起始条件S。和主发送模式相同。
2,写第一个字节数据,操作过程和主发送相同,只需将方向位改成读,并且正确的应答标志为0x40。
3,数据接收时需要注意的是,接收的最后一个字节总是非应答,这样主机就可以告诉从机读序列已经完成。如果接收到的应答A,则I2CSTAT的值为0x50。接收到非答,则I2CSTAT的值为0x58,。应答或者非应答,通过设置SI位进行控制。
4,在接收到非应答的状态标志0x58后,发送一个停止条件。
我们可以单独设置主发送和主接收,也可以再主接收或主发送数据传输结束后,选择不发送停止条件P,而是发送重复起始条件,进行主发送和主接收的切换。
主发送切换到主接收的数据格式
操作流程如下:
1,在主发送模式数据传输完成后,不发送停止条件。即上面介绍的主发送模式流程的第4步不执行,而是改成重新发送一个起始标志,置位STA。重复起始发送成功后返回 的状态标志位0x10。
2,切换成功后即可按主接收步骤中的第二步直接开始执行。
LPC1788的主工作模式介绍完,具体的程序在下一篇文章再结合从设备给出代码。
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮