在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM學(xué)習(xí)筆記--RTC編程(二)

            ARM學(xué)習(xí)筆記--RTC編程(二)

            作者: 時(shí)間:2016-11-10 來(lái)源:網(wǎng)絡(luò) 收藏
            上一篇我們從用戶手冊(cè)對(duì)RTC有了一個(gè)大致的了解,現(xiàn)在就開(kāi)始通過(guò)程序編寫來(lái)學(xué)習(xí)RTC的應(yīng)用和操作了。這里先總結(jié)一下:實(shí)時(shí)時(shí)鐘是一組用于測(cè)量時(shí)間的計(jì)數(shù)器,如果使用電池供電,在系統(tǒng)掉電以后它也可以正常運(yùn)行以記錄系統(tǒng)的時(shí)間。LPC1788時(shí)鐘采用內(nèi)部的32K振蕩器輸出1HZ的時(shí)鐘信號(hào)做為RTC的時(shí)鐘源。

            RTC的寄存器比較簡(jiǎn)單,主要有時(shí)鐘計(jì)數(shù)器寄存器包括秒SEC 分MIN 小時(shí)HOUR 日期(月)DOM 星期DOW 日期(年)DOY 月MONTH 年YEAR, 這些寄存器為R/W 可以從中讀出具體的時(shí)間信息。其中的秒計(jì)數(shù)由1HZ時(shí)鐘驅(qū)動(dòng)。報(bào)警寄存器組中的值將和時(shí)間計(jì)數(shù)器寄存器中的值比較,如果所有為屏蔽的報(bào)警寄存器都與他們對(duì)應(yīng)的時(shí)間計(jì)數(shù)器相匹配,那么將產(chǎn)生一次中斷。報(bào)警屏蔽在報(bào)警屏蔽寄存器AMR中設(shè)置。中斷設(shè)置在中斷位置寄存器ILR中設(shè)置。RTC中斷不僅可以在報(bào)警寄存器和時(shí)間計(jì)數(shù)器匹配時(shí)產(chǎn)生,我們也可以配置計(jì)數(shù)器增量中斷寄存器CIIR,使計(jì)數(shù)器每增加1就產(chǎn)生一次中斷。RTC的控制在時(shí)鐘控制寄存器CCR中,我們可以使能或禁止時(shí)鐘,以及復(fù)位等。

            本文引用地址:http://www.biyoush.com/article/201611/317286.htm下面這段代碼就是RTC寄存器結(jié)構(gòu)體,里面包含了關(guān)于RTC的寄存器的一個(gè)列舉:

            /*------------- Real-Time Clock (RTC) ----------------------------------------*/
            typedef struct
            {
            __IO uint8_t ILR;
            uint8_t RESERVED0[7];
            __IO uint8_t CCR;
            uint8_t RESERVED1[3];
            __IO uint8_t CIIR;
            uint8_t RESERVED2[3];
            __IO uint8_t AMR;
            uint8_t RESERVED3[3];
            __I uint32_t CTIME0;
            __I uint32_t CTIME1;
            __I uint32_t CTIME2;
            __IO uint8_t SEC;
            uint8_t RESERVED4[3];
            __IO uint8_t MIN;
            uint8_t RESERVED5[3];
            __IO uint8_t HOUR;
            uint8_t RESERVED6[3];
            __IO uint8_t DOM;
            uint8_t RESERVED7[3];
            __IO uint8_t DOW;
            uint8_t RESERVED8[3];
            __IO uint16_t DOY;
            uint16_t RESERVED9;
            __IO uint8_t MONTH;
            uint8_t RESERVED10[3];
            __IO uint16_t YEAR;
            uint16_t RESERVED11;
            __IO uint32_t CALIBRATION;
            __IO uint32_t GPREG0;
            __IO uint32_t GPREG1;
            __IO uint32_t GPREG2;
            __IO uint32_t GPREG3;
            __IO uint32_t GPREG4;
            __IO uint8_t RTC_AUXEN;
            uint8_t RESERVED12[3];
            __IO uint8_t RTC_AUX;
            uint8_t RESERVED13[3];
            __IO uint8_t ALSEC;
            uint8_t RESERVED14[3];
            __IO uint8_t ALMIN;
            uint8_t RESERVED15[3];
            __IO uint8_t ALHOUR;
            uint8_t RESERVED16[3];
            __IO uint8_t ALDOM;
            uint8_t RESERVED17[3];
            __IO uint8_t ALDOW;
            uint8_t RESERVED18[3];
            __IO uint16_t ALDOY;
            uint16_t RESERVED19;
            __IO uint8_t ALMON;
            uint8_t RESERVED20[3];
            __IO uint16_t ALYEAR;
            uint16_t RESERVED21;
            __IO uint32_t ERSTATUS;
            __IO uint32_t ERCONTROL;
            __IO uint32_t ERCOUNTERS;
            uint32_t RESERVED22;
            __IO uint32_t ERFIRSTSTAMP0;
            __IO uint32_t ERFIRSTSTAMP1;
            __IO uint32_t ERFIRSTSTAMP2;
            uint32_t RESERVED23;
            __IO uint32_t ERLASTSTAMP0;
            __IO uint32_t ERLASTSTAMP1;
            __IO uint32_t ERLASTSTAMP2;
            } LPC_RTC_TypeDef;

            RTC初始化

            void RTC_Init (LPC_RTC_TypeDef *RTCx)
            {
            /* Set up clock and power for RTC module */
            CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCRTC, ENABLE); //開(kāi)啟RTC功能,配置寄存器PCONP

            // Clear all register to be default
            RTCx->ILR = 0x00; // 中斷地址寄存器,增量中斷、報(bào)警中斷
            RTCx->CCR = 0x00; // 時(shí)鐘控制寄存器(控制使能、復(fù)位、是否校準(zhǔn))
            RTCx->CIIR = 0x00;// 計(jì)數(shù)增量中斷寄存器 (控制按秒或分等變化一次發(fā)生中斷)
            RTCx->AMR = 0xFF; // 報(bào)警中斷寄存器
            RTCx->CALIBRATION = 0x00; //校準(zhǔn)寄存器,看時(shí)間走多長(zhǎng)然后校準(zhǔn)一次(1s或2s)
            }

            復(fù)位時(shí)間節(jié)拍器

            void RTC_ResetClockTickCounter(LPC_RTC_TypeDef *RTCx)
            {
            RTCx->CCR |= RTC_CCR_CTCRST;
            RTCx->CCR &= (~RTC_CCR_CTCRST) & RTC_CCR_BITMASK; // RTC_CCR_BITMASK:1101
            }

            設(shè)置RTC時(shí)鐘的初始值

            void RTC_Default_Set(void)
            {
            //Set current time
            RTC_SetTime (LPC_RTC, RTC_TIMETYPE_SECOND, 0);//參數(shù):(LPC_RTC_TypeDef *RTCx, uint32_t Timetype, uint32_t TimeValue)
            RTC_SetTime (LPC_RTC, RTC_TIMETYPE_MINUTE, 30);
            RTC_SetTime (LPC_RTC, RTC_TIMETYPE_HOUR, 11);
            RTC_SetTime (LPC_RTC, RTC_TIMETYPE_DAYOFMONTH, 31);
            RTC_SetTime (LPC_RTC, RTC_TIMETYPE_MONTH, 8);
            RTC_SetTime (LPC_RTC, RTC_TIMETYPE_YEAR, 12);
            }

            開(kāi)啟中斷

            RTC_CntIncrIntConfig (LPC_RTC, RTC_TIMETYPE_SECOND, ENABLE);

            /* Enable RTC interrupt */
            NVIC_EnableIRQ(RTC_IRQn);

            中斷處理

            void RTC_IRQHandler(void)
            {
            uint32_t secval;

            /* This is increment counter interrupt*/
            if (RTC_GetIntPending(LPC_RTC, RTC_INT_COUNTER_INCREASE))
            {
            secval = RTC_GetTime (LPC_RTC, RTC_TIMETYPE_SECOND);

            /* Send debug information */
            _DBG ("Current time: ");
            _DBD(RTC_GetTime (LPC_RTC, RTC_TIMETYPE_YEAR)); _DBG ("年");
            _DBD(RTC_GetTime (LPC_RTC, RTC_TIMETYPE_MONTH)); _DBG ("月");
            _DBD(RTC_GetTime (LPC_RTC, RTC_TIMETYPE_DAYOFMONTH));_DBG ("日");
            _DBD(RTC_GetTime (LPC_RTC, RTC_TIMETYPE_HOUR)); _DBG (":");
            _DBD(RTC_GetTime (LPC_RTC, RTC_TIMETYPE_MINUTE));_DBG (":");
            _DBD(RTC_GetTime (LPC_RTC, RTC_TIMETYPE_SECOND));
            _DBG_("");

            // Clear pending interrupt
            RTC_ClearIntPending(LPC_RTC, RTC_INT_COUNTER_INCREASE);
            }
            }

            運(yùn)行結(jié)果如下
            總結(jié)一下,RTC的整個(gè)運(yùn)用綜合起來(lái)就是啟動(dòng)、配置和處理數(shù)據(jù),這也是學(xué)習(xí)arm最最主要的思路;
            1、找出需要功能運(yùn)行的引腳配置寄存器或者配置寄存器
            2、配置電源管理寄存器開(kāi)啟需要的功能電源
            3、配置功能寄存器
            4、開(kāi)啟功能
            5、檢測(cè)狀態(tài)寄存器和中斷
            6、讀或?qū)憯?shù)據(jù)寄存器,處理數(shù)據(jù)
            以后的學(xué)習(xí)之路就需要這樣分析寄存器。
            發(fā)現(xiàn)白天真是做不了什么事情,但晚上不能熬夜太久,對(duì)身體不好,怎么辦呢?如何安排好自己的時(shí)間,是一個(gè)學(xué)問(wèn)和一個(gè)問(wèn)題……



            關(guān)鍵詞: ARMRTC編

            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉