简介
PCF2131 是一款具有集成温度补偿晶体振荡器(TCXO)和 32.768 kHz 石英晶体的 CMOS 实时时钟(RTC)芯片。PCF2131 具有可选择的 I2C 总线或 SPI 总线。本文主要参考PCF2131 芯片的框图,对其主要功能进行了介绍。世平集团基于 FlagChips FC7300 BMS 方案 BMU 板的 PCF2131 RTC 芯片,被用于设置准确性地时间日期,提供闹钟、提供可编程看门狗、提供时间戳等功能。
在本文中举例说明,实现了对 PCF2131 RTC 芯片进行时间日期的设置和读取,并通过串口助手打印出设置的时间日期。
1、 框图介绍
图 1,PCF2131框图
如图 1 所示,PCF2131 RTC 芯片主要有 SPI、中断引脚 A/B、控制、时间日期配置、闹钟、时间戳、中断引脚 A/B 掩码、看门狗功等功能模块组成。如下对其各模块进行介绍:
1.1 SPI模块
与MCU通迅,具有独立的数据输入和输出,最大速率为 6.5 Mbit/s。
1.2 中断引脚 A\B 模块
在引脚 A 或 B 上,输出一个频率为 1HZ 的 PWM 信号
1.3 控制模块
对芯片进行写入配置或读取命令的操作,来实现芯片相应功能的配置或相应状态的读取。
1.4 时间日期配置模块
以 BCD 格式配置 100th、秒、分钟、小时、天、星期、月、年相应的寄存器,从而使 PCF2131 RTC 芯片从配置的时间日期开始计时。
1.5 闹钟模块
通过写入闹钟寄存器相应的 BCD 格式值配置闹钟功能。
1.6 时间戳模块
通过写入时间戳寄存器相应的 BCD 格式值可配置时间戳功能。
1.7 中断引脚 A\B 掩码模块
① 配置芯片的中断方式:分钟中断、秒中断、看门狗中断、闹钟中断、电池切换中断、电池电量低中断。
②写入寄存器命令来选择中断引脚:A 或 B 引脚。
2、 特性
- 提供闰年修正 时间戳功能提供年、月、日、星期、小时、分钟、秒和 1/100 秒
- 闰年的自动修正
- 有 4 个时间戳功能
- 提供可编程的看门狗
- SPI 通讯速率最大 5 Mbit/s
- 自动递增的地址寄存器,内置的地址寄存器将在每次读取或写一个数据字节后自动递增,直到寄存器 36 h。寄存器 36h 后,自动递增将绕到 00h 地址,如下图所示:
- 高精度的计时功能,并有良好的低功耗功能
3.时间日期的设置、读取、打印
3.1 时间日期的设置、读取、打印流程:
- 时间日期的设置,通过 PCF2131_Set_Time() 函数实现。
- 设置秒中断,通过 SET_MI_SI_Intertuput(Set_SI,Pulse_Signal ) 函数实现。
- 设置秒中断在中断引脚 A 上产生中断,通过 Set_INT(INTA,Turn_ON,SI ) 函数实现。
- 读取时间日期并打印,通过在中断引脚 A 的中断处理函数 EVB_INTA_IRQ_PROCESS() 里,调用 PCF2131_Get_Time() 和 UART 打印函数实现。
3.2 硬件介绍
图 2,FC7300 BMS 方案 BMU 板
图3,FC7300 BMS方案 BMU原理图
如图 3 所示,为 RTC 硬件电路。IFS 引脚接 VSS,所以 PCF2131 芯片选择 SPI 通讯。
3.3程序解析
3.3.1 main.c程序
主函数:初始化 UART 配置,初始化 SPI 配置。设置时间日期为:2023 年 11 月 1 日,星期一,6 时 6 分 6 秒。初始化中断引脚 A,设置其在下降沿时产生一个频率为 1HZ 的脉冲信号,配置中断处理函数,读取时间日期函数在中断引脚 A 的中断处理函数中进行读取。
int main(void) { BSP_PORT_Init(); //UART 引脚初始化 BSP_FCUART_Init(); //UART配置初始化 PCF2131_SPI_int(500000); //配置SPI波特率为500KHZ INTA_GPIO_Int(); //初始化中断引脚 A,设置下降沿产中中断,并进入中断处理函数,读取时间日期 PCF2131_Set_Time(); //设置时间为2023年11月1日,星期一,6时6分6秒 SET_MI_SI_Intertuput(Set_SI,Pulse_Signal); //设置秒中断,设置中断引脚产生脉冲信号 Set_INT(INTA,Turn_ON,SI ); //设置中断引脚A 产生一个频率为1HZ的脉冲信号 While(1) { } } |
函数 EVB_INTA_IRQ_PROCESS:中断引脚 A 中断处理函数,读取时间日期。
void EVB_INTA_IRQ_PROCESS(void) { PCF2131_Get_Time(); } |
函数 PCF2131_Set_Time :① 设置 STOP 位为 1 ② 清除 CPR 预分频 ③ 设置时间日期为 2023 年 11 月 1 日,星期 1, 6 时 6 分 6 秒 ④ 清除 STOP 位为 0。
void PCF2131_Set_Time(void) { /*set stop bit to 1*/ Set_Clear_Control1_STOP_Bit_Type(Set_STOP); /* Clear_CPR */ SET_SoftRest_Type(SET_SoftRest_CPR); Set_date_time(T_ALL); /*clear stop bit */ Set_Clear_Control1_STOP_Bit_Type(Clear_STOP); } |
函数 SET_MI_SI_Interrupu:设置秒中断、设置中断产生波形为脉冲波。
void SET_MI_SI_Interruput(Crl1_MI_SI_Type MI_SI_Type,WD_Signal_Type Signal_Type) { /* SET SI to 1 */ Set_Control1_MI_SI_Type(MI_SI_Type); /* SET a pulsed signal,TI_P=0: a permanent active signal, TI_P=1: a pulsed signal */ // set TI_P=1: a pulsed signal // Set_WD(WD_CD_Disable,Signal_Type,WD_64_HZ); } |
函数 Set_INT:设置中断引脚 A 上产生秒中断。
void Set_INT(INT_PIN_Type PIN_Type,INT_ON_OFF_Type ON_OFF_Type,INT_Type Interrupt_Type ) { uint8_t Txbuff[2]={0}; uint8_t Rxbuff[1]={0}; uint8_t Red_Txbuff_A[2]={0}; uint8_t Red_Rxbuff_A[1]={0}; uint8_t Interrupt_Type_Bit_n[10]={5,4,3,2,1,0,3,2,1,0}; //MI:Bit5,SI:Bit4,WD:Bit3,AF:Bit2,BF:Bit1,BLF:Bit0 //TSF1:Bit3,TSF2:Bit2,TSF3:Bit1,TSF4:Bit0 Red_Txbuff_A[0]=0x80|INT_A_MASK1_Adrress; Txbuff[0]=0x7F& INT_A_MASK1_Adrress; //0x31 INT_A_MASK1 Register address PCF2131_SPI_TX_RX(Red_Txbuff_A,1,Red_Rxbuff_A,1); Txbuff[1]=CLEAR_BIT(Red_Rxbuff_A[0],Interrupt_Type_Bit_n[Interrupt_Type]);//INT_A_ON_Buff[Interrupt_Type]; PCF2131_SPI_TX_RX(Txbuff,2,Rxbuff,0); } |
4、 实现
4.1 示波器抓取中断引脚 A 波形
如图 4 所示,中断引脚 A 输出 1HZ 脉冲波形,即 1S 读一次时间日期。
图 4,中断引脚 A 输出 1HZ 脉冲波形
4.2 串口助手打印出读取时间日期
如图 5 所示,为串口助手打印出读取时间日期结果为,2023 年 11 月 1 日,星期 1, 6 时 6 分 6 秒。
图 5,串口打印出读取的时间日期
5、 总结
综上所述,本文主要介绍了 PCF2131 RTC 芯片的时间日期设置、闹钟、时间戳、看门狗等功能。通过举例设置时间日期为,2023 年 11 月 1 日,星期一,6 时 6 分 6 秒,设置中断引脚 A 产生秒中断,并把读取时间日期的函数放在中断引脚 A 的中断处理函数里,从而实现 1 秒读取一次时间日期并用串口打印出。以上是对 PCF2131 RTC 芯片功能的介绍及实现。如有问题欢迎在下方评论区留言或者发邮件到 atu.sh@wpi-group.com。
6、参考文献
(1) PCF2131 data sheet Rev. 1.1
(2) FC7300 BMS 方案BMU 原理图
欢迎在博文下方留言评论,我们会及时回复您的问题。如有更多需求,欢迎联系大联大世平集团 ATU 部门:atu.sh@wpi-group.com
作者:Jim Zhang / 张傲
评论