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