简介
PCF2131 是一款具有集成温度补偿晶体振荡器(TCXO)和 32.768 kHz 石英晶体的 CMOS 实时时钟(RTC)芯片。PCF2131 具有可选择的 I2C 总线或 SPI 总线。本文主要对PCF2131 RTC 芯片寄存器进行介绍。世平集团基于 FlagChips FC7300 BMS 方案 BMU 板的 PCF2131 RTC 芯片,被用于设置准确性地时间日期,提供闹钟、提供可编程看门狗、提供时间戳等功能。
在本文中举例,通过配置时间戳中断寄存器和中断掩码寄存器 INT_B_MASK2,实现时间戳在中断引脚B上产生中断,即在中断引脚B的中断处理函数中打印“TS1 INT is ok”。
1.寄存器介绍
1.1 控制寄存器
- Control_1 寄存器
- EXT_TEST:RTC 运行模式位
- TC_DIS:温度自动补偿位
- STOP:RTC 时钟位
- 100TH_S_DIS:1/100 秒位
- POR_OVRD:上电复位覆盖位
- 12_24:时间格式位
- MI:分钟中断位
- SI:秒中断位
- Control_2 寄存器
- MSF:秒和分钟中断标志位
- WDTF:看门狗标志位
- AF:闹钟标志位
- AIE:闹钟中断标志位
- Control_3 寄存器
- PWRMNG[2:0]:控制电池切换、电池电量不足检测和额外电源故障检测功能位
- BTSE:电池切换时,时间戳标志位
- BLF:电池电量低标志位
- BIE:电池电量切换中断标志位
- BLIE:电池电量低中断标志位
- Control_4 寄存器
- TSF1-TSF2:时间戳标志位
- Control_5 寄存器
- TSIE1-TSIE4:时间戳中断标志位
1.2 软件复位寄存器
- CPR:清除预分频位
- SR:软件复位位
- CTS:清除时间戳位
1.3 时间日期寄存器
- 100 th_Seconds 寄存器:以 BCD 码的格式设置 1/100 秒,范围 0-99
- Seconds 寄存器
- OSF:保持时钟完整性
- SECONDS:以 BCD 码的格式设置秒,范围 0-59
- Minutes 寄存器:以 BCD 码的格式设置分钟,范围 0-59
- Hours 寄存器
- 12 小时格式下
- AMPM 位:上午、下午格式
- HOURS 位:以 BCD 码的格式设置小时,范围 1-12
- 24 小时格式下
- HOURS 位:以 BCD 码的格式设置小时,范围 0-24
- 12 小时格式下
- Days 寄存器:以 BCD 码的格式设置天,范围 1-31
- Weekdays 寄存器:以 BCD 码的格式设置天,范围 0-6
- Months 寄存器:以 BCD 码的格式设置月,范围 1-12
- Years 寄存器:以 BCD 码的格式设置年,范围 0-99
1.4 闹钟寄存器
- Second_alarm 寄存器
- SECONDS:以 BCD 码的格式设置秒,范围 0-59
- Minutes_alarm 寄存器:以 BCD 码的格式设置分钟,范围 0-59
- Hours_alarm 寄存器
- 12 小时格式下
- AMPM 位:上午、下午格式
- HOURS 位:以 BCD 码的格式设置小时,范围 1-12
- 24 小时格式下
-
- HOURS 位:以 BCD 码的格式设置小时,范围 0-24
- Days_alarm 寄存器:以 BCD 码的格式设置天,范围 1-31
- Weekdays_alarm 寄存器:以 BCD 码的格式设置天,范围 0-6
- 12 小时格式下
1.5 CLKOUT_Ctl 寄存器
- TCR[1:0]:温度测量周期
- OTPR 位:OTP 刷新位
- COF[2:0]:CLKOUT 频率选择,如下如所示:
1.6 时间戳寄存器
PCF2131 RTC 芯片共有 4 个时间戳寄存器,由于 4 个时间戳寄存器除了地址不同外,其余都相同,所以在这只介绍一个即可。
- Timestp_ctl1
- TSM 位
- TSOFF 位
- SUBSEC_TIMESTP[4:0]:当 100TH_S_DIS = '1' 时,以 BCD 格式编码的时间戳信息为 1/16 秒。当 100TH_S_DIS = '0' 时,以 BCD 格式编码的时间戳信息为 1/20 秒。
- Sec_timestp1 寄存器
- SECONDS:以 BCD 码的格式设置秒,范围 0-59
- Min_timestp1 寄存器:以 BCD 码的格式设置分钟,范围 0-59
- Hour_timestp1 寄存器
- 12 小时格式下
- AMPM 位:上午、下午格式
- HOURS 位:以 BCD 码的格式设置小时,范围 1-12
- 24 小时格式下
- HOURS 位:以 BCD 码的格式设置小时,范围 0-24
- Day_timestp1 寄存器:以 BCD 码的格式设置天,范围 1-31
- Mon_timestp1 寄存器:以 BCD 码的格式设置天,范围 1-12
- Year_timestp1 寄存器:以 BCD 码的格式设置天,范围 0-99
- 12 小时格式下
1.7 中断掩码寄存器
中断掩码寄存器 A 和 B,一个是配置引脚 A 中断,另一个是配置引脚 B 中断,两者中断源一样。所以在此只介绍引脚 A 中断掩码寄存器。
- INT_A_MASK1
- MIA:分钟中断掩码位
- SIA:秒中断掩码位
- WD_CDA:看门狗中掩码断
- AIEA:闹钟中断掩码位
- BIEA:电池切换中断掩码位
- BLIEA:电池电量低中断掩码位
- INT_A_MASK2
- TSIEA1-TSIEA4:时间戳 1-时间戳 4 中断掩码位
1.8 看门狗寄存器
- Watchdg_tim_ctl
- WD_CD 位:看门狗定时器位
- TI_TP 位:秒或分钟中断时,产生信号位
- TF[1:0] 位:看门狗计时器时钟位
- Watchdg_tim_ctl
- WATCHDG_TIM_VAL[7:0]
- VAL 值最小为 2
- VAL 值最大值为 255
2.寄存器的配置
2.1 时间戳中断寄存器的配置
图1,Control_4、Control_5寄存器图
如图 1 所示,为Control_4、Control_5 寄存器图。时间戳中断的配置,是通过将 Control_4 的 TSF1 位,置 0,将 Control_5 的 TSIE1 位,置 1,实现的。Control_4 的 TSF1 位,置0,是通过将 TS1 引脚的电平实现。将 Control_5 的 TSIE1 位置 1,是通过程序 Set_INT_Flag_Type (TS1_Flag) 函数实现。
2.2 中断掩码寄存器 INT_B_MASK2 配置
图2,中断掩码寄存器图
如图 2 所示,为中断掩码寄存器图。配置时间戳在中断引脚 B 上产生中断,即把中断掩码寄存器 INT_B_MASK2 的 TSIE1B 位置 0,通过程序 Set_INT(INTB,Turn_ON,TSF1) 函数实现。
2.3 硬件介绍
图3,FC7300 BMS 方案 BMU 板
图4,FC7300 BMS方案 BMU 原理图
如图 4 为 PCF2131 RTC 原理图。IFS 引脚接 VSS,所以通讯方式为 SPI。TS1 为输入引脚,可由 MCU 控置输出高低电平。
2.4程序分析
2.4.1 main.c 程序
主函数:配置 UART 初始化配置。配置 SPI 初始化配置。配置时间戳中断,初始化时间戳 TS1 引脚为高电平,当为低电平是启用时间戳。延迟 4s。配置中断引脚 B 产生引脚中断,配置为下降沿触发,配置中断处理函数。配置时间戳 TS1 引脚为低电平,即启用时间戳。
int_main(viod) { BSP_PORT_Init(); //UART引脚初始化 BSP_FCUART_Init(); // UART 初始化配置 PCF2131_SPI_int(500000); // SPI 初始化配置,波特率为 500KHZ INTB_GPIO_Int(); //中断引脚B初始化配置,设置成下降沿 TS1_GPIO_Int(); //时间戳引脚 TS1 初始化配置,电平配置为高电平 Set_INT_Flag_Type (TS1_Flag); //使能时间戳中断 Systc_Delay_ms(4000); //延迟 4s Set_INT(INTB,Turn_ON,TSF1); //使能时间戳在中断引脚 B 上的中断 GPIO_Toggle(PORT_B, PORT_PIN_4); //将时间戳引脚 TS1电平设置为低电平,启用时间戳 While(1) { } } |
函数 INTB_GPIO_Int:中断引脚 B 初始化配置,使能下降沿触发中断,配置中断处理函数。
void INTB_GPIO_Intt(void) { PORT_InitType tInitStruct = {0}; PORT_InterruptType tIntStruct = {0};
tInitStruct.u32PortPins = PORT_PIN_14; tInitStruct.uPortPinMux.u32PortPinMode = PORTA_14_GPIO; tInitStruct.ePortGpioDir = PORT_GPIO_IN; // tInitStruct.bPullEn = 1; // tInitStruct.ePullSel=PORT_PULL_UP; PORT_InitPins(PORT_A, &tInitStruct);
tIntStruct.u32PortPins = PORT_PIN_14; tIntStruct.ePortIsrMode = PORT_IRQ_FALLING; // 下降沿触发 tIntStruct.pIsrNotify = EVB_INTB_IRQ_PROCESS; //中断处理函数 PORT_InitInterrupt(PORT_A, &tIntStruct); IntMgr_EnableInterrupt(PORTA_IRQn); IntMgr_SetPriority(PORTA_IRQn,2); } |
函数 Set_INT_Flag_Type:设置时间戳中断。
void Set_INT_Flag_Type(Set_Flg_Type Flg_Type ) { uint8_t Txbuff[2]={0}; uint8_t Rxbuff[2]={0}; Txbuff[0]=0x80 |Control_5_Adrress; PCF2131_SPI_TX_RX(Txbuff,1,Rxbuff,1); Txbuff[0]=0x7F&Control_5_Adrress; Txbuff[1]=SET_BIT(Rxbuff[0],7); PCF2131_SPI_TX_RX(Txbuff,2,Rxbuff,0); } |
3.实现
3.1 示波器中断引脚 B 波形抓取
从图5 所示,系统开始运行到中断产生用时 4s。
图5,示波器抓取中断引脚 B 上的波形
3.2 串口助手打印
如图6 所示,从系统开始运行到时间戳在中断引脚 B 上产生中断用时 4s。
图6,中断引脚 B 中断处理函数打印图
4.总结
本文主要对 PCF2131 RTC 芯片寄存器的介绍及实现。通过举例配置时间戳中断寄存器和中断掩码寄存器 INT_B_MASK2,实现时间戳从系统开始运行,经历 4s 的时间,进入中断引脚 B 的中断处理函数中打印“TS1 INT is ok”。如有问题欢迎在下方评论区留言或者发邮件到 atu.sh@wpi-group.com。
5.参考文献
(1) PCF2131 data sheet Rev. 1.1
(2) FC7300 BMS 方案 BMU 原理图
欢迎在博文下方留言评论,我们会及时回复您的问题。
如有更多需求,欢迎联系大联大世平集团 ATU 部门:atu.sh@wpi-group.com 作者:Jim Zhang / 张傲
更多资讯,请扫码关注我们!
评论