PCF2131 RTC 芯片功能的介绍及实现

关键字 :PCF2131RTC

简介

        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 / 张傲

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论