2.3 PCF8563日历时钟芯片的使用方法
按I2C协议规约,PCF8563具有惟一的设备地址0A2H.本文重点研究PCF8563时、分、秒数据的读取方法,在此用到的内部寄存器包括控制/状态寄存器1(地址为00H)、秒寄存器(地址为02H)、分寄存器(地址为03H)、小时寄存器(地址为04H)。由于寄存器中以BCD格式存储时、分、秒数据,所以各时间时间寄存器的高位无效。
为使PCF8563工作于普通模式,需要将控制/状态寄存器1置为00H,同时为了存储正确的时间数据,需要将读到的数据中无效的高位进行屏蔽。若需要校对时间,只需对时、分、秒寄存器进行写操作即可。
2.4 AT24C08的使用方法
AT24C08是容量为8192 b(1024 B)的E2PROM.AT24C08内部分为4页,每一页有256字节单元,所以若要访问某个单元则需要10位进行寻址,其中最高两位是页地址,低8位是页内地址。设备地址的定义如图2所示,其中P1P0对应页地址,管脚A2可为AT24C08设定两组设备地址。当A2为低电平时,4页的设备地址分别为0A0H,0A2H,0A4H,0A6H;当A2为高电平时;反之为0A8H,0AAH,0ACH,0AEH.因此,为了避免AT24C08与PCF8563的设备地址冲突,需将A2连接高电平。 AT24C08的写操作支持"字节写"和"页面写"两种方式。"字节写"方式中每写一个字节均需主设备提供起始信号、设备地址、内部地址以及停止信号;"页面写"方式即连续写数据,需主设备提供起始标志、设备地址以及内部地址,数据全部写完后再发送停止标志。
AT24C08的读操作支持"当前地址读"、"随机读"和"顺序读"3种方式。"当前地址读"表示从当前内部地址单元读出1个字节,所以主设备仅需提供起始信号、设备地址和停止信号;"随机读"表示从任意内部地址单元读出1个字节,所以主设备需要先提供1次起始信号、设备地址、写操作、设备内部地址和停止信号,设定设备的内部地址,之后再按"当前地址读"方式读数据即可;"顺序读"表示从当前地址开始连续读多个字节,所以主设备需提供起始信号、设备地址、读操作,数据全部读完后再发送停止信号。
为了快速读写数据,本文采用页面写的方式将数据写入AT24C08;采用"随机读"和"顺序读"相结合的方式读取AT24C08数据。
3 软件设计
3.1 TWI初始化程序的设计
根据TWI的功能特点,TWI初始化的初始化包括以下4步:
(1)配置PIO控制器使复用管脚驱动TWI信号;
(2)配置PMC使TWI时钟处于工作状态;
(3)配置TWI为主工作模式。本文CPU为主设备,日历和存储芯片为从设备;
(4)设置数据传输速率,配置TWI时钟波形发生器寄存器。
3.2 PCF8563驱动程序的设计
为了控制PCF8563的工作方式,需要对其写入控制字;为了得到PCF8563输出的时间信息,需要对其进行读操作,读/写数据的流程如图3所示。
本文设计编写如下读函数和写函数: 其中,pTwi是结构体指针,指向的结构体中存放TWI的寄存器,通过pTwi即可访问各TWI寄存器;address表示设备地址;im_address表示设备内部地址;data代表读写数据的变量指针。 |