RTC芯片应该是比较简单的,但是我花了很长时间。事无巨细,都需要认真对待!在这里做一个总结。<br />我是在ARM平台上调试精工电子的S35390A这个I2C接口的RTC芯片。<br />该芯片的功能如下:<br />芯片可以工作在1.3--5.5V的电压范围之内,当工作在1.3--3.0V范围时,I2C的最高通信速率为100KHz,当工作在3.0--5.5V时,I2C的最高通信速率为400KHz。<br />支持闰年,报警功能,固定的32KHz输出,以及可设定的16/8/4/2/1Hz方波中断输出,可调的占空比。<br /><br /><br />芯片的通信时序遵循I2C协议,其中需要注意的地方有:<br />1>芯片进行I2C通信时,地址是采用先MSB,后LSB的方式接收的。数据是采用先LSB后MSB的方式接收的,而OMAP730平台的I2C接口地址数据都是以先MSB后LSB的方式发送接收的,所以需要在程序中进行数据的调整。由于我看资料太粗心,这个地方花了我1天多!<br />2>这个芯片的SCL、SDA、INT1、INT2引脚都需要上拉。否则INT1、INT2即使不挂接任何负载,也可能无法实现正常的信号输出。<br />3>芯片的中断方式较多,对INT2,有选择频率稳态中断、分单位边缘中断(占空比50%的和可调的2种)、报警中断共4种。对INT1有32KHz固定输出、选择频率稳态中断、分单位边缘中断(占空比50%的和可调的2种)、报警中断共5种。<br />4>芯片很多寄存器采用BCD码计数方式,不是10进制,对寄存器设置需要注意。<br />5>芯片上电后,INT1引脚有可能输出1Hz的时钟,也有可能没有!不能作为芯片是否正常的标准。<br />6>芯片上电后,应该对它进行复位,芯片有电压监控模块,当电压小于一定数值时,芯片的状态寄存器1的BLD位被置1,即使电压恢复,改位也不会清0,此时若读取到该位为1,则需对芯片进行复位。<br />7>指示报警中断发生的寄存器位,按DATASHEET的说明应该是状态寄存器1的4=INT1、5=INT2位,实际上是2=INT2、3=INT1。<br />8>报警功能以分钟为单位,有以下组合:某时某分中断,需使能小时和分钟寄存器位;某时中断,需只使能小时寄存器位;星期x某时某分,需将星期x、小时和分钟寄存器位全部使能。<br />9>寄存器初始化按地址顺序即可。<br /><br />阿米驼佛,做事一定要细心!呵呵。<br /> |
|