簡介
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 / 張傲
更多資訊,請掃碼關注我們!
評論