簡介
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 / 張傲
評論