在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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>

            新聞中心

            GNU ARM匯編--(十)s3c2440的RTC

            作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò) 收藏
            RTC


            概述
            在系統(tǒng)電源關(guān)掉時(shí)RTC可以在備份電池的支持下來(lái)工作.RTC可以使用STRB/LDRB指令傳輸8bit的BCD值到CPU.數(shù)據(jù)包括秒,分,時(shí),日期,天,月和年.RTC工作在外部32.768KHz的晶振下,而且有報(bào)警功能.


            屬性
            BCD:秒,分,時(shí),日期,天,月和年
            閏年產(chǎn)生器
            報(bào)警功能:報(bào)警中斷 從power-off模式喚醒
            獨(dú)立的電源管腳(RTCVDD)
            為RTOS kernel time tick支持毫秒級(jí)的tick.


            閏年產(chǎn)生器
            閏年產(chǎn)生器通過(guò)BCDDATA,BCDMON和BCDYEAR來(lái)決定每個(gè)月最后一天的日期.一個(gè)8bit的計(jì)數(shù)器只能表示兩個(gè)BCD碼,所以無(wú)法決定00年是否是閏年.舉個(gè)例子,它不能區(qū)分1900和2000.為了解決這個(gè)問(wèn)題,s3c2440的RTC模塊在硬件邏輯上支持閏年是2000.1900不是閏年而2000時(shí)閏年.因此s3c2440的00表示2000,而不是1900.


            READ/WRITE REGISTERS
            為了寫(xiě)B(tài)CD寄存器,RTCCON寄存器的第0位必須置高.為了顯示秒,分,時(shí),日期,月和年,CPU從BCDSEC,BCDMIN,BCDHOUR,BCDDAY,BCDDATE,BCDMON和BCDYEAR寄存器中讀數(shù)據(jù).然而,在讀取多個(gè)寄存器時(shí),可能會(huì)有1秒的偏移.比如,當(dāng)user讀數(shù)據(jù)的時(shí)候,假設(shè)結(jié)果是2059(Year),12(Month),31(Date),23(Hour)和59(Minute).當(dāng)user讀BCDSEC寄存器,值的范圍是1--59s,到這沒(méi)有問(wèn)題,但是,如果這個(gè)值是0s,由于剛才提到的那一s的偏移,年月日時(shí)分就會(huì)變?yōu)?060(year),1(Month),1(Date),0(Hour)和0(Minute).在這種情況下,如果BCDSEC是0 user應(yīng)該重讀各個(gè)寄存器.


            BACKUP BATTERY OPERATION
            RTC由備份電池驅(qū)動(dòng),及時(shí)系統(tǒng)電源斷了,備份電池可以通過(guò)RTCVDD管腳向RTC模塊供電.當(dāng)系統(tǒng)關(guān)閉,CPU和RTC邏輯之間的接口是封閉的,備份電池只是驅(qū)動(dòng)晶振電路和BCD計(jì)數(shù)器來(lái)減少電源消耗.


            ALARM FUNCTION
            在power-off模式或者正常操作模式下,RTC可以在一個(gè)指定的時(shí)間產(chǎn)生一個(gè)報(bào)警信號(hào).在正常操作模式下,報(bào)警中斷(INT_RTC)是激活的.在power-off模式,電源管理喚醒信號(hào)(PMWKUP)和INT_RTC都是激活的.RTC報(bào)警寄存器(RTCALM)決定是否開(kāi)啟報(bào)警狀態(tài)和報(bào)警時(shí)間的設(shè)置.


            TICK TIME INTERRUPT
            RTC的tick time用于中斷請(qǐng)求.TICNT寄存器有中斷使能位和中斷的計(jì)數(shù)值.當(dāng)tick time中斷產(chǎn)生計(jì)數(shù)值為0.中斷的周期:
            Period = (n+1)/128 second
            n:Tick time count value(1~127)


            REAL TIME CLOCK SPECIAL REGISTERS
            RTCCON
            RTCCON控制4個(gè)bits,比如RTCEN控制BCD寄存器的讀寫(xiě)使能,CLKSEL,CNTSEL和CLKRST是用于測(cè)試的.
            RTCEN bit控制CPU與RTC之間的所有接口,所以在系統(tǒng)重啟后應(yīng)該在RTC控制程序中將其設(shè)為1來(lái)使能數(shù)據(jù)的讀寫(xiě).在電源關(guān)閉前,RTCEN應(yīng)該清0來(lái)防止對(duì)RTC寄存器的不經(jīng)意的寫(xiě)入.
            Register Address R/W Description Reset Value
            RTCCON 0x57000040(L)/0x57000043(B) R/W RTC control register 0x0


            RTCCON Bit Description Initial State
            RTCEN [0] RTC控制使能 0
            注意:所有的RTC寄存器都要以字節(jié)為單位來(lái)訪問(wèn),可以用STRB和LDRB匯編指令或者char類(lèi)型的指針.


            TICNT
            Register Address R/W Description Reset Value
            TICNT 0x57000044(L)/0x57000047(B) R/W(by byte) Tick time count register 0x0


            TICNT BIT Description Initial State
            TICK INT ENABLE [7] tick time 中斷使能 0
            TICK TIME COUNT [6:0] tick time 計(jì)數(shù)值(1~127) 000000


            RTCALM
            RTCALM決定alarm使能和alarm時(shí)間.在power-off模式下RTCALM寄存器通過(guò)INT_RTC和PWMKUP產(chǎn)生報(bào)警信號(hào),而在正常模式下只通過(guò)INT_RTC.


            Register Address R/W Description Reset Value
            RTCALM 0x57000050(L)/0x57000053(B) R/W(by type) RTC報(bào)警控制寄存器 0x0


            RTCALM Bit Description Initial State
            ALMEN [6] 報(bào)警總開(kāi)關(guān) 0
            YEAREN [5] Year報(bào)警開(kāi)關(guān) 0
            MONREN [4] Month報(bào)警開(kāi)關(guān) 0
            DATEEN [3] Date報(bào)警開(kāi)關(guān) 0
            HOUREN [2] Hour報(bào)警開(kāi)關(guān) 0
            MINEN [1] Minute報(bào)警開(kāi)關(guān) 0
            SECEN [0] Second報(bào)警開(kāi)關(guān) 0


            ALMSEC
            設(shè)置Second報(bào)警的具體秒數(shù)
            ALMMIN
            設(shè)置Minute報(bào)警的具體分鐘數(shù)
            ALMHOUR
            設(shè)置Hour報(bào)警的具體小時(shí)數(shù)
            ALMDATE
            設(shè)置Date報(bào)警的具體日期
            ALMMON
            設(shè)置Mon報(bào)警的具體月份
            ALMYEAR
            設(shè)置Year報(bào)警的具體年份


            BCDSEC BCDMIN BCDHOUR BCDDATE BCDMON BCDYEAR

            用BCD碼表示的秒 分 時(shí) 日期 月份 年

            本文引用地址:http://www.biyoush.com/article/201611/321721.htm

            給出報(bào)警中斷的rtc匯編和c代碼如下,在報(bào)警中斷時(shí)是調(diào)用PWM的蜂鳴器來(lái)做鬧鐘的:

            start.S:

            [cpp]view plaincopy
            1. /*
            2. watchdogtimerwithdisablereset
            3. copyleft@[email protected]
            4. */
            5. .equNOINT,0xc0
            6. .equGPBCON,0x56000010@led
            7. .equGPBDAT,0x56000014@led
            8. .equGPBUP,0x56000018@led
            9. .equGPFCON,0x56000050@interruptconfig
            10. .equEINTMASK,0x560000a4
            11. .equEXTINT0,0x56000088
            12. .equEXTINT1,0x5600008c
            13. .equEXTINT2,0x56000090
            14. .equINTMSK,0x4A000008
            15. .equEINTPEND,0x560000a8
            16. .equSUBSRCPND,0x4a000018
            17. .equINTSUBMSK,0x4a00001c
            18. .equSRCPND,0X4A000000
            19. .equINTPND,0X4A000010
            20. .equGPHCON,0x56000070
            21. .equGPHDAT,0x56000074
            22. .equGPB5_out,(1<<(5*2))
            23. .equGPB6_out,(1<<(6*2))
            24. .equGPB7_out,(1<<(7*2))
            25. .equGPB8_out,(1<<(8*2))
            26. .equGPBVALUE,(GPB5_out|GPB6_out|GPB7_out|GPB8_out)
            27. .equLOCKTIME,0x4c000000
            28. .equMPLLCON,0x4c000004
            29. .equUPLLCON,0x4c000008
            30. .equM_MDIV,92
            31. .equM_PDIV,1
            32. .equM_SDIV,1
            33. .equU_MDIV,56
            34. .equU_PDIV,2
            35. .equU_SDIV,2
            36. .equCLKDIVN,0x4c000014
            37. .equDIVN_UPLL,0
            38. .equHDIVN,1
            39. .equPDIVN,1@FCLK:HCLK:PCLK=1:2:4
            40. .equWTCON,0x53000000
            41. .equPre_scaler,249
            42. .equwd_timer,1
            43. .equclock_select,00@316
            44. .equint_gen,1@開(kāi)中斷
            45. .equreset_enable,0@關(guān)掉重啟信號(hào)
            46. .equWTDAT,0x53000004
            47. .equCount_reload,50000@定時(shí)器定為2SPCLK=100MPCLK/(Pre_scaler+1)/clock_select=100M/(249+1)/16=25k50000/25k=2s
            48. .equWTCNT,0x53000008
            49. .equCount,50000
            50. .equTCFG0,0x51000000
            51. .equPrescaler1,0x00@[15:8]Timer234
            52. .equPrescaler0,249@[7:0]Timer01
            53. .equTCFG1,0x51000004
            54. .equDMA_MODE,0x0@[23:20]nodmachannal
            55. .equMUX0,0x2@[3:0]1/8
            56. @定時(shí)器輸入時(shí)鐘周期=PCLK/(prescaler+1)/(dividervalue)
            57. @clk=100M/(249+1)/8=25k
            58. .equTCON,0x51000008
            59. .equDZ_eable,0@[4]關(guān)閉死區(qū)的操作
            60. .equauto_reload,1@[3]auto_reload
            61. .equinverter,1@[2]打開(kāi)電平反轉(zhuǎn)
            62. .equman_update,1@[1]手動(dòng)更新
            63. .equclear_man_update,0
            64. .equstart,1@[0]開(kāi)始
            65. .equstop,0@[0]停止
            66. .equTCNTB0,0x5100000c
            67. .equTCMPB0,0x51000010
            68. .equTCNTO0,0x51000014
            69. .equULCON0,0x50000000
            70. .equIR_MODE,0x0@[6]正常模式
            71. .equParity_Mode,0x0@[5:3]無(wú)校驗(yàn)位
            72. .equNum_of_stop_bit,0x0@[2]一個(gè)停止位
            73. .equWord_length,0b11@[1:0]8個(gè)數(shù)據(jù)位
            74. .equUCON0,0x50000004
            75. .equFCLK_Div,0@[15:12]時(shí)鐘源選擇用PCLK,所以這里用默認(rèn)值
            76. .equClk_select,0b00@[11:10]時(shí)鐘源選擇使用PCLK
            77. .equTx_Int_Type,1@[9]中斷請(qǐng)求類(lèi)型為L(zhǎng)evel
            78. .equRx_Int_Type,0@1@[8]中斷請(qǐng)求類(lèi)型為L(zhǎng)evel
            79. .equRx_Timeout,0@[7]
            80. .equRx_Error_Stat_Int,1@[6]
            81. .equLoopback_Mode,0@[5]正常模式
            82. .equBreak_Sig,0@[4]不發(fā)送終止信號(hào)
            83. .equTx_Mode,0b01@[3:2]中斷請(qǐng)求或輪循模式
            84. .equRx_Mode,0b01@[1:0]中斷請(qǐng)求或輪循模式
            85. .equUFCON0,0x50000008
            86. .equTx_FIFO_Trig_Level,0b00@[7:6]
            87. .equRx_FIFO_Trig_Level,0b00@[5:4]
            88. .equTx_FIFO_Reset,0b0@[2]
            89. .equRx_FIFO_Reset,0b0@[1]
            90. .equFIFO_Enable,0b0@[0]非FIFO模式
            91. .equUMCON0,0x5000000C@這個(gè)寄存器可以不管的
            92. .equUTRSTAT0,0x50000010
            93. .equUERSTAT0,0x50000014
            94. .equUFSTAT0,0x50000018
            95. .equUMSTAT0,0x5000001C
            96. .equUTXH0,0x50000020@(L小端)
            97. .equURXH0,0x50000024@(L小端)
            98. .equUBRDIV0,0x50000028
            99. .equUBRDIV,0x35@PCLK=400M/4=100MUBRDIV=(int)(100M/115200/16)-1=53=0x35
            100. .equBCDMIN,0x57000074
            101. .equBCDSEC,0x57000070
            102. //.globalBuzzer_Freq_Set
            103. .global_start
            104. _start:breset
            105. ldrpc,_undefined_instruction
            106. ldrpc,_software_interrupt
            107. ldrpc,_prefetch_abort
            108. ldrpc,_data_abort
            109. ldrpc,_not_used
            110. @birq
            111. ldrpc,_irq
            112. ldrpc,_fiq
            113. _undefined_instruction:.wordundefined_instruction
            114. _software_interrupt:.wordsoftware_interrupt
            115. _prefetch_abort:.wordprefetch_abort
            116. _data_abort:.worddata_abort
            117. _not_used:.wordnot_used
            118. _irq:.wordirq
            119. _fiq:.wordfiq
            120. .balignl16,0xdeadbeef
            121. reset:

            122. 上一頁(yè) 1 2 3 下一頁(yè)

            關(guān)鍵詞: ARM匯編s3c2440RT

            評(píng)論


            技術(shù)專(zhuān)區(qū)

            關(guān)閉