0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一文搞懂Cortex-A9 RTC(下)

jf_78858299 ? 來(lái)源:土豆居士 ? 作者:土豆居士 ? 2023-05-26 15:21 ? 次閱讀

2. 操作滴答定時(shí)器

TICNT

圖片

TICNT

RTC計(jì)時(shí)器是一個(gè)遞增計(jì)數(shù)器,并引發(fā)計(jì)時(shí)中斷。TICNT寄存器包含32位目標(biāo)計(jì)數(shù)值,并且CURTICCNT寄存器包含32位當(dāng)前計(jì)時(shí)計(jì)數(shù)。如果當(dāng)前滴答數(shù)達(dá)到TICNT中指定的目標(biāo)值時(shí),計(jì)時(shí)中斷發(fā)生。

一秒鐘計(jì)數(shù)的次數(shù),由RTCCON[7:4]即TICCKSEL位決定:

圖片

TICCKSEL

因?yàn)槲覀兊木д耦l率也是32768,為方便計(jì)數(shù),所以我們?cè)O(shè)置RTCCON[7:4]為0,開(kāi)啟滴答計(jì)時(shí)器需要設(shè)置RTCCON[8]位1:

圖片

TICEN

代碼如下:

RTCCON = RTCCON & (~(0xf << 4)) | (1 << 8);
 TICCNT = 32768;

3. 操作ALARM鬧鐘

RTCALM

圖片RTCALM寄存器控制報(bào)警功能的啟用和報(bào)警時(shí)間。請(qǐng)注意,RTCALM寄存器在斷電模式下將同時(shí)生成ALARM_INT和ALARM_WK信號(hào),但在正常模式下僅生成ALARM_INT信號(hào)。設(shè)置ALMEN[6]為1以產(chǎn)生ALARM_INT和ALARM_WK信號(hào)。

「舉例:」

比如我們想每個(gè)小時(shí)的25分58秒產(chǎn)生一個(gè)中斷信號(hào),那我們需要設(shè)置RTCALM[1]、RTCALM[0]為1,同時(shí)設(shè)置RTCALM[6]為1以開(kāi)啟alarm功能,然后將BCD格式的時(shí)間設(shè)置到寄存器ALMSEC、ALMMIN。

代碼如下:

RTCALM.ALM = (1 << 6)|(1 << 0)|(1 << 1);//使能bite:MINEN、SECEN
 RTCALM.SEC = 0x58;
 RTCALM.MIN = 0x25;  //每小時(shí)25:58產(chǎn)生一次中斷

alarm功能設(shè)置鬧鐘時(shí)間寄存器如下:

圖片圖片圖片圖片圖片圖片寄存器操作,采用BCD格式。

五、完整代碼實(shí)現(xiàn)

滴答計(jì)時(shí)器和alarm鬧鐘會(huì)產(chǎn)生內(nèi)部中斷信號(hào),所以我們必須給這兩個(gè)中斷信號(hào)進(jìn)行中斷相關(guān)的初始化,并在中斷處理函數(shù)中增加相應(yīng)的處理代碼。

中斷號(hào)

參考datasheet 9.2.2 GIC Interrupt Table

圖片

rtc中斷號(hào)

關(guān)于中斷的初始化的寄存器配置,我們可以參考《11. 從0開(kāi)始學(xué)ARM-基于Exynos4412中斷詳解、key程序編寫(xiě)》

區(qū)別是,key連接在了第一級(jí)中斷控制器,而rtc的這兩個(gè)中斷則沒(méi)有。清中斷需要設(shè)置的寄存器如下:

「滴答計(jì)時(shí)器清中斷:」

RTCINTP  = RTCINTP | (1 << 0);
//清GIC中斷標(biāo)志位
ICDICPR.ICDICPR2 = ICDICPR.ICDICPR2 | (0x1 << 13);
//清cpu中斷標(biāo)志位
CPU0.ICCEOIR = CPU0.ICCEOIR&(~(0x3ff))|irq_num;

「alarm計(jì)時(shí)器清中斷:」

RTCINTP  = RTCINTP | (1 << 1);
//清GIC中斷標(biāo)志位
ICDICPR.ICDICPR2 = ICDICPR.ICDICPR2 | (0x1 << 12);
//清cpu中斷標(biāo)志位
CPU0.ICCEOIR = CPU0.ICCEOIR&(~(0x3ff))|irq_num;

「滴答計(jì)時(shí)器中斷初始化:」

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)先級(jí)
 CPU0.ICCICR = 1;   //使能中斷到CPU
}

「alarm初始化」

void rtc_alarm(void)
{
 RTCALM.ALM = (1 << 6)|(1 << 0)|(1 << 1);
 RTCALM.SEC = 0x58;
 RTCALM.MIN = 0x25;  //每小時(shí)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)先級(jí)
 CPU0.ICCICR = 1;   //使能中斷到CPU
}

「中斷處理函數(shù)」

void do_irq(void)
{
 static int a = 1;
 int irq_num;
 irq_num = CPU0.ICCIAR&0x3ff;  //獲取中斷號(hào)
 switch(irq_num)
 {
  case 57: //按鍵key
   printf("in the irq_handler\\n");
   //清GPIO中斷標(biāo)志位
   EXT_INT41_PEND = EXT_INT41_PEND |((0x1 << 1)); 
   //清GIC中斷標(biāo)志位
   ICDICPR.ICDICPR1 = ICDICPR.ICDICPR1 | (0x1 << 25); 
  break;
  case 76:
   printf("in the alarm interrupt!\\n");
   RTCINTP  = RTCINTP | (1 << 1);
   //清GIC中斷標(biāo)志位
   ICDICPR.ICDICPR2 = ICDICPR.ICDICPR2 | (0x1 << 12); 
  break;
  case 77:
   printf("in the tic interrupt!\\n");
   RTCINTP  = RTCINTP | (1 << 0);
    //清GIC中斷標(biāo)志位
   ICDICPR.ICDICPR2 = ICDICPR.ICDICPR2 | (0x1 << 13);
   break;
 }
 //清cpu中斷標(biāo)志位
 CPU0.ICCEOIR = CPU0.ICCEOIR&(~(0x3ff))|irq_num; 
}

「其他代碼:」

void rtc_init(void)
{
 RTCCON = 1;//使能RTC控制寫(xiě)功能
 RTC.BCDYEAR = 0x20;// 20201111日, 15:24:50.以BCD碼格式寫(xiě)入
 RTC.BCDMON = 0x11;
 RTC.BCDDAY = 0x11;
 RTC.BCDHOUR = 0x15;
 RTC.BCDMIN = 0x24;
 RTC.BCDSEC = 0x50;
 RTCCON = 0;//關(guān)閉RTC控制寫(xiě)功能
}
int main (void)
{     rtc_init();
  rtc_alarm();
  rtc_tic();
  //每隔一秒打印以下當(dāng)前時(shí)間
  while(1)
  {
   printf("%x-%x-%x %x:%x:%x\\n",RTC.BCDYEAR,
   RTC.BCDMON,
   RTC.BCDDAY,
   RTC.BCDHOUR,
   RTC.BCDMIN,RTC.BCDSEC);
   delay_ms(1000);
  }
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 集成電路
    +關(guān)注

    關(guān)注

    5371

    文章

    11254

    瀏覽量

    359804
  • 嵌入式系統(tǒng)
    +關(guān)注

    關(guān)注

    41

    文章

    3532

    瀏覽量

    128989
  • 時(shí)鐘芯片
    +關(guān)注

    關(guān)注

    2

    文章

    242

    瀏覽量

    39778
  • RTC
    RTC
    +關(guān)注

    關(guān)注

    2

    文章

    519

    瀏覽量

    66129
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Cortex-A9處理器的精妙應(yīng)用

    卡片電腦等等。并且通過(guò)開(kāi)發(fā)板內(nèi)的資料文檔可快速開(kāi)發(fā)產(chǎn)品,縮短研發(fā)周期。 Cortex-A9代表——Rayeager PX2開(kāi)發(fā)板 、微結(jié)構(gòu)  1.Cortex-A9兩種微架構(gòu)  可擴(kuò)展
    發(fā)表于 11-03 17:02

    AM4379 Cortex-A9試用體驗(yàn)

    (1)【創(chuàng)龍AM4379 Cortex-A9試用體驗(yàn)】+ 開(kāi)發(fā)板第次觸電【創(chuàng)龍AM4379 Cortex-A9試用體驗(yàn)】搭建Linux開(kāi)發(fā)環(huán)境【創(chuàng)龍AM4379 Cortex-A9
    發(fā)表于 08-29 17:45

    ARM Cortex-A9的具體開(kāi)發(fā)流程有哪些

    Linux的常用命令該怎樣去使用呢?ARM Cortex-A9的具體開(kāi)發(fā)流程有哪些?ARM Cortex-A9的開(kāi)發(fā)流程與51的有什么不同?
    發(fā)表于 11-12 07:53

    Cortex-A9 MPCore 技術(shù)參考手冊(cè)

    Cortex-A9 MPCore技術(shù)參考手冊(cè)
    發(fā)表于 08-02 18:22

    ARM Cortex-A9 MPCore 測(cè)試芯片技術(shù)手冊(cè)

    ARM Cortex-A9 MPCore 測(cè)試芯片技術(shù)手冊(cè)
    發(fā)表于 08-02 19:07

    Cortex-A9技術(shù)參考手冊(cè)

    Cortex-A9處理器是款高性能、低功耗的ARM宏單元,具有提供完整虛擬內(nèi)存功能的級(jí)高速緩存子系統(tǒng)。 Cortex-A9處理器實(shí)現(xiàn)ARMv7-
    發(fā)表于 08-17 06:53

    ARM Cortex-A9 MPCore

    The ARM Cortex-A9 MPCore multicore processor integrates the proven and highly successful ARM MPCore
    發(fā)表于 07-11 09:47 ?89次下載

    晶晨推出集成了ARM CORTEX-A9的芯片-AML8726-M

    ARM CORTEX-A9內(nèi)置1080p高清視頻解碼器、ARM Cortex-A9處理器和Mali&trade -400 3D圖像處理器的AML8726-M片上系統(tǒng)為成本敏感的多媒體應(yīng)用提供出色的性能支持。
    發(fā)表于 06-19 15:59 ?3552次閱讀

    Cortex-A9處理器系列

    Cortex-A9處理器系列,有需要的朋友下來(lái)看看。
    發(fā)表于 01-22 13:57 ?27次下載

    收獲塊功能強(qiáng)大價(jià)值的Cortex-A9 SoC開(kāi)發(fā)板

    秋天是收獲的季節(jié),您是否想靠自己的實(shí)力收獲塊功能強(qiáng)大價(jià)值150美元的Cortex-A9 SoC 開(kāi)發(fā)板呢?
    的頭像 發(fā)表于 09-22 09:59 ?7360次閱讀

    Cortex-A9 MBIST ControllerTechnical Reference

    Cortex-A9 MBIST ControllerTechnical Reference
    發(fā)表于 10-26 08:59 ?8次下載
    <b class='flag-5'>Cortex-A9</b> MBIST ControllerTechnical Reference

    Altera SoC 合作伙伴研討會(huì)2013演講PPT——ARM Cortex-A9

    Altera SoC 合作伙伴研討會(huì)2013演講PPT——ARM Cortex-A9
    發(fā)表于 10-26 09:04 ?13次下載
    Altera SoC 合作伙伴研討會(huì)2013演講PPT——ARM <b class='flag-5'>Cortex-A9</b>

    cortex-a9是什么處理器_cortex-a9處理器介紹

    本文首先介紹了cortex-a9是什么處理器,其次介紹了cortex-a9處理器的單核與多核,最后闡述了cortex-a9處理器的特點(diǎn)及優(yōu)勢(shì)。
    發(fā)表于 04-18 16:41 ?2.5w次閱讀

    ARM Cortex-A9芯片技術(shù)參考手冊(cè)

    ARM Cortex-A9技術(shù)參考手冊(cè)(TRM)描述了CortexA9處理器的單處理器版本,包括可選的預(yù)加載引擎。寄存器、指令、緩存、內(nèi)存和內(nèi)存接口指南。
    發(fā)表于 05-09 08:00 ?68次下載
    ARM <b class='flag-5'>Cortex-A9</b>芯片技術(shù)參考手冊(cè)

    搞懂Cortex-A9 RTC(上)

    RTC是集成電路,通常稱為時(shí)鐘芯片。在個(gè)嵌入式系統(tǒng)中,通常采用RTC來(lái)提供可靠的系統(tǒng)時(shí)間,包括時(shí)分秒和年月日等,而且要求在系統(tǒng)處于關(guān)機(jī)狀態(tài)它也能正常工作(通常采用后備電池供電)。
    的頭像 發(fā)表于 05-26 15:11 ?1339次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>搞懂</b><b class='flag-5'>Cortex-A9</b> <b class='flag-5'>RTC</b>(上)