一、RTC
RTC(Real-Time Clock) 實時時鐘。
RTC是集成電路,通常稱為時鐘芯片。在一個嵌入式系統(tǒng)中,通常采用RTC來提供可靠的系統(tǒng)時間,包括時分秒和年月日等,而且要求在系統(tǒng)處于關(guān)機狀態(tài)下它也能正常工作(通常采用后備電池供電)。它的外圍也不需要太多的輔助電路,典型的就是只需要一個高精度的32.768kHz 晶體和電阻電容等,并且具有鬧鐘的功能。。
二、Exynos 4412 RTC
本篇主要以Cortex-A9 soc為例講解RTC的使用方法。
1. 特性
實時時鐘(RTC)單元可以通過備用電池供電,因此,即使系統(tǒng)電源關(guān)閉,它也可以繼續(xù)工作。RTC可以通過STRB/LDRB 指令將8位BCD碼數(shù)據(jù)送至CPU。這些BCD數(shù)據(jù)包括秒、分、時、日期、星期、月和年。RTC單元通過一個外部的32.768kHz 晶振提供時鐘。RTC具有定時報警的功能。
其功能說明如下:
1 – 時鐘數(shù)據(jù)采用BCD編碼。
2 – 能夠?qū)﹂c年的年月日進行自動處理。
3 – 具有告警功能,當(dāng)系統(tǒng)處于關(guān)機狀態(tài)時,能產(chǎn)生警告中斷。
4 – 具有獨立的電源輸入。
5 – 提供毫秒級時鐘中斷,該中斷可以用于作為嵌入式操作系統(tǒng)的內(nèi)核時鐘。
2. RTC Block
RTC在Linux中主要實現(xiàn)兩種功能,分別是系統(tǒng)掉電后的時間日期維持和時間日期報警(類似定時器)。
1)時間日期維持功能:
主要是由RTC實時時鐘控制寄存器RTCCON進行功能的使能控制,由節(jié)拍時間計數(shù)寄存器TICNT來產(chǎn)生節(jié)拍時間中斷來實現(xiàn)實時操作系統(tǒng)功能相關(guān)的時間和實時同步。其中對時間日期的操作實際上是對BCD碼操作,而BCD碼則是由一系列的寄存器組成(BCD秒寄存器BCDSEC、BCD分寄存器BCDMIN、BCD小時寄存器BCDHOUR、BCD日期寄存器BCDDATE、BCD日寄存器BCDDAY、BCD月寄存器BCDMON、BCD年寄存器BCDYEAR)。
2)報警功能:
主要由RTC報警控制寄存器RTC ALM進行功能使能控制,并產(chǎn)生報警中斷。報警時間日期的設(shè)置也是對一系列的寄存器進行操作(報警秒數(shù)據(jù)寄存器ALMSEC、報警分鐘數(shù)據(jù)寄存器ALMMIN、報警小時數(shù)據(jù)寄存器ALMHOUR、報警日期數(shù)據(jù)寄存器ALMDATE、報警月數(shù)據(jù)寄存器ALMMON、報警年數(shù)據(jù)寄存器ALMYEAR)。
3)閏年發(fā)生器
可以根據(jù)BCDDAY、BCDMON和BCDEEAR的值自動計算閏年。
3. 備用電池
備用電池可以驅(qū)動RTC邏輯。備用電池通過RTCVDD引腳向RTC塊,即使系統(tǒng)電源關(guān)閉。如果系統(tǒng)關(guān)閉,您應(yīng)該阻止CPU和RTC邏輯。為了減少功耗,備用電池單獨驅(qū)動振蕩電路和BCD計數(shù)器。
4. Alarm【報警】 功能
RTC在斷電模式或正常運行模式都可以在執(zhí)行的時間產(chǎn)生一個ALARM_INT 和ALARM_WK信號。在正常工作模式下,它會產(chǎn)生ALARM_INT。在斷電模式下,它會ALARM_WK以及ALARM_INT信號。RTC報警寄存器(RTCALM)確定報警啟用/禁用狀態(tài)和報警時間設(shè)置的條件。
5. 晶振
32.768 kHz X-Tal Connection Example
晶振時鐘頻率 32.768 kHz。
XT_RTC_I 32.768 kHz RTC振蕩器時鐘輸入
XT_RTC_O 32.768 kHz RTC振蕩器時鐘輸出
XRTCCLKO 32.768 kHz RTC振蕩器時鐘輸出,此信號默認關(guān)閉。可以通過設(shè)置寄存器RTCCON的CLKOUTEN字段為1來啟用它。
引腳連接圖:由電路圖可知,只連接了RTC振蕩器時鐘輸入引腳XT_RTC_I 。
三、寄存器
1. RTC寄存器組:
2. INTP
設(shè)置對應(yīng)的bit為1就可以清除中斷。
3. RTCCON
RTCCON | 位 | 描述 | 復(fù)位值 |
---|---|---|---|
保留 | [31:10] | 保留 | 0 |
CLKOUTEN | [9] | 使能RTC通過XRTCCLKO輸出 0 disable 1 enbale | 0 |
TICEN | [8] | 嘀嗒計時器 0 = 禁止 1 = 使能 | 0 |
TICCKSEL | [7:4] | 嘀嗒計時器子時鐘源選擇 4’b0000 = 32768 Hz 4’b0001 = 16384 Hz 4’b0010 = 8192 Hz 4’b0011 = 4096 Hz 4’b0100 = 2048 Hz 4’b0101 =1024 Hz 4’b0110 =512 Hz 4’b0111 =256 Hz 4’b1000 =128 Hz 4’b1001 =64 Hz 4’b1010 =32 Hz 4’b1011 =16 Hz 4’b1100 =8 Hz 4’b1101 =4 Hz 4’b1110 =2 Hz 4’b1111 =1 Hz | 4’b0000 |
CLKRST | [3] | RTC時鐘計數(shù)復(fù)位 0 = 不復(fù)位 1 = 復(fù)位 0 | |
CNTSEL | [2] | BCD計數(shù)選擇 0 = 分配 BCD 計數(shù) 1 = 保留 | 0 |
CLKSEL | [1] | BCD 時鐘選擇 0 = XTAL 1/2 divided clock 1 = 保留(XTAL 供頻) | 0 |
RTCEN | [0] | RTC控制使能 0 = 禁止 1 = 使能 | 0 |
RTCCON寄存器由10位組成,如控制BCD SEL讀/寫啟用的CTLEN,
CNTSEL、CLKRST、TICKSEL、TICEN用于測試,CLKOUTEN用于RTC時鐘輸出控制。CTLEN位控制CPU和RTC之間的所有接口。因此,您應(yīng)該在RTC控件中將其設(shè)置為“1”,在系統(tǒng)重置后啟用數(shù)據(jù)寫入的例程。為了防止無意中寫入BCD計數(shù)器寄存器,應(yīng)該關(guān)閉電源前將CTLEN位清除為0。
CLKRST是215時鐘分頻器的計數(shù)器復(fù)位。在設(shè)置RTC時鐘之前,應(yīng)重置215時鐘分頻器以獲得精確的RTC操作。
四、RTC的操作
1. 設(shè)置時間
舉例:
我們要將當(dāng)前時間設(shè)置為 2020年11月11日, 15:24:50。
1) 先將RTC控制使能開啟,即RTCCON[0]置為1;
2)然后將時間對應(yīng)的BCD格式數(shù)值,設(shè)置到應(yīng)對的寄存器,BCDYEAR 、BCDMON 、BCDDAY 、BCDHOUR 、BCDMIN 、BCDSEC;
3) 將RTCCON[0]置為0,防止誤操作修改了時間;
4)如果我們要訪問當(dāng)前時間,可以直接讀取寄存器BCDYEAR 、BCDMON 、BCDDAY 、BCDHOUR 、BCDMIN 、BCDSEC。
void rtc_init(void){ RTCCON = 1;//使能RTC控制寫功能 RTC.BCDYEAR = 0x20;// 2020年11月11日, 15:24:50.以BCD碼格式寫入 RTC.BCDMON = 0x11; RTC.BCDDAY = 0x11; RTC.BCDHOUR = 0x15; RTC.BCDMIN = 0x24; RTC.BCDSEC = 0x50; RTCCON = 0;//關(guān)閉RTC控制寫功能}
2. 操作滴答定時器
TICNT
RTC計時器是一個遞增計數(shù)器,并引發(fā)計時中斷。TICNT寄存器包含32位目標計數(shù)值,并且CURTICCNT寄存器包含32位當(dāng)前計時計數(shù)。如果當(dāng)前滴答數(shù)達到TICNT中指定的目標值時,計時中斷發(fā)生。
一秒鐘計數(shù)的次數(shù),由RTCCON[7:4]即TICCKSEL位決定:
因為我們的晶振頻率也是32768,為方便計數(shù),所以我們設(shè)置RTCCON[7:4]為0,開啟滴答計時器需要設(shè)置RTCCON[8]位1:
代碼如下:
RTCCON = RTCCON & (~(0xf << 4)) | (1 << 8); TICCNT = 32768;
3. 操作ALARM鬧鐘
RTCALM
RTCALM寄存器控制報警功能的啟用和報警時間。請注意,RTCALM寄存器在斷電模式下將同時生成ALARM_INT和ALARM_WK信號,但在正常模式下僅生成ALARM_INT信號。設(shè)置ALMEN[6]為1以產(chǎn)生ALARM_INT和ALARM_WK信號。
舉例:
比如我們想每個小時的25分58秒產(chǎn)生一個中斷信號,那我們需要設(shè)置RTCALM[1]、RTCALM[0]為1,同時設(shè)置RTCALM[6]位1以開啟alarm功能,然后將BCD格式的時間設(shè)置到寄存器ALMSEC、ALMMIN。
代碼如下:
RTCALM.ALM = (1 << 6)|(1 << 0)|(1 << 1);//使能bite:MINEN、SECEN RTCALM.SEC = 0x58; RTCALM.MIN = 0x25; //每小時25:58產(chǎn)生一次中斷
alarm功能設(shè)置鬧鐘時間寄存器如下:
寄存器操作,采用BCD格式。
五、完整代碼實現(xiàn)
滴答計時器和alarm鬧鐘會產(chǎn)生內(nèi)部中斷信號,所以我們必須給這兩個中斷信號進行中斷相關(guān)的初始化,并在中斷處理函數(shù)中增加相應(yīng)的處理代碼。
中斷號
參考datasheet 9.2.2 GIC Interrupt Table關(guān)于中斷的初始化的寄存器配置,我們可以參考《11. 從0開始學(xué)ARM-基于Exynos4412中斷詳解、key程序編寫》
區(qū)別是,key連接在了第一級中斷控制器,而rtc的這兩個中斷則沒有。
清中斷需要設(shè)置的寄存器如下:
滴答計時器清中斷:
RTCINTP = RTCINTP | (1 << 0);//清GIC中斷標志位ICDICPR.ICDICPR2 = ICDICPR.ICDICPR2 | (0x1 << 13);//清cpu中斷標志位CPU0.ICCEOIR = CPU0.ICCEOIR&(~(0x3ff))|irq_num;
alarm計時器清中斷:
RTCINTP = RTCINTP | (1 << 1);//清GIC中斷標志位ICDICPR.ICDICPR2 = ICDICPR.ICDICPR2 | (0x1 << 12);//清cpu中斷標志位CPU0.ICCEOIR = CPU0.ICCEOIR&(~(0x3ff))|irq_num;
滴答計時器中斷初始化:
void rtc_tic(void){
RTCCON = RTCCON & (~(0xf << 4)) | (1 << 8);
TICCNT = 32768;
ICDDCR = 1; //使能分配器
ICDISER.ICDISER2 = ICDISER.ICDISER2 | (0x1 << 13); //使能相應(yīng)中斷到分配器
ICDIPTR.ICDIPTR19 = ICDIPTR.ICDIPTR19 & (~(0xff << 8))|(0x1 << 8); //選擇CPU接口
CPU0.ICCPMR = 255; //中斷屏蔽優(yōu)先級
CPU0.ICCICR = 1; //使能中斷到CPU}
alarm初始化
void rtc_alarm(void){
RTCALM.ALM = (1 << 6)|(1 << 0)|(1 << 1);
RTCALM.SEC = 0x58;
RTCALM.MIN = 0x25; //每小時25:58產(chǎn)生一次中斷
ICDDCR = 1; //使能分配器
//使能相應(yīng)中斷到分配器
ICDISER.ICDISER2 = ICDISER.ICDISER2 | (0x1 << 12);//選擇CPU接口
ICDIPTR.ICDIPTR19 = ICDIPTR.ICDIPTR19 & (~(0xff << 0))|(0x1 << 0);
CPU0.ICCPMR = 255; //中斷屏蔽優(yōu)先級
CPU0.ICCICR = 1; //使能中斷到CPU}
中斷處理函數(shù)
void do_irq(void){static int a = 1;int irq_num;
irq_num = CPU0.ICCIAR&0x3ff; //獲取中斷號switch(irq_num){case 57: //按鍵keyprintf("in the irq_handlern");//清GPIO中斷標志位
EXT_INT41_PEND = EXT_INT41_PEND |((0x1 << 1));
//清GIC中斷標志位
ICDICPR.ICDICPR1 = ICDICPR.ICDICPR1 | (0x1 << 25);
break;case 76:printf("in the alarm interrupt!n");
RTCINTP = RTCINTP | (1 << 1);//清GIC中斷標志位
ICDICPR.ICDICPR2 = ICDICPR.ICDICPR2 | (0x1 << 12);
break;case 77:printf("in the tic interrupt!n");
RTCINTP = RTCINTP | (1 << 0);
//清GIC中斷標志位
ICDICPR.ICDICPR2 = ICDICPR.ICDICPR2 | (0x1 << 13);break;}//清cpu中斷標志位
CPU0.ICCEOIR = CPU0.ICCEOIR&(~(0x3ff))|irq_num; }
其他代碼:
void rtc_init(void){
RTCCON = 1;//使能RTC控制寫功能
RTC.BCDYEAR = 0x20;// 2020年11月11日, 15:24:50.以BCD碼格式寫入
RTC.BCDMON = 0x11;
RTC.BCDDAY = 0x11;
RTC.BCDHOUR = 0x15;
RTC.BCDMIN = 0x24;
RTC.BCDSEC = 0x50;
RTCCON = 0;//關(guān)閉RTC控制寫功能}int main (void){rtc_init();rtc_alarm();rtc_tic();//每隔一秒打印以下當(dāng)前時間while(1){printf("%x-%x-%x %x:%x:%xn",RTC.BCDYEAR,
RTC.BCDMON,
RTC.BCDDAY,
RTC.BCDHOUR,
RTC.BCDMIN,RTC.BCDSEC);delay_ms(1000);}}
上一篇:淺析ARM協(xié)處理器CP15寄存器有關(guān)指令:MCR\MRC
下一篇:23. 基于Cortex-A9 uboot代碼啟動分析
推薦閱讀
史海拾趣
面對突如其來的新冠疫情挑戰(zhàn),Holmes Electronics迅速調(diào)整策略,加速數(shù)字化轉(zhuǎn)型。他們利用云計算、大數(shù)據(jù)和人工智能等先進技術(shù),構(gòu)建了高效的遠程辦公和智能制造體系。通過數(shù)字化轉(zhuǎn)型,公司不僅有效保障了員工的安全健康和生產(chǎn)效率,還進一步提升了產(chǎn)品質(zhì)量和客戶滿意度。此外,Holmes Electronics還積極開發(fā)防疫相關(guān)的電子產(chǎn)品,如智能體溫檢測設(shè)備和消毒機器人等,為抗擊疫情貢獻了自己的力量。
隨著航空技術(shù)的不斷發(fā)展,B&F公司開始積極探索與其他行業(yè)的跨界合作。例如,公司與一家知名電子公司合作,共同研發(fā)了一款新型飛行控制系統(tǒng)。這款系統(tǒng)采用了最先進的電子技術(shù)和算法,大大提高了飛機的操控性能和飛行效率。通過這種跨界合作,B&F公司不僅拓展了業(yè)務(wù)領(lǐng)域,還為公司帶來了更多的發(fā)展機遇。
隨著航空技術(shù)的不斷發(fā)展,B&F公司開始積極探索與其他行業(yè)的跨界合作。例如,公司與一家知名電子公司合作,共同研發(fā)了一款新型飛行控制系統(tǒng)。這款系統(tǒng)采用了最先進的電子技術(shù)和算法,大大提高了飛機的操控性能和飛行效率。通過這種跨界合作,B&F公司不僅拓展了業(yè)務(wù)領(lǐng)域,還為公司帶來了更多的發(fā)展機遇。
隨著公司業(yè)務(wù)的不斷拓展和市場的日益全球化,三環(huán)集團開始積極推進全球化戰(zhàn)略。公司在廣東潮州、深圳,四川成都、南充、德陽,江蘇蘇州,湖北武漢,中國香港,德國,泰國等地設(shè)立公司,形成了覆蓋全球的產(chǎn)業(yè)布局。通過與國際知名企業(yè)的合作與交流,三環(huán)集團不斷提升自身的技術(shù)水平和市場競爭力,逐步成為電子行業(yè)的領(lǐng)軍企業(yè)之一。同時,公司還積極參與國際展覽和論壇等活動,展示自身實力和品牌形象,為全球客戶提供更優(yōu)質(zhì)的產(chǎn)品和服務(wù)。
以上五個故事分別從不同角度展現(xiàn)了潮州三環(huán)(Three-circle)公司在電子行業(yè)中的發(fā)展歷程和成就。這些故事不僅展示了公司的創(chuàng)新能力和市場洞察力,也體現(xiàn)了公司在面對市場挑戰(zhàn)時的勇氣和決心。
隨著全球航空市場的不斷變化,龐巴迪公司在商用航空領(lǐng)域也取得了顯著成就。其生產(chǎn)的CRJ系列區(qū)域噴氣客機和Q系列渦槳飛機在全球范圍內(nèi)廣受歡迎。這些飛機配備了先進的電子設(shè)備和系統(tǒng),提供了更高的安全性和舒適性。龐巴迪還推出了C系列單通道中距客機,該機型以其環(huán)保、經(jīng)濟和人性化的設(shè)計贏得了市場的廣泛認可。
為了擴大市場份額,CLC開始實施全球化戰(zhàn)略。他們在世界各地尋找優(yōu)質(zhì)的原材料供應(yīng)商,并與當(dāng)?shù)氐暮献骰锇榻㈤L期合作關(guān)系。同時,他們還積極參加國際展覽和貿(mào)易活動,展示自己的產(chǎn)品和技術(shù)實力。這些努力使CLC的品牌影響力逐漸擴大,產(chǎn)品也走進了更多的國家和地區(qū)。
光無線通信技術(shù)或稱自由空間光通信(FSO,F(xiàn)reeSpaceOpticalCommunication)是一種寬帶接入方式,是光通信和無線通信結(jié)合的產(chǎn)物,它利用光束信號通過大氣空間,而不是通過光纖傳送信號。這種技術(shù)的接入系統(tǒng)在組成結(jié)構(gòu)上與光纖傳送系統(tǒng)非常相似,這種系 ...… 查看全部問答∨ |
|
STM32網(wǎng)絡(luò)接口以及CF卡接口能用ARM的嗎? 我要求做一個STM32帶有網(wǎng)絡(luò)接口以及CF卡功能的板子,發(fā)現(xiàn)已經(jīng)有的網(wǎng)絡(luò)板是STM32+W5100的,可是好像有的地方說不太建議用W5100,那么用哪種網(wǎng)絡(luò)接口比較好呢?我打算用RTL8019AS,怎么樣?有沒有除了W5100的網(wǎng)絡(luò)接口的例子呢?   ...… 查看全部問答∨ |
|
本文通過重載WM_NOTIFY消息,實現(xiàn)ListView外觀的自定義. 實現(xiàn)結(jié)果為奇偶數(shù)分別采用不同的背景顏色.同時最后一列加入了一個時鐘圖標. 該代碼為本人的GUI系統(tǒng)(MiniWin)在數(shù)字電視機頂盒中的部分實現(xiàn)代碼 需要學(xué)習(xí)WIN32-API開發(fā)的人可以參考,可惜eew ...… 查看全部問答∨ |
How to display same part of the virtual screen in two monitors I konw that in windows, with \"extended desktop\" I can use two monitors to form a big virtual screen. But, how can I make the two monitors display part of the same screen. For example: I have two monitors with the same 1024*76 ...… 查看全部問答∨ |
我的Windows CE5.0 啟動速度大約30秒,NAND是1G的,除了系統(tǒng)分區(qū),第二個分區(qū)是空的 在論壇里看到很多人啟動速度只有10秒,甚至更少的 看了調(diào)試信息更多時間花在啟動后的Flash掃描上,另外還有一些驅(qū)動的加載 請問各位牛人,怎樣優(yōu)化才能提高速 ...… 查看全部問答∨ |
|
【跟TI學(xué)電源】系列-----TI的HEV電池管理應(yīng)用 電池如何使汽車“環(huán)?!保瑸槭裁匆阡囯姵厣洗笞魑恼?? TI的HEV電池管理應(yīng)用,使用鋰離子電池,可在功率、能量密度、效率和環(huán)境影響之間取得最佳平衡。但同時,鋰離子電池也是易損壞和危險的,而汽車環(huán)境又相當(dāng)棘手、難以應(yīng)付?;旌蟿恿ζ嚭碗?...… 查看全部問答∨ |
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 保障工業(yè)核心命脈:深度解讀工業(yè)交換機QoS的“智能流量治理”之道
- WAIC 直擊|Arm 鄒挺:突破基礎(chǔ)設(shè)施、數(shù)據(jù)安全與人才三重挑戰(zhàn),釋放 AI 發(fā)展新潛能
- 鎧俠第九代 BiCS FLASH? 512Gb TLC 存儲器開始送樣
- 基于PPEC32系列芯片的10kW純正弦波車載逆變器應(yīng)用方案
- 新唐科技推出全新KM1M4BF6x系列單電機控制MCU
- 伺服電機中的回原點方式
- 芯科集成CX3288系列車規(guī)MCU在旋轉(zhuǎn)變壓器的應(yīng)用
- AI玩具DC-DC芯片,安全與成本雙突圍
- 訂單暴增800%!消費芯片新風(fēng)口:東北裝空調(diào)
- 機器人也能純視覺控制?MIT華人博士團隊登上Nature主刊
- 【六一兒童節(jié)】說說你童年的夢想!
- 有獎直播 | 微軟 Azure Sphere助力穩(wěn)定,安全和靈活的物聯(lián)網(wǎng)解決方案
- TE專題:可靠連接解決方案大集合
- ams圣誕禮物大作戰(zhàn):掃碼、關(guān)注、玩游戲、贏禮!
- ADI 全新技術(shù)資料集錦
- Digi-Key KOL視頻來襲~資深算法工程師暢聊圖像處理秘訣
- 有獎直播|貝能國際推出基于英飛凌技術(shù)的毫米波雷達模組,完美解決PIR市場痛點
- 免費申請|ATmega4809 Curiosity Nano
- 下載嘍:PCIe要了解的10件事和識別協(xié)議的BSX系列BERTScope誤碼率測試儀技術(shù)資料