高精度时钟芯片SD2001E及其应用
INTxFE=1时,INT1与INT2寄存器被视为是频率事件数据(f0~f15位对应频率为32 768~1Hz),对相应位置“1”,则对应频率以“与”的方式输出。INT1寄存器内容如图4(b)所示。
2.2 非易失数据寄存器
SD2001E内部还具有256Kb的非易失性数据寄存器。该存储器是一种性能优良的可擦写100亿次且无内部写延时的数据存储器,可用于保存系统设置参数及采集的数据。
NVRAM的操作方式如下:首先,CPU发出开始信号给SD2001E,然后CPU发出包括4位控制代码,1位读/写指令的8位数据,即“从器件地址”,前4位称为“SRAM器件代码”,固定为“1010”。接下来的3位在这里固定为“000”,从器件地址的最低位为读写控制位,该位为“1”表示对从器件进行读操作,为“0”表示对从器件进行写操作,接下来就可对SD2001E进行读写操作。写操作可分为单字节写操作和连续写操作。读操作有三种操作方式:立即地址读操作、同地址读操作、连续读操作。其操作过程和操作时序与I2C总线SRAM的读写操作相同,这里不再详述。
3 SD2001E在嵌入式系统中的应用
SD2001E可广泛应用于智能仪器仪表系统、水/电/气表等IC卡应用系统、数据采集系统、工业控制系统、测控系统、门禁系统、家用电器等嵌入式应用领域。利用SD2001E可为系统提供以下功能。
(1)实时时钟日历
SD2001E可为系统提供高精度的时钟及日历功能,以满足具有定时数据采集、输出控制、数据保存及定时报警等功能的嵌入式系统需要,同时也可为系统提供时间及日期显示功能。
(2)数据保存
嵌入式系统一般均需要涉及到系统设置参数及采集数据保存的问题。通常的做法是,通过扩展1片E2PROM芯片来保存设置参数及采集的数据,但E2PROM存在擦写寿命有限及数据存储的可靠性不高等问题;而利用SD2001E片内32KB、擦写数为100亿次的高性能NVRAM,则几乎不用考虑存储器的擦写寿命及数据存储的可靠性问题。因而,SD2001E为需频繁读写数据的应用领域提供了很好的解决方案。
(3)频率输出
对于需要固定频率输出或需要以ms或s为单位的定时应用领域,可以通过设置频率事件数据给INT1寄存器,并置INT1ME位为“0”和INT1FE位为“1”。此时,从INT1引脚将输出频率为32 768Hz~1Hz的固定频率,利用单片机的计数器或中断次数软件计数的方法可得到以ms或s为单位的任意时间输出。
(4)定时输出
当系统需要以分钟为基本单位的定时输出时(如采集周期固定的多路数据采集、巡回检测系统等),可将SD2001E状态寄存器的INT1ME位置为“1”,INT1FE位置为“0”,以选择为每分钟边沿中断输出或将INT1ME、INT1FE位同时置“1”选择为每分钟固定中断输出。通过单片机的计数器或中断次数软件计数的方法,可得到以min为单位的任意时间输出。
(5)定时报警
对于具有定时报警输出要求的系统,可通过SD2001E的INT1寄存器来设置报警时间(小时和分钟数据),并将状态寄存器中的INT1AE位置为“1”、INT1ME位及INT1FE位置为“0”来实现。需要指出的是SD2001E定时报警中断为每天一或二次。对于需要用到长时间定时的报警系统,如每月或每年一次的报警系统,可通过软件编程的方法设定报警中断的时间。
图5 SD2001E与单片机硬件连接
4 具体应用与软件编程
下面以AT89C52单片机为例,给出SD2001E与单片机的典型接口电路。由于AT89C52单片机没有I2C总线接口,故这里使用AT89C52的P3.3、P3.4口线,来模拟I2C总线,其中SDA与P3.4相连,SCL与P3.3相连。SD2001E内部SRAM的I2C总线接口SDAE与SDA并联,SCLE与SCL并联。此外,为了实现定时报警中断输出的功能,还将SD2001E INT1端与单片机的INT0外中断端相连,具体的硬件连接电路如图5所示。网络补充版(http://www.dpj.com.cn)给出与上述硬件电路对应的子程序,包括SD2001E初始化子程序,实时时钟数据读、写子程序与INT1中断输出子程序。程序采用模拟I2C总线软件包编制。
由于SD2001E高精度时钟日历芯片将可充电池、晶振充电电路及256Kb的NVRAM集成在了一起,又采用了简单的I2C总线接口,因而该器件无需扩展任何外围元件就可构成一个功能完善的时钟日历电路,同时又可为系统提供一个容量为32KB的高性能非易失性数据存储单元,故该器件是嵌入式系统时钟电路的良好选择。