访问电脑版页面

导航:老古开发网手机版其他

P87LPC764位方式I²C总线编程规范

导读:
关键字:
P87LPC764位方式I2C总线编程规范* 华东地质学院陈坚朱旻摘要I2C总线是PHILIPS公司推出的芯片间串行传输总线,且已有不少半导体厂商推出了带有I2C总线接口的单片机。本文介绍一种PHILIPS公司生产的P87LPC764单片机的I2C总线硬件接口和作为I2C总线主控制器的数据传送格式及编程规范。关键词I2C总线P87LPC764单片机数据传送格式编程规范 I2C总线是PHILIPS公司推出的芯片间串行传输总线,它以串行数据线(SDA)和串行时钟线(SCL)2根连线实现了完善的全双工同步数据传送,可以极方便地构成多机系统并进行外围器件扩展。本文介绍一种利用P87LPC764单片机作为I2C总线主控器的编程规范。一、 P87LPC764的I2C硬件接口 P87LPC764是PHILIPS公司生产的一种小封装、低成本、高性能的单片机(有关它的详细介绍见参考文献\[2\])。它采用80C51加速处理器结构,片内带有支持I2C总线的硬件接口。P87LPC764的I2C总线符合标准的I2C总线规范,但是又不同于其他的PHILIPS单片机(如8XC552)有标准字节方式的总线结构。I2C总线工作所需的时钟信号可由P87LPC764自动产生,但数据却是以位的方式发送和接收的。因此它的控制软件较为复杂,但却更为灵活。当激活I2C总线时,P87LPC764端口1中的P1.2与P1.3分别作为SCL和SDA行使I2C总线功能,其I2C总线由3个特殊功能寄存器控制。这3个寄存器为I2C控制寄存器I2CON、配置寄存器I2CFG 和I2C数据寄存器I2DAT。 1. I2CON寄存器 I2CON寄存器各个位的含义在进行读、写操作时完全不同,它们的格式分别为:读I2CON RDAT〖〗ATN〖〗DRDY〖〗ARL〖〗STR〖〗STP〖〗MASTER〖〗—RDAT——数据接收位,在SCL线的上升沿时由SDA线上获取。从I2CON的RDAT中读数据的同时不清除DRDY和不释放SCL线。 ATN——当DRDY、ARL、STR或STP中任意一个为1时,ATN被置1。因此通过测试ATN位可判断是否总线上发生了某类事件。 DRDY——数据准备好标志位。在SCL上升沿时被置位,读写I2DAT寄存器或向CDR写入1时被清0。 ARL——总线仲裁失败标志位。 STR——启动标志位。当检测到启动条件时被置1。 STP——停止标志位。当检测到停止条件时被置1。 MASTER——当本器件成为I2C总线主控器时被置1。写I2CON CXA〖〗IDLE〖〗CDR〖〗CARL〖〗CSTR〖〗CSTP〖〗XSTR〖〗XSTPCXA——向此位写入1,清除数据发送状态。 IDLE——将此位写为1,则被控器要检测到下一个启动位时才接收I2C总线信息。 CDR——向此位写入1,清除DRDY。 CARL——向此位写入1,清除ARL。 CSTR——向此位写入1,清除STR。 CSTP——向此位写入1,清除STP。 XSTR——当装置为主控器时,向XSTR和CDR写入1,可使I2C总线发送重复启动位。 XSTP——当装置为主控器时,向XSTP和CDR写入1,可使I2C总线发送停止位。 2 I2CFG寄存器 I2CFG寄存器的格式如下: SLAVEN〖〗MASTRQ〖〗CLRTI〖〗TIRUN〖〗—〖〗—〖〗CT1〖〗CT0SLAVEN——向此位写1,使本装置成为I2C总线被控器。 MASTRQ——向此位写1,本装置申请成为I2C总线主控器。 CLRTI——向此位写入1,清除定时器I溢出标志。 TIRUN——向此位写入1,定时器I开始运行;写入0,停止定时器I运行并将定时器清0。 CT1,CT0——这两位的值决定SCL线上高低电平的最小时间。 SCL线上高低电平的最小时间(μs)计算公式为:6×最小时间计数÷MCU时钟频率(MHz)。例如当MCU时钟频率为6 MHz时,为了保证SCL线上高低电平的最小时间满足I2C总线时序(不小于4.7μs),最小计数时间应为5。表1给出了对应CT1和CT0不同值的最小时间计数。表1 CT1〖〗CT0〖〗最小计数时间(机器周期)1〖〗0〖〗70〖〗1〖〗60〖〗0〖〗51〖〗1〖〗43 I2DAT寄存器 I2DAT寄存器只有最高位有定义,且读、写时具有不同的含义。读I2DAT RDAT〖〗—〖〗—〖〗—〖〗—〖〗—〖〗—〖〗—RDAT——数据接收位,在SCL线的上升沿时由SDA线上获取。从I2DAT的RDAT中读数据的同时清除DRDY和设置发送激活状态。写I2DAT XDAT〖〗—〖〗—〖〗—〖〗—〖〗—〖〗—〖〗—XDAT——数据发送位,下一个要发送的数据写入此位。写XDAT时将清除DRDY和设置发送激活状态。二、 P87LPC764作为I2C总线主控器 P87LPC76X的I2C总线具有4种工作方式:(1) 主发送——P87LPC764作为I2C总线系统中的主控器向被控器发送数据;(2) 主接收——P87LPC764作为I2C总线系统中的主控器接收被控器发来的数据;(3) 从接收——P87LPC764作为I2C总线系统中的被控器接收主控器发来的数据;(4) 从发送——P87LPC764作为I2C总线系统中的被控器向主控器发送数据。 I2C总线系统中P87LPC764为主器件节点,既可作主控器也可作被控器。在上述4种工作方式中都由主控器发送时钟及起始信号、寻址字节和终止信号。1次数据传送由起始信号开始,由1个终止信号或重复起始信号结束;而1个重复起始信号也是下一次数据传送的开始,但不释放I2C总线。当寄存器I2CON中的ATN位被I2C硬件置位时,如果I2C中断使能,则可产生I2C中断。由于产生I2C中断的状态可能有几十种,因此仅仅靠中断来处理每一种可能的情况是不现实的。当P87LPC764作为主控器时,用查询的方法控制和处理程序的流向和数据是非常方便的。本文仅介绍P87LPC764作为主控器时的数据传送格式及相应的编程规范。 1 数据传送格式 (1) 主发送工作方式主发送工作方式是指P87LPC764作为主控器向被控器发送数据的传送过程。在这一方式中,串行时钟由主控器发出,主控器在发送起始信号后接着发送寻址字节(写)SLAW。此时若接收到应答位A,则表明已寻址到被控器;然后开始发送数据,每发送完1个字节的数据应接收1个相应的应答位A;若发送完最后1个字节数据且接收到相应的应答位后,则可发送1个停止位P或重复起始位Sr来结束本次传送。这种发送的方法只是单纯地向被控器发送数据。有些带I2C总线的外围器件像串行E2PROM芯片24C02、时钟芯片PCF8583等,必须要主控器在发送完寻址字节后接着发送1个被控器内的写入地址,因此对于这类芯片,主控器发送的第1个数据字节实际上是被控器写入地址,这种发送的方法是发送数据到被控器内指定地址中。 P87LPC764要进入主工作方式必须按以下要求设置好I2CFG寄存器: · 按表1设置CT1和CT0位,以选择合适的时钟速率; · 置位TIRUN使定时器I运行,必要时可先置位CLRTI,清除定时器I溢出标志; · 置位MASTRQ,请求成为主控器。设置好后,I2C总线的仲裁逻辑不断测试I2C总线状态,当总线空闲时产生起始信号。此时I2CON寄存器中的ATN、MASTER和STR位均会被置位,表明主控权申请成功,必须清除此时的STR位,释放SCL才可继续传送以下数据。清除STR后,再从高位至低位逐位传送被控器寻址字节SLAW(写)。写完后I2C总线状态为发送状态且DRDY为1,此时必须切换为接收状态且清除DRDY释放SCL线才可接收被控器发回的应答位。接收到应答位后则表明已寻址到被控器,然后发送数据,每发送1个字节数据都要接收1个被控器应答位。按规定发完最后1个数据且收到最后1个应答位或接收到1个非应答位后,发送停止位。在实际的传送过程中,由于被控器有可能正处于一种忙的状态,例如24C02正在写入上次接收到的数据,因此当主控器发完被控器寻址字节后,有可能接收不到被控器应答位,此时主控器可先发送停止位后重新发送。(2) 主接收工作方式主接收工作方式是指P87LPC764作为主控器从被控器接收数据的过程。根据被读数据在被控器中的地址,有两种读取方式。第一种方式是单纯地读被控器中的数据。在这种方式中,首先主控器发送起始位和被控器寻址字节(读)SLAR,收到被控器应答后即开始接收被控器发来的数据,主控器每接收到1个字节数据且若要继续接收,则发送1个应答位;若接收完毕则发送1个非应答位,最后发送停止位结束。第二种方式是读被控器中指定地址的数据。例如可以用这种方法读取像串行时钟芯片PCF8583、E2PROM芯片24C02等这样的芯片中的数据。在这种方式中,主控器在发送起始信号后接着发送寻址字节(写)SLAW,收到被控器应答位后,主控器又发送要被读取的数据在被控器中的地址,收到应答位后,由主控器发送1个重复起始位,再发送被控器寻址字节(读)SLAR,收到被控器应答后结束主发送工作方式,且同时开始以主接收方式工作,接收被控器传来的数据。主控器每接收完1个字节后,若要继续接收,则必须向被控器发送1个应答位;若按规定接收完最后1个字节数据,则必须向被控器发送1个非应答位,然后再发送1个停止位结束。发送重复起始位可以结束本次数据交换,但不释放总线,常用于需要改变数据方向时。发送重复起始位的方法为将I2CON寄存器中的XSTR和CDR位同时置位即可,发送完毕后的状态与请求主控权成功后一样,即MASTER、ATN和STR位均为1。发送SLAR的方法与发送SLAW相同,当接收到被控器应答寻址字节(读)后的状态为接收状态且ATN、DRDY位均为1,此时可从高位至低位逐位从I2DAT中读入1个字节的前7位数据,第8位从I2CON中读出。这样读出后的状态为接收状态且ATN和DRDY位均为1,主控器再从I2DAT中将应答位发出,发出后的状态为发送状态且ATN和DRDY位均为1。如此反复接收N-1个字节数据,当最后1个字节接收完毕且发出1个非应答位后,发送停止位结束。 2 主控器编程规范下面给出P87LPC764在1个I2C单主系统中作为主控器时的编程规范。单主控器系统的软件设计比多主控器系统简单些,因为软件设计者不用涉及主控器和被控器的变换,也不用处理总线仲裁失败问题。由于P87LPC764是总线上惟一的主控器且总线上所有的数据传送都是由它来发动的,因此没有必要使用中断来检测总线上的起始信号;而对于总线状态可以通过循环检测ATN标志来监视。可以肯定这种循环检测ATN标志所占用的时间是非常短的;而如果使用中断来检测总线的各个状态的话,效率将会是非常低的。 P87LPC764是以位的方式进行数据发送和接收的,以下是对每一位操作的详细说明。(1) 请求主控权并发送起始位:将I2CFG中MASTRQ位置位,即请求成为主控器,同时将TIRUN位置位,并设置SCL信号脉冲最小时间间隔CT1和CT0。将MASTRQ置位后,若总线不忙,则主控器申请成功且产生1个起始条件,并将MASTER和STR位置位。此时需将STR位清除才可传送第1位,否则SCL线将不会出现上升沿。(2) 起始位后发送寻址字节的第1数据位:发送1位数据的方法为当SCL线为低时将数据送至SDA线上,再使SCL产生1个高电平脉冲。此时总线状态为ATN和STR位为1,因此SCL线被封锁,不会出现上升沿。若此时DRDY为0,则在清除STR之前,应先将第1位发出,即先将第1位数据写入I2DAT中,再清除STR位。这样可保证在SCL线上升沿到来之前,将第1位正确地送到SDA线上。(3) 发送其他数据位:此时总线状态为ATN和DRDY位为1,因此SCL线被封锁,不会出现上升沿,只需直接将数据写入I2DAT即可。可通过检测DRDY判断是否发送完毕。写I2DAT有三重含义: a. 将数据位送到SDA线上; b. 清除DRDY,允许SCL出现上升沿; c. 激活发送状态,因此,在接收被控器应答位完毕后(总线状态为接收状态且DRDY为1),若要继续发送下一字节数据,其第1位数据也可用此命令发送。(4) 接收应答位:此时总线状态为ATN和DRDY位为1,因此SCL线被封锁,不会出现上升沿,且总线状态为发送状态。因此,首先应设置CXA为1,清除发送状态。其次应设置CDR为1,释放SCL线,允许SCL出现上升沿。当DRDY为1后,应用I2CON中RDAT位将应答位读入。最好不从I2DAT中读入应答位,因为这样会将DRDY清除,在SCL线上升沿来到之前,可能没有足够的时间去准备下一位的发送。(5) 发送停止位:主控器若想结束本次数据交换,则应发送1个停止位。若没有更多的数据需要交换,在发送停止位之前,应首先清除MASTRQ放弃主控权,再将CDR和XSTP设置为1发停止位。(6) 发送重复起始位:在主控器状态下,将I2CON中的XSTR和CDR位设置为1,即可发送重复起始位。在1次数据传输过程中需要改变数据的传输方向时,起始信号和寻址字节都会重复1次,但2次读写方向正好相反。例如,在接收被控器数据中,在发出被控器中被寻址的地址字节之后(此时总线状态为接收被控器应答位完毕之后的接收状态,且DRDY为1),在发出读被控器数据的命令之前,发送重复起始位。发送完毕之后,STR位将被置1。(7) 接收数据位:接收1位的方法是在接收状态下确保SCL线能够产生1个上升沿,再从SDA线上读取数据,即待检测到DRDY位为1后,再从I2DAT中或I2CON中的RDAT位读取数据。按接收1位数据之前的状态看可能有3种: a. 被控器应答位后,接收下一字节的第1位。即主控器接收完发送被控器寻址字节后,被控器发回的应答,此时总线状态为接收状态且DRDY为1。因此要接收此位,只需清除DRDY即可,有两种方法可用:一是设置CDR为1;二是从I2DAT读入一无用数据位确保SCL线能够产生1个上升沿。等到DRDY为1后,可从I2DAT中或I2CON中的RDAT位读取数据。 b. 接收1个字节的后7位。此时总线状态为接收状态,且DRDY为0。因此只需检测到DRDY为1,即可从I2DAT中或I2CON中的RDAT位读取数据。 c. 主控器发送应答位完毕后,接收下一字节的第1位。此时总线状态为发送状态,且DRDY为1。因此有两种方法可用:一是同时设置CDR和CXA(清除发送状态)为1;二是从I2DAT读入一无用数据位。等到DRDY为1后,再从I2DAT中或I2CON中的RDAT位读取数据。从I2DAT中读取数据位也有三重含义: a. 将取SDA线上的数据位; b. 除DRDY,允许SCL出现上升沿; c. 清除发送状态,因此,在主控器发送应答位完毕后(总线状态为发送状态且DRDY为1),要继续接收下一字节数据。可从I2DAT中读取一无用数据位,确保SCL线能够产生1个上升沿,作为接收下一字节的开始。按接收一位数据之后的状态可分为二种: a. 从I2DAT中读取数据,读完之后,DRDY为0,可接着读取下一位; b. 从I2CON中读取数据,读完之后,DRDY为1,此时有充裕的时间去准备下一位的发送或接收。建议1个字节的前7位从I2DAT中读出,顺便将DRDY位清除,以便接收下一位。1个字节的第8位从I2CON中读出,此时DRDY为1,再将数据写入I2DAT中,发出应答或非应答位。 (8) 发送应答位:接收完1个字节后,应发送1个应答位(0),通知发送器可继续接收下一位,此时的状态为接收状态,且DRDY为1,因此可将应答位(0)直接写入I2DAT发送。发送完毕后的状态为发送状态,且DRDY为1。 (9) 发送非应答位:接收完前一个字节后,若不想继续接收,应发送1个非应答位通知发送器,此时的状态为接收状态,且DRDY为1,因此可将应答位(1)直接写入I2DAT发送。发送完毕后的状态为发送状态,且DRDY为1。MES 参考文献 1何立民.I2C应用系统设计.北京:北京航空航天大学出版社 2周立功,岳宪臣,王建国.P87LPC76x OTP单片机使用指南. 3Using the 87LPC76x microcontroller as an I2C bus master.PHILIPS Semiconductors,2000(1)
来源:单片机与嵌入式系统应用   作者:华东地质学院 陈坚 朱旻  2006/2/12 0:00:00
栏目: [ ]

相关阅读

安森美推出新的高功率图腾柱PFC控制器,满足具挑战的能效标准

动态功耗低至60μA/MHz!助力设备超长续航,首选国民技术低功耗MCU!