1.模塊原理
如圖 ,RTC 由兩個(gè)分頻寄存器 RP0TS,RP1TS 對 RTOSSEL 選擇的時(shí)鐘源進(jìn)行分頻,在日歷模式下,時(shí)鐘源 ACLK=32768,經(jīng)過 RP0TS,RP1TS 分別 256 和 128 分頻率后頻率為 1HZ ,提供給 32 位 RTC 寄存器時(shí)鐘源,通過 RTCSSEL 選擇 11 或者 10。每 1S ,RTCSEC(秒)加一秒,加到 60,秒從 0 開始計(jì)數(shù),RTCMIN 加 1,RTCHOUR,RTCMON ,RTCYEAR ,RTCDOW(星期),RTCDAY等 依次這樣。并且在日歷模式下,RTC 可以設(shè)置為 BCD 碼顯示在存儲(chǔ)器中。另外 RTC 提供鬧鐘功能,我們可以設(shè)置 Alarm 寄存器的 RTCAMIN ,RTCAHOUR,RTCADAY,RTCADOW(星期).另外 RTC 模塊也可以作為 32 位計(jì)數(shù)器使用,其原理方法和 WDT,TA 一致。
2,RTC 內(nèi)部框圖
,
3,寄存器配置
在 F5XX 單片機(jī)硬件 RTC 可以工作在計(jì)數(shù)器模式也可以工作在日歷模式,通過配置寄存器 RTCCTL01 的 RTCMODE 位來實(shí)現(xiàn)對工作模式的選擇,當(dāng)選擇工作在日歷模式的時(shí)候,RT0PS 時(shí)鐘源自動(dòng)選擇 ACLK,TP0PS 分頻系數(shù)自動(dòng)為/256,RT1PS 時(shí)鐘源來自 RT0PS 輸出,RT1PS 分頻系數(shù)自動(dòng)配置為/128,因此配置 ACLK 時(shí)鐘為 32768HZ。
鬧鐘可以配置分鐘,小時(shí),星期,以分鐘為例子時(shí)間設(shè)置完畢后,比如 08:23 分鐘設(shè)置完畢后,將最高位為 AE 設(shè)置為 1,就會(huì)鬧鐘有效果,每個(gè)小時(shí)的第 23 分鐘鬧鐘響。
影響整個(gè) RTC 模塊的時(shí)間的誤差和時(shí)鐘關(guān)系很大,本硬件 RTC 對時(shí)鐘可以進(jìn)行校正,如寄存器。
RTCCALS 為 1,加計(jì)算,每個(gè) LSB 加 4PPM,如果為 0,減計(jì)算,每 LSB 減 2。
RTCCTL3 寄存器中 RTCCALF 配置選擇輸出 512HZ,256HZ,1HZ 其中一個(gè)頻率,然后將 RTCCLK引腳設(shè)置為特殊引腳輸出,用示波器觀察頻率與標(biāo)準(zhǔn)比看相差多少PPM,然后通過寄存器RTCCTL2進(jìn)行校正,例如我選擇的是 512HZ 頻率輸出,觀察最后的示數(shù)為 512.009HZ , 計(jì)算高出 18PPM,因此在校正時(shí)候要減去一個(gè) 18PPM,因此 RTCCTL2 中位 RTCCALS 位為 0,減計(jì)算。每 LSB 減 2,因此在 RTCCAL 中賦予數(shù)值 9。
4,實(shí)驗(yàn)代碼:
#include "msp430x54x.h"
void Init_Rtc(void);
void Init_Clk(void);
void Init_System(void);
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 關(guān)看門狗
Init_System(); // 系統(tǒng)初始化
__bis_SR_register(LPM3_bits + GIE); // 進(jìn)入低功耗 3
}
/************************ RTC 中斷*****************************/
#pragma vector=RTC_VECTOR
__interrupt void basic_timer(void)
{
switch(RTCIV)
{
case 2 : P1OUT ^= BIT0;break; //RTCRDYIFG
case 4 : break;
case 6 : P1OUT |= BIT1;break; //RTCAIFG
case 8 : break;
case 10 : break;
}
}
void Init_System(void)
{
Init_Clk(); //調(diào)用時(shí)鐘函數(shù)
Init_Rtc(); //RTC 初始化
P1DIR |= BIT1 + BIT0; //P1.1 P1.0 為輸出
P1OUT &= ~(BIT1 + BIT0);
}
void Init_Rtc(void)
{ // BCD 碼日歷格式輸出
RTCCTL01 = RTCBCD + RTCHOLD + RTCMODE + RTCTEV_0 ;
RTCPS0CTL = RT0PSHOLD ; //配置兩個(gè)計(jì)數(shù)器分頻
RTCPS1CTL = RT1PSHOLD ;
RTCSEC = 0x54; //初始化秒
RTCMIN = 0X59 ; //初始化分鐘
RTCHOUR =0X21; //初始化小時(shí)
RTCDOW = 0X02 ;
//RTCTIM1 = 0X0421;
RTCDAY = 0x24; //日期初始化
RTCMON = 0X11 ; //初始化月份
RTCYEAR = 0x2005; //初始化年份
RTCAMINHR = 0X0180; //鬧鐘小時(shí)和分鐘設(shè)置
RTCADOWDAY = 0X1203; //鬧鐘星期和日期設(shè)置
RTCCTL01 &= ~RTCHOLD; //打開 RTC 模塊
RTCPS0CTL &= ~RT0PSHOLD; //打開 RTCPS0CTL
RTCPS1CTL &= ~RT1PSHOLD; //打開 RTCPS1CTL
RTCCTL0 |= RTCAIE + RTCRDYIE; //打開安全訪問使能 ,鬧鐘使能
}
void Init_Clk(void)
{
P7SEL |= 0x03; //啟動(dòng) XT1
UCSCTL1 = DCORSEL_2; //DCO 范圍配置
UCSCTL4 = SELM_3 + SELA_0 + SELS_4; //設(shè)置時(shí)鐘源
while (SFRIFG1 & OFIFG) //等待時(shí)鐘系統(tǒng)正常工作
{
UCSCTL7 &= ~( XT1LFOFFG + DCOFFG);
SFRIFG1 &= ~OFIFG;
}
}
5,實(shí)驗(yàn)現(xiàn)象
-
示波器
+關(guān)注
關(guān)注
113文章
6516瀏覽量
188094 -
寄存器
+關(guān)注
關(guān)注
31文章
5414瀏覽量
123211 -
RTC
+關(guān)注
關(guān)注
2文章
605瀏覽量
68248
原文標(biāo)題:暢學(xué)多功能實(shí)驗(yàn)箱 MSP430F5438 RTC 操作實(shí)驗(yàn)
文章出處:【微信號:changxuemcu,微信公眾號:暢學(xué)單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
評論