I2C串行芯片X1288及其在电子电能表中的应用
实际上,数字和模拟结合起来的微调范围可高达+146ppm。BL中的BP2~BP0位是块保护位,这些位可用来决定对E2 PROM阵列中8个保护段的某些具体段提供写保护(参见表3所列);WD1、WD0用来设置看门狗时限。
表3 块保护位与E2PROM阵列保护区
INT是中断控制和频率输出寄存器,其中AL1E和AL0E是报警中断信号(IRQ)的输出使能位,这两位分别结合SR中的AL1和AL0,可用来指示报警是否发生;IM是脉冲中断方式控制位,当报警条件匹配时,IRQ将输出一个单次脉冲,若IM设为“1”,则脉冲输出是周期性的;FO1和FO0是频率输出控制位,主要用于选择内部振荡器的三种分频输出之一并在PHZ端输出。
3.4 报警寄存器
X1288有两个报警寄存器,地址分别在0000h~0007h和0008h~000Fh,通过这两个报警寄存器可设置两个报警时间。报警寄存器的内容与RTC很类似,不同之处在于其最高位被设置为使能位,而取消了HR中的12/24时制控制位。使能位规定了哪些寄存器可用来与实时时钟寄存器作比较。通过设置EMOn位并结合其它使能位和特定的报警时间,用户可以建立在每年的同一时间(精确到秒)触发一次报警。用户可以通过轮询AL0和AL1软标志来确定一次报警的发生,或者使能IRQ输出作为一个硬件报警标志。当所有的使能位都被设置成“0”时,整个系统无报警。
4 I2C总线数据传送方式
X1288在应用时一般作为从器件通过串行I2C总线来实现与主控制器的通信。其中,SDA用来接收、发送数据;SCL用于接收产生的同步脉冲,当SCL为低时,SDA上的数据发生变化,为高时表明可以接收SDA上的数据。
I2C总线在SCL为高且SDA线上出现一个下降沿时启动;而在SCL为高且SDA线上出现一个上升沿时停止。启动和停止信号都由主控器产生,这样,总线上带有I2C接口的器件就能很容易地检测到这些信号。但对于不具备这种接口的单片机来说,为了能够准确地检测到这些信号,必须保证在总线的一个时钟周期内对SDA线至少进行两次采样。
I2C总线上的应答信号是用于表明数据传输成功的信号。当发送的设备发送了启动位和8位数据之后,在第9个SCL有效时,接收设备将使SDA为低以产生有效的应答信号,该信号可用来说明数据已成功接收。当接收设备发送了表明数据已成功接收的应答信号之后,发送设备可选择继续发送数据或发送停止位以结束发送,如发送设备没有收到接收设备的应答信号,则说明发送失败,此时应重发。
一般情况下,I2C总线上可同时接多个设备,每个器件都有唯一的地址。X1288有两个从设备地址(从地址的高4位):其中1010为访问E2PROM阵列;1101为访问CCR。从地址的3~1位为器件的选择位,它们规定为111,最低位R/W用于定义此操作是读或写。I2C总线上传送的每一个字节为8位,而启动一次I2C总线后传输的字节数可以是一个,也可以是多个。每传送一个字节后,都必须跟随一个应答位,并且先发送的数据位为最高位。在全部数据传送结束后主控制器发送终止信号。X1288有两种写操作方式,分别为单字节写或页面写。图4所示是对X1288完成一个字节的写操作时序,由图可见,写操作共由四个字节组成,其中包括一个从地址字节、一个要访问的地址字(2字节)、一个字节的操作数。采用页面写时,它将以和单字节写操作相同的方式启动,但在第一个字节传送之后不结束写周期,主机可发送多于63个字节到存储器阵列和多于7个字节到CCR。X1288有三种基本的读操作方式:当前地址读、随机读和序列读。