第11章 IIC模块及其应用

上传人:ba****u 文档编号:167772471 上传时间:2022-11-05 格式:DOCX 页数:26 大小:171.58KB
收藏 版权申诉 举报 下载
第11章 IIC模块及其应用_第1页
第1页 / 共26页
第11章 IIC模块及其应用_第2页
第2页 / 共26页
第11章 IIC模块及其应用_第3页
第3页 / 共26页
资源描述:

《第11章 IIC模块及其应用》由会员分享,可在线阅读,更多相关《第11章 IIC模块及其应用(26页珍藏版)》请在装配图网上搜索。

1、*第11章GB60的IIC模块及其应用IIC总线协议是Philips公司提出的用于在IC器件之间两线式连接规范,与SPI类似, IIC也已发展成为一种工业标准。目前,各半导体公司推出了大量的带有IIC接口的芯片, 如RAM、EEPROM、Flash ROM A/D、D/A转换、LED/LCD驱动、I/O接口、实时时钟等。本 章首先介绍7IIC总线及其工作原理,然后讲述7MC9S08GB60的IIC模块的使用方法,并 给出了 GB60和时钟芯片PCF8563通过IIC总线连接的实例。11.1 IIC总线概述IIC(Inter-Integrated Circuit)总线,许多文献写作1牛,本书中统

2、一用IIC,主要用于 同一电路板内各集成电路模块(IC)之间的连接。IIC采用双向2线制串行数据传输方式, 支持任何一种IC制造工艺,简化IC之间的通信连接。IIC是PHILIPS公司于二十世纪 八十年代初提出,其后,PHILIPS和其他厂商提供了种类丰富的IIC兼容芯片。目前, IIC总线标准已经成为世界性的工业标准。1. IIC总线特点回顾SPI,它采用的是数据输入、数据输出、时钟三线,加片选线形式,对于少数 外围器件的扩展极为方便,但当外围器件较多时,就要有相应多的片选线,而且由这种 总线组成的多机系统中只能有一个主机。相比之下IIC总线克服了 SPI的不足。在硬件 结构上,它采用数据(

3、SDA)和时钟(SCL)两根线来完成数据的传输及外围器件的扩展, 任何一个具有IIC总线接口的外围器件,不论其功能差别有多大,都具有相同的电气接 口,因此都可以挂接在总线上,甚至可在总线工作状态下撤除或挂上,使其连接方式变 得十分简单。对各器件的寻址是软寻址方式,因此节点上没有必须的片选线,器件地址 给定完全取决于器件类型与单元结构,这也简化了IIC系统的硬件连接。另外IIC总线 能在总线竞争过程中进行总线控制权的仲裁和时钟同步,并且不会造成数据丢失,因此 由IIC总线连接的多机系统可以是一个多主机系统。IIC主要特点如下。 在硬件上,二线制的IIC串行总线使得各IC只需最简单的连接,而且总线

4、接口 都集成在IC中,不需另加总线接口电路。电路的简化省去了电路板上大量走线,减少 电路板面积,提高了可靠性,降低了成本。在IIC总线上各IC除了个别中断引线外, 相互之间没有其他连线,用户常用的IC基本上与系统电路无关,故极易形成用户自己 的标准化、模块化设计。 IIC总线还支持多主控(multi-mastering),如果两个或更多主机同时初始化数据传 输可以通过冲突检测和仲裁防止数据被破坏。其中任何能够进行发送和接收的设备都可 以成为主机。一个主机能够控制信号的传输和时钟频率。当然,在任何时间点上只能有 一个主机。 串行的8位双向数据传输位速率在标准模式下可达100kbit/s,快速模式

5、下可达 400kbit/s,高速模式下可达3.4Mbit/s。 连接到相同总线的IC数量只受到总线最大电容(400pf)的限制。但如果在总线中 加上82B715总线远程驱动器可以把总线电容扩展十倍,传输距离可增加到15m。2. IIC总线标准的发展历史从飞利浦公司提出IIC总线标准到现在,IIC已经发展了 20几个年头。1992年PHILIPS首次发布IIC总线规范Version1.0并取得专利。1998年PHILIPS发布IIC总线规范Version2.0,至此,标准模式和快速模式的IIC 总线已经获得了广泛应用,标准模式传输速率为100kbits/s,快速模式400kbits/s。同时,

6、IIC总线也由7位寻址发展到10寻址,满足了更大寻址空间的需求。随着数据传输速率和应用功能的迅速增加,2001年PHILIPS又发布了 IIC总线规 范Version2.1,完善和扩展了 IIC总线的功能,并提出了传输速率可达3.4Mbit/s的高速 模式,它使得IIC总线能够支持现有以及将来的高速串行传输应用,例如EEPROM和 Flash存储器等。目前,IIC总线己经被大多数的芯片厂家所采用,比如世界上较为著名的有 ST Microelectronics Texas Instruments、Xicor、Intel、Maxim、Atmel、Analog Devices、Infineon Te

7、chnologies等,IIC总线标准已经属于世界性的工业标准。IIC总线始终和先进技术保 持同步,但仍然保持向下兼容。相信随着技术的进一步成熟,IIC总线将会有更广泛的 应用。3. IIC总线的相关术语本书在介绍IIC总线过程中涉及到以下术语: 主机(主控器):在IIC总线中,提供时钟信号,对总线时序进行控制的器件。主 机负责总线上各个设备信息的传输控制,检测并协调数据的发送和接收。主机对整个数 据传输具有绝对的控制权,其它设备只对主机发送的控制信息作出响应。如果在IIC系 统中只有一个MCU,那么通常由MCU担任主机。 从机(被控器):在IIC系统中,除主机外的其他设备均为从机。主机通过从

8、机地 址访问从机,对应的从机作出响应,与主机通信。从机之间无法通信,任何数据传输都 必须通过主机进行。 地址:每一个IIC器件都有自己的地址,以供自身在从机模式下使用。在标准的 IIC中定义从机地址是7位(扩展IIC允许10位地址)。地址0000000 一般用于发出通用 呼叫或总线广播。 发送器:发送数据到总线的器件。 接收器:从总线接收数据的器件。 SDA(Serial DAta):串行数据线。 SCL(Serial CLock):串行时钟线。11.2 IIC总线工作原理图11-1给出一个由MCU作为主机,通过IIC总线带3个从机的单主机IIC总线系 统。这是最常用、最典型的IIC总线连接方

9、式。图11-1 IIC总线的典型连接物理结构上,IIC系统由一条串行数据线SDA和一条串行时钟线SCL组成。主机 按一定的通信协议向从机寻址和进行信息传输。在数据传输时,由主机初始化一次数据 传输,主机使数据在SDA线上传输的同时还通过SCL线传输时钟。信息传输的对象和 方向以及信息传输的开始和终止均由主机决定。每个器件都有一个唯一的地址,而且可以是单接收的器件(例如:LCD驱动器) 或者可以接收也可以发送的器件(例如:存储器)。发送器或接收器可以在主模式或从 模式下操作,这取决于芯片是否必须启动数据的传输还是仅仅被寻址。1. 总线上数据的有效性图11-2 IIC总线上数据的有效性IIC总线是

10、以串行方式传输数据,从数据字节的最高位开始传送,每一个数据位在 SCL上都有一个时钟脉冲相对应。在时钟线高电平期间数据线上必须保持稳定的逻辑 电平状态,高电平为数据1,低电平为数据0。只有在时钟线为低电平时,才允许数据 线上的电平状态变化,如图11-2所示。2. 总线上的信号IIC总线在传送数据过程中共有四种类型信号,它们分别是:开始信号、停止信号、 重新开始信号和应答信号。开始信号(START)如图11-3所示,当SCL为高电平时,SDA由高电平向低电平 跳变,产生开始信号。当总线空闲的时候,例如,没有主动设备在使用总线(SDA和SCL 都处于高电平),主机通过发送开始(START信号建立通

11、信。停止信号开始信号/重新开始信号图11-3开始、重新开始和停止信号停止信号(STOP):如图11-3所示,当SCL为高电平时,SDA由低电平向高电平跳 变,产生停止信号。主机通过发送停止信号,结束数据通信。重新开始信号(Repeated START):在IIC总线上,由主机发送一个开始信号启动一 次通信后,在首次发送停止信号之前,主机通过发送重新开始信号,可以转换与当前从 机的通信模式,或是切换到与另一个从机通信。如图11-3所示,当SCL为高电平时, SDA由高电平向低电平跳变,产生重新开始信号,它的本质就是一个开始信号。发送器 输出信号接收器 输出信号主机产生的SCL信号开始信号应答时钟

12、周期图11-4 IIC总线的应答信号应答信号(A):接收数据的IC在接收到8位数据后,向发送数据的IC发出的特定 的低电平脉冲。每一个数据字节后面都要跟一位应答信号,表示已收到数据。应答信号 在第9个时钟周期出现,这时发送器必须在这一时钟位上释放数据线,由接收设备拉低 SDA电平来产生应答信号,由接收设备保持SDA的高电平来产生非应答信号(,如图 11-4所示。所以,一个完整的字节数据传输需要9个时钟脉冲。如果从机作为接收方 向主机发送非应答信号,这样,主机方就认为此次数据传输失败;如果是主机作为接收 方,在从机发送器发送完一个字节数据后,发送了非应答信号,从机就认为数据传输结 束,并释放SD

13、A线。不论是以上哪种情况都会终止数据传输,这时,主机或是产生停 止信号释放总线,或是产生重新开始信号,开始一次新的通信。开始信号、重新开始信 号和停止信号都是由主控制器产生,应答信号由接收器产生,总线上带有IIC总线接口 的器件很容易检测到这些信号。3. 总线上数据传输格式一般情况下,一个标准的IIC通信由四部分组成:开始信号、从机地址传输、数据 传输、停止信号。由主机发送一个开始信号,启动一次IIC通信;在主机对从机寻址后,再在总线上 传输数据。IIC总线上传送的每一个字节均为8位,首先发送的数据位为最高位,每传 送一个字节后都必须跟随一个应答位,每次通信的数据字节数是没有限制的;在全部数

14、据传送结束后,由主机发送停止信号,结束通信。开始或重新停止或重新图11-5 IIC总线的数据传输格式图11-5所示,时钟线为低电平时数据传送将停止进行。这种情况可以用于当接收 器接收到一个字节数据后要进行一些其它工作而无法立即接收下一个数据时,迫使总线 进入等待状态,直到接收器准备好接收新数据时,接收器再释放时钟线使数据传送得以 继续正常进行。例如,当接收器接收完主控制器的一个字节数据后,产生中断信号并进 行中断处理,中断处理完毕才能接收下一个字节数据,这时接收器在中断处理时将钳住 SCL为低电平,直到中断处理完毕才释放SCL。4. IIC总线寻址约定为了消除IIC总线系统中主控器与被控器的地

15、址选择线,最大限度地简化总线连接 线,IIC总线采用了独特的寻址约定,规定了开始信号后的第一个字节为寻址字节,用 来寻址被控器件,并规定数据传送方向。在IIC总线系统中,寻址字节由被控器的七位地址位(它占据了 D7-D1位)和一位方 向位(为D0位)组成。方向位为0时表示主控器将数据写入被控器,为1时表示主控器 从被控器读取数据。主控器发送开始信号后,立即发送寻址字节,这时,总线上的所有 器件都将寻址字节中的7位地址与自己器件地址比较。如果两者相同,则该器件认为被 主控器寻址,并发送应答信号,被控器根据读,写位确定自身是作为发送器还是接收器。主器件作为被控器时,其7位从地址在IIC总线地址寄存

16、器中给定,为纯软件地址。 而非单片机类型的外围器件地址完全由器件类型与引脚电平给定。IIC总线系统中,没有两个从机的地址是相同的。主控器不应该传输一个和它本身的从地址相同的地址。5. 主机向从机读写1个字节数据的过程如图11-6所示,主机要向从机写1个字节数据时,主机首先产生START信号,然 后紧跟着发送一个从机地址,这个地址共有7位,紧接着的第8位是数据方向位(R/W), 0表示主机发送数据(写),1表示主机接收数据(读),这时候主机等待从机的应答信号(A), 当主机收到应答信号时,发送要访问的地址,继续等待从机的应答信号,当主机收到应 答信号时,发送1个字节的数据,继续等待从机的应答信号

17、,当主机收到应答信号时, 产生停止信号,结束传送过程。应答信号应答信号应答信号START从机地址0A访问地址A数据ASTOPW主机写的一个字节数据图11-6主机向从机写数据如图11-7所示,主机要从从机读1个字节数据时,主机首先产生START信号,然 后紧跟着发送一个从机地址,注意此时该地址的第8位为0,表明是向从机写命令,这 时候主机等待从机的应答信号(A),当主机收到应答信号时,发送要访问的地址,继续 等待从机的应答信号,当主机收到应答信号后,主机要改变通信模式(主机将由发送变 为接收,从机将由接收变为发送)所以主机发送重新开始信号,然后紧跟着发送一个从 机地址,注意此时该地址的第8位为1

18、,表明将主机设置成接收模式开始读取数据,这 时候主机等待从机的应答信号,当主机收到应答信号时,就可以接收1个字节的数据, 当接收完成后,主机发送非应答信号,表示不在接收数据,主机进而产生停止信号,结 束传送过程。应答信号应答信号应答信号 非应答信号START从机地址0A访问地址A重新开始从机地址1A数据ASTOPWR主机要读的一个字节数据图11-7主机从从机读数据11.3 GB60的 IIC模块的编程基础MC9S08GB60微控制器提供了一个IIC模块用于与其他IC设备通信。与IIC模块 相关的两个引脚SDA和SCL分别与通用I/O 口 C 口的2、3引脚复用。当使能IIC模 块时,这两个引脚

19、上的数据传送方向可以通过相关的模块配置来设置。当禁止IIC模块 后,这两个引脚就作为通用I/O引脚使用。MCU复位后,IIC模块将被禁止。11.3.1 GB60 IIC模块寄存器1. IIC分频寄存器(Frequency Divider Register, IICF)IIC总线波特率是由CPU总线频率分频得来,该分频寄存器IICF就用于产生相应的分频因子。编程时应根据需要和要与MCU通信的从机设备的IIC总线频率范围来确 定具体的波特率值,并设置该分频寄存器。一般IIC总线频率设定在100kbps左右,可 以通过减少IIC总线上的负载,使其总线最大波特率达到CPU总线频率的二十分之一。IICF

20、的地址为$0059。数据位D7D6D5D4D3D2D1D0定义MULTICR复位00000000IIC分频寄存器的高2位MULT定义了增频因子a,a和SCL的分频因子配合使用, 产生IIC波特率。当MULT为00、01、10时,a的值分别为1、2、4; MULT = 11不使用。IIC的低6位定义了 IIC时钟速率(ICR),这6位用来定义SCL分频因子b和SDA 保持值,分频因子b乘增频因子a的值用于产生IIC总线波特率,公式如下:IIC总线波特率=CPU总线频率(Hz) / (a * b)SDA保持时间是从SCL线上时钟的下降沿开始到SDA线上数据稳定这段时间,SDA保持值就是用来计算SD

21、A保持时间的,公式如下:SDA保持时间=CPU总线周期* SDA保持值ICR中不同的内容对应着不同的SCL分频因子值和不同的SDA保持值,具体的对 应关系如表11-1所示。下面举例说明IIC总线波特率和SDA保持时间计算方法:表11-1 SCL分频因子和SDA保持值ICR(Hex)SCL分频因子SDA保持值ICR(Hex)SCL分频因子SDA保持值002072016017012272119217022482222433032682325633042892428849053092532049063410263846507401027480650828728320330932729384330A3

22、692A448650B4092B512650C44112C576970D48112D640970E56132E7681290F68132F960129104893064065115693176865126413328961291372133310241291480173411521931588173512801931610421361536257171282137192025718809381280129199693915361291A112173A17922571B128173B20482571C144253C23043851D160253D25603851E192333E30725131F

23、240333F3840513设CPU总线频率为8MHz,MULT设置为01(a = 2),要想得到100kbps的IIC总线波特率,则计算过程如下: 根据公式:IIC总线波特率=CPU总线频率(Hz) / (a * b),将已知相应值带入得:100000 = 8000000/ (2 *b)b = 40 根据SCL分频因子b的值,在表11-1中查找相应的ICR值和SDA保持值,可 以看到,当b = 40时,ICR = $07或$0B,而相应的SDA保持值=10或9。 根据公式:SDA保持时间=CPU总线周期* SDA保持值,算得:ICR = $07,SDA 保持值=10 时,SDA 保持时间=1

24、 / 8000000 *10 = 1.25usICR = $0B,SDA 保持值=9 时,SDA 保持时间=1 / 8000000 * 9 = 1.125us 较长的SDA保持时间,会降低通信速率,但同时也增加了稳定性,并且能延长 设备间的通信距离。编程时应以通信的可靠性为原则,选择合适的SDA保持时间来确 定ICR值。如程序中选用SDA保持值=10,就能得到可靠的通信,那么将ICR设定 为$07即可;如果当SDA保持值=10时通信不稳,就选择另一个为9的值进行实验, 若通信仍不稳定,在保持IIC总线频率不变的前提下,可通过改变MULT位来调整SDA 保持时间。2. IIC控制寄存器(Cont

25、rol Register, IICC)地址为:0x005A数据位D7D6D5D4D3D2D1D0定义IICENIICIEMSTPTTXTXAK0/RSTA0/不用0/不用复位00000000D7IICEN(IIC Enable),IIC 使能位。IICEN = 1,允许 IIC; IICEN = 0,禁止 IIC。D6IICIE(IIC Interrupt Enable),IIC 中断请求允许位。IICIE = 1,允许 IIC 中断请求;IICIE = 0,禁止IIC中断请求。D5-MST(Master Mode Select),主模式选择位。当该位从0变到1,MCU被确定 为主模式,并在I

26、IC总线上产生开始信号;当该位从1变到0, MCU将在IIC总线上产 生停止信号,操作模式也将从主模式变为从模式。MST = 1,主机模式;MST = 0,从 机模式。D4TX(Transmit Mode Select),发送模式选择位。该位用来选择主机和从机的数 据传送方向。TX = 1,发送模式;TX = 0,接收模式。当MCU在主机模式下,该位可 根据数据传送需求来确定,如果MCU要在总线上发送从机地址寻址从机,那么在整个 地址周期,该位将始终为1。当MCU为从机时,该位将根据状态寄存器的SRW位来 确定。D3TXAK(Transmit Acknowledge Enable),发送应答使

27、能位。TXAK = 1,不发送 应答信号;TXAK=0,在接收完一个字节后发送应答信号。D2RSTA(Repeat START)当MCU在主机模式下,向该位写1,将产生一个重新 开始信号。该位读出时总是0。D1-D0读IICC时,D1、D0位为0;写IICC时,D1、D0位不使用。3. IIC状态寄存器(IIC Status Register, IICS)地址为:0X005B数据位D7D6D5D4D3D2D1D0读TCFIAASBUSYARBL0SRWIICIFRXAK写未定义未定义未定义未定义未定义复位00000000D7一TCF(Transfer Complete Flag),发送完成标志

28、位。一个字节传送完毕后,该位 将被置位。TCF是只读位,在接收模式下,读IIC数据寄存器(IICD),在发送模式下,写 IICD,都可以清除该位。TCF = 1,发送已经完成;TCF = 0,发送中。D6IAAS(Addressed as a Slave),地址被选择标志位。当MCU作为从机,并且它 的地址与IIC总线上由主机发送的寻址地址吻合时,该位被置位。IAAS位可读可写, IAAS = 1,MCU作为从机被主机寻址;IAAS = 0,MCU未被寻址。D5BUSY(Bus Busy),总线忙标志位。该位是只读位,不论MCU作为主机还是 从机,该位都用来标志IIC总线上的状态。当检测到开始

29、信号,该位被置位,标志总线 忙;当检测到停止信号,该位被清零,标志总线空闲。D4ARBL(Arbitration Lost),仲裁丢失标志位。当仲裁处理丢失,该位被硬件置位。 ARBL可读可写,必须通过软件的方法向ARBL写1来清除该位。ARBL = 1,仲裁丢 失;反之正常。D3读IICS时,D3位为0;写IICS时,D3位不使用。D2SRW(Slave Read/Write),从机读写标志位。SRW是只读位,当MCU作为从 机被寻址时,该位被设为主机发送的寻址地址的第8位即主机读/写控制位的值。SRW = 1,表示从机为发送模式,主机从从机读数据;SRW = 0,表示从机为接收模式,主机

30、向从机写数据。D1IICIF(IIC Interrupt Flag),IIC中断标志位。IICIF位可读可写。下列3个事件 之一可以置位IICIF: 一个字节传送完毕、从地址被选中、仲裁丢失。必须通过向IICIF 写1,清除该标志。D0RXAK(Receive Acknowledge),接收应答标志位。该位为只读位。RXAK = 0,表示在IIC总线上传送完一个字节后,接收到了应答信号;RXAK = 1,表示没有检测到应答信号。4. IIC数据输入/输出寄存器(IIC Data I/O Register, IICD)地址为:0X005C数据位D7D6D5D4D3D2D1D0数据数据复位0000

31、0000在主机发送模式下,将数据写入IICD就初始化了数据发送,先发送数据字节的最 高位。在主机接收模式下,读该寄存器,准备接收从机发往总线上的数据字节。该寄存 器在MCU为从机模式时仍具有相同功能。值得注意的是,当MCU要从主接收模式变 为主发送模式时,应在从IICD寄存器读取数据之前,进行模式转换。5. IIC地址寄存器(IIC Address Register, IICA)地址为:0x0058数据位D7D6D5D4D3D2D1D0数据地址0/不用复位00000000IIC地址寄存器的D7D1位存放的是MCU作为从机时的地址。当主机在IIC总线 上发送从机地址寻址从机时,MCU作为从机设备

32、,将该地址与IICA的高7位比较, 查看自己是否被主机选重。读IICA时,D0位为0;写IICA时,D0位不使用。11.3.2 GB60 IIC 模块编程下表给出了 GB60通过IIC总线与从机通信程序的头文件,可以清楚的看到,通信 程序主要由IIC模块初始化子函数,GB60从从机读一个字节、读N个字节数据子函数, GB60向从机写一个字节、写N个字节数据子函数,等5个子函数组成。该头文件主要 是对这5个函数进行声明并包含了 IIC通信程序所需的头文件。/IIC.hIIC通信头文件*说明:本文件与具体的芯片型号有关*/*/头文件#include GB60C.h/GP60 MCU 映像寄存器名定

33、义#include Type.h/类型别名定义/IIC通信函数声明/IIC初始化void IICinit(void):从从机读1个字节数据INT8U IICread1(INT8U DeviceAddr, INT8U AccessAddr, INT8U *Data);从从机读N个字节数据INT8U IICreadN(INT8U DeviceAddr, INT8U AccessAddr, INT8U Data, INT8U N);向从机写1个字节数据INT8U IICwrite1(INT8U DeviceAddr, INT8U AccessAddr, INT8U Data);向从机写N个字节数据I

34、NT8U IICwriteN(INT8U DeviceAddr, INT8U AccessAddr, INT8U Data, INT8U N);1. IIC模块初始化IIC相关寄存器地址宏定义已经在头文件GB60C.h中给出,IICF、IICA、IICC等 寄存器名可以直接使用。对SCI进行初始化,最少由以下三步构成。 设置IIC分频寄存器,定义IIC总线波特率和SDA保持时间。具体的设置方法 已在讲解GB60 IIC分频寄存器时详细介绍过,这里不再敖述。 设置IIC地址寄存器,定义MCU作为从机时的地址。当主机在IIC总线上发送 从机地址寻址从机时,MCU就将该地址与IICA的高7位比较,查

35、看自己是否被主机 选中。MCU在主机模式下是不使用这7位从机地址的。 设置IIC控制寄存器,定义通信模式、允许或禁止IIC模块、允许或禁止IIC中 断以及是否发送应答信号等。2. 接收一个数据与发送一个数据一般情况下,对IIC的初始化只在程序的初始化部分进行一次,IIC通信的基础编 程是接收与发送数据。接收和发送一个字节数据的过程现简述如下,具体时序请参见 IIC总线原理一节。(1)接收一个字节数据: 置IIC控制寄存器的发送模式选择位TX为1,将MCU设为发送模式。 MCU初始化之后被设为从机模式,这时将IIC控制寄存器的主机模式选择位 MST由0变为1,MCU被设为主机模式并由此产生开始信

36、号。 发送与MCU通信的从机地址(发送字节的高7位),并通知从机接收数据(发送字 节的最低位置0)。只需将要发送的字节置于IICD,就初始化了此次发送。接着就等待 这个字节发送完成。发送成功后,还需等待从机的应答信号。 发送要访问的具体的从机中寄存器地址,并等待发送完成,发送成功后,需等待 从机的应答信号。 在改变通信模式之前,要置IIC控制寄存器的RSTA位产生重新开始信号,来为 之做准备。接下来,MCU要由先前的发送数据(包括控制信号和从机地址等)变为接收 数据,从机也要由接收数据变为发送数据。所以此时MCU要发送一个重新开始信号。 发送从机地址字节,此时最低位为1,通知从机准备发送数据。

37、等待该字节发送 完成,等待从机的应答信号。 置IIC控制寄存器的TX位为0,MCU被设置为接收模式。 读IICD,清除该寄存器,准备接收数据。等待从机发送数据完成,从机发完数 据后,MCU将IIC控制寄存器的主机模式选择位MST由1变为0,MCU被设为从机 模式并由此产生停止信号,结束一次数据接收过程。 读IICD寄存器,MCU最终得到从机发来的一个字节数据。(2)发送一个字节数据: 与接收一个字节数据的前四步一致。 将要发送给从机的一个字节数据写入IICD,初始化数据发送。接着就等待数据 发送完成,等待从机的应答信号。收到应答后,表明数据已成功写入从机。 将IIC控制寄存器的主机模式选择位M

38、ST由1变为0,MCU被设为从机模式并 由此产生停止信号,结束一次数据发送过程。3. 接收N个数据与发送N个数据通过循环调用接收一个字节数据函数与发送一个字节数据函数,来分别实现接收与 发送N个字节数据。值得注意的是每一次数据字节的传送之间要有适当的时间间隔。下面给出GB60与从机的IIC通信程序IIC.c。/IIC.cIIC总线通信*/外部函数:*/(1)IICinit:IIC 模块初始化*/(2)IICread1:MCU从从机读1个字节*/(3)IICwrite1:MCU向从机写1个字节*/(4)IICreadN:MCU从从机读N个字节*/(5)IICwriteN:MCU向从机写N个字节*

39、/内部函数:*/(1) SendSignal:在IIC总线上发送起停信号*/(2) Wait:等待应答或一个字节数据的传送完成*/硬件连接:*/MCU的IIC接口与从机的IIC接口相连,GB60的IIC模块的引脚SDA和SCL分别与PTC2*/ 和PTC3引脚复用,这两个引脚应分别与从机的IIC模块的SDA和SCL相连*说明:本文件与具体的芯片型号有关*/*/头文件#include IIC.h”/IICinit:IIC模块初始化*/功能:对IIC模块进行初始化,默认为允许IIC,IIC总线频率:62.5KHz,禁止IIC中*/断,从机接收模式,不发送应答信号*/参数:无*返回:无*/*void

40、 IICinit(void)IICF = 0b00100101:/IIC总线频率:62.5KHz,SDA保持时间:2.45us/IIIIIIIIICR/|MULTIICA = 0xF0;/D7-D1位是MCU作为从机时的地址,最低位不使用IICC = 0b10001000;/IIIIIIII_ 不用/IIIIII/IIIIII RSTA 位/IIIII 不发送应答信号/IIII 接收模式/III 从机模式/II 禁止IIC中断/I 使能IIC模块/SendSignal:在IIC总线上发送起停信号*功 能:根据需要产生开始或停止信号*/参数:Signal = S(Start),产生开始信号;Si

41、gnal = O(Over),产生停止信号 *返回:无*/*void SendSignal(INT8U Signal) if (Signal = S)IICC |= 0x20;主机模式选择位MST由0变为1,可以产生开始信号else if (Signal = O)IICC &= 0x20;主机模式选择位MST由1变为0,可以产生停止信号/Wait:等待应答或一个字节数据的传送完成*功能:在时限内,循环检测接收应答标志位,或传送完成标志位,判断MCU是否接收到应* /答信号或一个字节是否已在总线上传送完毕*/参数:x = A(Ack),等待应答;x = T(Transmission),等待一个字

42、节数据传输完成* 返回:0:收到应答信号或一个字节传送完毕;1:未收到应答信号或一个字节没传送完* /*INT8U Wait(INT8U x) INT8U ErrTime, i;ErrTime = 255;定义查询超时时限for (i = 0;i = ErrTime)return 1;超时,没有收到应答信号或发送完一个字节/IlCreadl:从从机读1个字节数据*功能:从从机读1个字节数据*/参数:*/(1)DeviceAddr:设备地址*/(2)AccessAddr:访问地址*/(3)Data:带回收到的一个字节数据*返回:为0,成功读一个字节;为1,读一个字节失败*/内部调用:SendSi

43、gnal,Wait*/*INT8U IICread1(INT8U DeviceAddr, IICC |= 0x10;SendSignal(S);IICD = DeviceAddr & 0xfe;if (Wait(T)return 1;if (Wait(A)return 1;IICD = AccessAddr;if (Wait(T)return 1;if (Wait(A)return 1;IICC |= 0x04;IICD = DeviceAddr | 0x01;if (Wait(T)return 1;if (Wait(A)return 1;IICC &= 0xef;*Data = IICD;i

44、f (Wait(T)return 1;SendSignal(O);*Data = IICD;return 0;INT8U AccessAddr, INT8U *Data)/TX = 1,MCU设置为发送模式/发送开始信号发送设备地址,并通知从机接收数据/等待一个字节数据传送完成/没有传送成功,读一个字节失败等待从机应答信号没有等到应答信号,读一个字节失败/发送访问地址/等待一个字节数据传送完成/没有传送成功,读一个字节失败/等待从机应答信号/没有等到应答信号,读一个字节失败主机模式下,RSTA位置1,产生重复开始信号通知从机改为发送数据/等待一个字节数据传送完成/没有传送成功,读一个字节失败/

45、等待从机应答信号/没有等到应答信号,读一个字节失败/TX = 0,MCU设置为接收模式读出IICD,准备接收数据/等待一个字节数据传送完成/没有传送成功,读一个字节失败/发送停止信号/读出接收到的一个数据正确接收到一个字节数据/IICwrite1:向从机写1个字节数据*功能:向从机写1个字节数据*/ /参数:*/(1)DeviceAddr:设备地址*/(2)AccessAddr:访问地址*/(3)Data:要发给从机的1个字节数据*返回:为0,成功写一个字节;为1,写一个字节失败*/内部调用:SendSignal, Wait*/*INT8U IICwrite1(INT8U DeviceAddr

46、, INT8U AccessAddr, INT8U Data)IICC |= 0x10;SendSignal(S);IICD = DeviceAddr & 0xfe;if (Wait(T) return 1;if (Wait(A) return 1;IICD = AccessAddr;if (Wait(T) return 1;if (Wait(A) return 1;IICD = Data;if (Wait(T) return 1;if (Wait(A) return 1;SendSignal(O);return 0;/TX = 1,MCU设置为发送模式/发送开始信号发送设备地址,并通知从机接

47、收数据/等待一个字节数据传送完成/没有传送成功,写一个字节失败等待从机应答信号没有等到应答信号,写一个字节失败/发送访问地址/等待一个字节数据传送完成/没有传送成功,写一个字节失败/等待从机应答信号/没有等到应答信号,写一个字节失败/写数据/等待一个字节数据传送完成/没有传送成功,写一个字节失败/等待从机应答信号/没有等到应答信号,写一个字节失败/发送停止信号/IICreadN:从从机读N个字节数据*功能:从从机读N个字节数据*/参数:*/(1)DeviceAddr:设备地址*/(2)AccessAddr:访问地址*/(3)Data:读出数据的缓冲区*/(4)N:从从机读的字节个数*/返回:为

48、0,成功读N个字节;为1,读N个字节失败*/内部调用:IICread1*/*INT8U IICreadN(INT8U DeviceAddr, INT8U AccessAddr, INT8U Data, INT8U N) INT8U i, j;for (i = 0;i N;i+)for(j = 0;j = N)return 0;成功接收N个数据,返回成功标志:0/IICwriteN:向从机写N个字节数据*功能:向从机写N个字节数据*/参数:*/(1)DeviceAddr:设备地址*/(2)AccessAddr:访问地址*/(3)Data :要写入的数据*/(4)写入数据个数*返回:为0,成功写N

49、个字节;为1,写N个字节失败*/内部调用:IICwrite1*/*INT8U IICwriteN(INT8U DeviceAddr, INT8U AccessAddr, INT8U Data, INT8U N)INT8U i, j;for (i = 0;i N;i+)for(j = 0;j = N)return 0;成功发送N个数据,返回成功标志:011.4 IIC应用实例GB6 0与PCF8563时钟芯片通信本节以具有IIC接口的时钟芯片PCF8563为例,阐述M68HC08系列单片机的IIC 接口应用的基本方法,给出硬件设计与软件设计要点,目的是使读者了解IIC接口的实 际应用方法与应用范

50、围。GB60中含有IIC接口模块,因此给出PCF8563在GB60中的 应用实例。11.4.1 PCF8563芯片简介PCF8563是PHILIPS公司推出的一款工业级内含IIC总线接口功能的具有极低功 耗的多功能时钟/日历芯片。PCF8563的多种报警功能、定时器功能、时钟输出功能以 及中断输出功能能完成各种复杂的定时服务甚至可为单片机提供看门狗功能。内部时钟 电路、内部振荡电路、内部低电压检测电路(1.0V)以及两线制IIC总线通讯方式,不但 使外围电路极其简洁,而且也增加了芯片的可靠性。同时每次读写数据后内嵌的字地址 寄存器会自动产生增量。当然作为时钟芯片PCF8563亦解决了 2000

51、年问题。因而 PCF8563是一款性价比极高的时钟芯片,它已被广泛用于电表、水表、气表、电话、 传真机、便携式仪器以及电池供电的仪器仪表等产品领域。图 11-8 8引脚PCF85631. PCF8563芯片特性 低工作电流:典型值为0.25pA(VDD=3.0V, Tamb=25C时)。 电压范围1.0-5.5V ,复位电压标准值 Vlow=0.9V。 开漏中断输出。 400KHz的IIC总线接口(VDD = 1.8 5.5V), IIC总线从地址:读,A3H;写,A2H。 可编程时钟输出频率为:32.768KHz,1024Hz,32Hz,1Hz。 四种报警功能和定时器功能。 内含复位电路、振

52、荡器电容和掉电检测电路。2. PCF8563芯片引脚PCF8563芯片如图11-8所示,PCF8563的SCL为IIC时钟输入端,数据随时钟信 号同步输入器件或从器件输出;SDA为双向引脚,用于串行数据的输入输出;SDA、 SCL为漏极开路必须上拉电阻;OSCI、OSCO分别为晶振接口,可接入32.768kHz的 石英晶振。3. PCF8563功能描述PCF8563内含有一个可自动增量的地址寄存器、一个内置32.768KHz的振荡器(带 有一个内部集成的电容)、一个分频器(用于给实时时钟RTC提供源时钟)、一个可编 程时钟输出、一个定时器、一个报警器、一个掉电检测器和一个400KHz IIC总

53、线接口。PCF8563包含一个片内复位电路,当振荡器停止工作时,复位电路开始工作。在 复位状态下,IIC总线初始化,寄存器TF、VL、TD1、TD0、TESTC、AE被置逻辑1, 其它的寄存器和地址指针被清0。PCF8563内嵌掉电检测器,当VDD低于Vlow时,位VL (Voltage Low,秒寄存器的 位7)被置1,用于指明可能产生不准确的时钟/日历信息,VL标志位只可以用软件 清除。当VDD慢速降低(例如以电池供电)达到Vlow时,标志位VL被设置,这时可 能会产生中断。PCF8563还具有报警、定时器和CLKOUT输出等功能,这些功能的介绍详见 PCF8563芯片手册。4. PCF8

54、563寄存器PCF8563有16个8位寄存器,所有16个寄存器设计成可寻址的8位并行寄存器, 但不是所有位都有用。前两个寄存器(地址为00H,01H)用于控制寄存器和状态寄存 器,地址02H08H用于时钟计数器(秒年计数器),地址09H0CH用于报警寄存 器(定义报警条件),地址0DH控制CLKOUT管脚的输出频率,地址0EH和0FH分 别用于定时器控制寄存器和定时器寄存器。当任意一个时钟计数器被读时,其他计数器的内容被锁存,因此,在传送时间值的过程中,可以防止对时钟/日历芯片的错读。(1)控制/状态寄存器1地址为:00H数据位D7D6D5D4D3D2D1D0数据TEST0STOP0TESTC

55、000D7TEST位:TEST = 0,普通模式;TEST = 1,测试模式。D5STOP位:STOP = 0,芯片时钟运行;STOP = 1,所有芯片分频器异步置逻辑0。芯片时钟停止运行(CLKOUT在32.768kHz时可用)。D3TESTC位:TESTC = 0,电源复位功能失效(普通模式时置逻辑0); TESTC = 1,电源复位功能有效。D6、D2-D0缺省置逻辑0。(2)控制/状态寄存器2地址为:01H数据位D7D6D5D4D3D2D1D0数据000TI/TPAFTFAIETIED4TI/TP位:TI/TP = 0,当TF有效时INT有效(取决于TIE的状态);TI/TP = 1,

56、INT脉冲有效(取决于TIE的状态)。注意:若AF和AIE都有效时,则INT一直有效。D3、D2AF、TF位:当报警发生时AF被置逻辑1;在定时器倒计数结束时,TF 被置逻辑1;它们在被软件重写前一直保持原有值。若定时器和报警中断都请求时,中 断源由AF和TF决定,若要使清除一个标志位而防止另一标志位被重写,应运用逻辑 指令AND。读出时,AF = 0、1分别表示报警标志无效、有效;TF = 0、1分别表示定 时器标志无效、有效。向AF写0可以清除报警标志,写1则该标志保持不变;向TF 写0可以清除定时器标志,写1则该标志保持不变。D1、D0AIE、TIE位:决定一个中断的请求有效或无效。当A

57、F或TF中一个为 1时中断是AIE和TIE都置1时的逻辑或。AIE = 0,报警中断无效;AIE = 1,报警中断有效。TIE = 0,定时器中断无效;TIE = 1,定时器中断有效。D7-D5缺省置逻辑0。(3)其它寄存器如表11-2所示,秒寄存器的第7位,VL(Voltage Low)电压低标志位,当VDD低 于Vlow时被置位,用于指明可能产生不准确的时钟日历信息,VL标志位只可以用软 件清除。月/世纪寄存器的第7位为世纪位C。C = 0,指定世纪数为20XX; C = 1,指 定世纪数为19XX。“XX”为年寄存器中的值。当年寄存器中的值由99变为00时, 世纪位会改变。分钟报警、小时报警、日报警、星期报警寄存器的第位是报警允许位 AE。AE = 0,分别表示分钟报警、小时报警、日报警、星期报警有效;AE = 1,分别 表示分钟报警、小时报警、日报警、星期报警无效。秒、分钟、小时、日、月、年、分 钟报警、小时报警、日报警寄存器编码格式为BCD,星期和星期报警寄存器不以BCD 格式编码。星期寄存器的后3位000、001、010、011、100、101、110分别代表星期日、 星期一、星期二、星期三、星期四、星期五、星期六。CLKOUT频率寄存器的第7位FE是CLKOUT频率输出使能位。FE = 0,CLKOUT 输出被禁

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!