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

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

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

一文搞懂Cortex-A9 RTC(下)

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

2. 操作滴答定時器

TICNT

圖片

TICNT

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

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

圖片

TICCKSEL

因為我們的晶振頻率也是32768,為方便計數(shù),所以我們設(shè)置RTCCON[7:4]為0,開啟滴答計時器需要設(shè)置RTCCON[8]位1:

圖片

TICEN

代碼如下:

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

圖片

rtc中斷號

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

區(qū)別是,key連接在了第一級中斷控制器,而rtc的這兩個中斷則沒有。清中斷需要設(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計時器清中斷:」

RTCINTP  = RTCINTP | (1 << 1);
//清GIC中斷標(biāo)志位
ICDICPR.ICDICPR2 = ICDICPR.ICDICPR2 | (0x1 << 12);
//清cpu中斷標(biāo)志位
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: //按鍵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控制寫功能
 RTC.BCDYEAR = 0x20;// 20201111日, 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:%x\\n",RTC.BCDYEAR,
   RTC.BCDMON,
   RTC.BCDDAY,
   RTC.BCDHOUR,
   RTC.BCDMIN,RTC.BCDSEC);
   delay_ms(1000);
  }
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 集成電路
    +關(guān)注

    關(guān)注

    5367

    文章

    11162

    瀏覽量

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

    關(guān)注

    40

    文章

    3520

    瀏覽量

    128808
  • 時鐘芯片
    +關(guān)注

    關(guān)注

    2

    文章

    240

    瀏覽量

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

    關(guān)注

    2

    文章

    511

    瀏覽量

    65903
收藏 人收藏

    評論

    相關(guān)推薦

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

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

    AM4379 Cortex-A9試用體驗

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

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

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

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

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

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

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

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

    Cortex-A9處理器是款高性能、低功耗的ARM宏單元,具有提供完整虛擬內(nèi)存功能的級高速緩存子系統(tǒng)。 Cortex-A9處理器實現(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 ?3500次閱讀

    Cortex-A9處理器系列

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

    收獲塊功能強大價值的Cortex-A9 SoC開發(fā)板

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

    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 合作伙伴研討會2013演講PPT——ARM Cortex-A9

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

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

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

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

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

    搞懂Cortex-A9 RTC(上)

    RTC是集成電路,通常稱為時鐘芯片。在個嵌入式系統(tǒng)中,通常采用RTC來提供可靠的系統(tǒng)時間,包括時分秒和年月日等,而且要求在系統(tǒng)處于關(guān)機狀態(tài)它也能正常工作(通常采用后備電池供電)。
    的頭像 發(fā)表于 05-26 15:11 ?1308次閱讀
    <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>(上)