⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtc.txt

📁 一个电力系统谐波检测的程序
💻 TXT
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.0 [Build 951] for uVision
; commandline ArmCC [--debug -c --asm --interleave -ortc.o --device=DARMP --apcs=interwork -O0 -IC:\Keil\ARM\INC\Philips APP\rtc.c]

                          ARM

                          AREA ||.text.7||, CODE, READONLY, ALIGN=2

                  RTCInit PROC
;;;35     	/* 设置实时时钟 */
;;;36         CCR =0x00;
000000  e3a00000          MOV      r0,#0
000004  e59f11a4          LDR      r1,|L1.432|
000008  e5c10008          STRB     r0,[r1,#8]
;;;37     	/*
;;;38     	 CLKEN  时钟使能。当该位为1 时,时间计数器使能。为0 时,时间计数器都被禁止, 
;;;39     	        这时可对其进行初始化。 
;;;40     	CTCRST  CTC 复位。为1 时,时钟节拍计数器复位。在CCR[1]变为0 之前,它将一直保持复位状态。
;;;41     	CLKSRC  如果该位为0,时钟节拍计数器计数预分频器的时钟,这与早先的Philips 嵌入式ARM
;;;42     	系列器件相吻合。如果该位为1,CTC 计数连接在RTCX1 和RTCX2
;;;43         两端的32kHz 振荡器信号(关于硬件的详细内容请见 
;;;44     	*/
;;;45         PREINT = Fpclk / 32768 - 1;
00000c  e59f01a0          LDR      r0,|L1.436|
000010  e1c108b0          STRH     r0,[r1,#0x80]
;;;46         PREFRAC = Fpclk - (Fpclk / 32768) * 32768;
000014  e3a00c1b          MOV      r0,#0x1b00
000018  e1c108b4          STRH     r0,[r1,#0x84]
;;;47         YEAR = 2007;
00001c  e59f0194          LDR      r0,|L1.440|
000020  e1c103bc          STRH     r0,[r1,#0x3c]
;;;48         MONTH = 4;
000024  e3a00004          MOV      r0,#4
000028  e5c10038          STRB     r0,[r1,#0x38]
;;;49         DOM = 25;
00002c  e3a00019          MOV      r0,#0x19
000030  e5c1002c          STRB     r0,[r1,#0x2c]
;;;50     	/*interrupt Setting */
;;;51     	#if RTC_INTERRUPT_FLAG
;;;52     	ILR  = (0<<0)|(0<<1)  ;
;;;53     
;;;54     	/*
;;;55     	  RTCCIF 为1 时,计数器增量中断模块产生中断。向该位写入1 清除计数器增量中断。 
;;;56     	  RTCALF 为1 时,报警寄存器产生中断。向该位写入1 清除报警中断。 
;;;57     	*/ 
;;;58     	CIIR =  0x00;
;;;59     	/*
;;;60     	0 IMSEC 为1 时,秒值的增加产生一次中断。 
;;;61         1 IMMIN 为1 时,分值的增加产生一次中断。 
;;;62         2 IMHOUR 为1 时,小时值的增加产生一次中断。	 
;;;63         3 IMDOM 为1 时,日期(月)值的增加产生一次中断。 
;;;64         4 IMDOW 为1 时,星期值的增加产生一次中断。 
;;;65         5 IMDOY 为1 时,日期(年)值的增加产生一次中断。 
;;;66         6 IMMON 为1 时,月值的增加产生一次中断。 
;;;67         7 IMYEAR 为1 时,年值的增加产生一次中断。 
;;;68     	*/
;;;69     
;;;70     	AMR  =  0x00;
;;;71     	/*
;;;72     	 0 AMRSEC 为1 时,秒值不与报警寄存器比较。 
;;;73     	 1 AMRMIN 为1 时,分值不与报警寄存器比较。 
;;;74     	 2 AMRHOUR 为1 时,小时值不与报警寄存器比较。 
;;;75     	 3 AMRDOM 为1 时,日期(月)值不与报警寄存器比较。 
;;;76     	 4 AMRDOW 为1 时,星期值不与报警寄存器比较。 		 				
;;;77     	 5 AMRDOY 为1 时,日期(年)值不与报警寄存器比较。 
;;;78     	 6 AMRMON 为1 时,月值不与报警寄存器比较。 
;;;79     	 7 AMRYEAR 为1 时,年值不与报警寄存器比较。 
;;;80     	*/
;;;81     	#endif
;;;82     
;;;83     }
000034  e12fff1e          BX       lr
                          ENDP

                  RTCStart PROC
;;;93     {
;;;94         CCR = 0x01;
000038  e3a00001          MOV      r0,#1
00003c  e59f116c          LDR      r1,|L1.432|
000040  e5c10008          STRB     r0,[r1,#8]
;;;95     	/*
;;;96     	 CLKEN  时钟使能。当该位为1 时,时间计数器使能。为0 时,时间计数器都被禁止, 
;;;97     	        这时可对其进行初始化。 
;;;98     	CTCRST  CTC 复位。为1 时,时钟节拍计数器复位。在CCR[1]变为0 之前,它将一直保持复位状态。
;;;99     	CLKSRC  如果该位为0,时钟节拍计数器计数预分频器的时钟,这与早先的Philips 嵌入式ARM
;;;100    	系列器件相吻合。如果该位为1,CTC 计数连接在RTCX1 和RTCX2
;;;101        两端的32kHz 振荡器信号(关于硬件的详细内容请见 
;;;102    	*/
;;;103    }
000044  e12fff1e          BX       lr
                          ENDP

                  RTCStop PROC
;;;112    {   
;;;113        CCR &= 0xfe;
000048  e59f0160          LDR      r0,|L1.432|
00004c  e5d00008          LDRB     r0,[r0,#8]
000050  e20000fe          AND      r0,r0,#0xfe
000054  e59f1154          LDR      r1,|L1.432|
000058  e5c10008          STRB     r0,[r1,#8]
;;;114    	/*
;;;115    	 CLKEN  时钟使能。当该位为1 时,时间计数器使能。为0 时,时间计数器都被禁止, 
;;;116    	        这时可对其进行初始化。 
;;;117    	CTCRST  CTC 复位。为1 时,时钟节拍计数器复位。在CCR[1]变为0 之前,它将一直保持复位状态。
;;;118    	CLKSRC  如果该位为0,时钟节拍计数器计数预分频器的时钟,这与早先的Philips 嵌入式ARM
;;;119    	系列器件相吻合。如果该位为1,CTC 计数连接在RTCX1 和RTCX2
;;;120        两端的32kHz 振荡器信号(关于硬件的详细内容请见 
;;;121    	*/
;;;122    } 
00005c  e12fff1e          BX       lr
                          ENDP

                  RTC_CTCReset PROC
;;;132    {   
;;;133        CCR |= 0x02;
000060  e59f0148          LDR      r0,|L1.432|
000064  e5d00008          LDRB     r0,[r0,#8]
000068  e3800002          ORR      r0,r0,#2
00006c  e59f113c          LDR      r1,|L1.432|
000070  e5c10008          STRB     r0,[r1,#8]
;;;134    	/*
;;;135    	 CLKEN  时钟使能。当该位为1 时,时间计数器使能。为0 时,时间计数器都被禁止, 
;;;136    	        这时可对其进行初始化。 
;;;137    	CTCRST  CTC 复位。为1 时,时钟节拍计数器复位。在CCR[1]变为0 之前,它将一直保持复位状态。
;;;138    	CLKSRC  如果该位为0,时钟节拍计数器计数预分频器的时钟,这与早先的Philips 嵌入式ARM
;;;139    	系列器件相吻合。如果该位为1,CTC 计数连接在RTCX1 和RTCX2
;;;140        两端的32kHz 振荡器信号(关于硬件的详细内容请见 
;;;141    	*/
;;;142    }
000074  e12fff1e          BX       lr
                          ENDP

                  RTCSetTime PROC
;;;151    void RTCSetTime( RTCTime Time ) 
;;;152    {
000078  e92d000f          PUSH     {r0-r3}
;;;153        SEC = Time.RTC_Sec;		 /*SEC 6 秒值的范围为0~59。 */
00007c  e59d0000          LDR      r0,[sp,#0]
000080  e59f1128          LDR      r1,|L1.432|
000084  e5c10020          STRB     r0,[r1,#0x20]
;;;154        MIN = Time.RTC_Min;		 /*MIN 6 分值的范围为0~59。 */
000088  e59d0004          LDR      r0,[sp,#4]
00008c  e5c10024          STRB     r0,[r1,#0x24]
;;;155        HOUR = Time.RTC_Hour;	 /*HOUR 5 小时值的范围为0~23。 */
000090  e59d0008          LDR      r0,[sp,#8]
000094  e5c10028          STRB     r0,[r1,#0x28]
;;;156        DOM = Time.RTC_Mday;	 /*DOM 5日期(月)值的范围为1~28,29,30 或31(取决于月份以及是否为闰年)。[1] */
000098  e59d000c          LDR      r0,[sp,#0xc]
00009c  e5c1002c          STRB     r0,[r1,#0x2c]
;;;157        DOW = Time.RTC_Wday;	 /*星期值的范围为0~6。[1] */
0000a0  e59d0018          LDR      r0,[sp,#0x18]
0000a4  e5c10030          STRB     r0,[r1,#0x30]
;;;158        DOY = Time.RTC_Yday;	 /*日期(年)值的范围为1~365(闰年为366) */
0000a8  e59d001c          LDR      r0,[sp,#0x1c]
0000ac  e1c103b4          STRH     r0,[r1,#0x34]
;;;159        MONTH = Time.RTC_Mon;	 /*MONTH 4 月值的范围为1~12。 */
0000b0  e59d0010          LDR      r0,[sp,#0x10]
0000b4  e5c10038          STRB     r0,[r1,#0x38]
;;;160        YEAR = Time.RTC_Year;    /*YEAR 12 年值的范围为0~4095 */
0000b8  e59d0014          LDR      r0,[sp,#0x14]
0000bc  e1c103bc          STRH     r0,[r1,#0x3c]
;;;161    }
0000c0  e28dd010          ADD      sp,sp,#0x10
0000c4  e12fff1e          BX       lr
                          ENDP

                  RTCSetAlarm PROC
;;;170    void RTCSetAlarm( RTCTime Alarm ) 
;;;171    {   
0000c8  e92d000f          PUSH     {r0-r3}
;;;172        ALSEC = Alarm.RTC_Sec;	    /* ALSEC 6 秒报警值 */
0000cc  e59d0000          LDR      r0,[sp,#0]
0000d0  e59f10d8          LDR      r1,|L1.432|
0000d4  e5c10060          STRB     r0,[r1,#0x60]
;;;173        ALMIN = Alarm.RTC_Min;		/* ALMIN 6 分报警值 */
0000d8  e59d0004          LDR      r0,[sp,#4]
0000dc  e5c10064          STRB     r0,[r1,#0x64]
;;;174        ALHOUR = Alarm.RTC_Hour;	/* ALHOUR 5 小时报警值 */
0000e0  e59d0008          LDR      r0,[sp,#8]
0000e4  e5c10068          STRB     r0,[r1,#0x68]
;;;175        ALDOM = Alarm.RTC_Mday;		/* ALDOM 5 日期(月)报警值 */
0000e8  e59d000c          LDR      r0,[sp,#0xc]
0000ec  e5c1006c          STRB     r0,[r1,#0x6c]
;;;176        ALDOW = Alarm.RTC_Wday;		/* ALDOW 3 星期报警值 */
0000f0  e59d0018          LDR      r0,[sp,#0x18]
0000f4  e5c10070          STRB     r0,[r1,#0x70]
;;;177        ALDOY = Alarm.RTC_Yday;		/* ALDOY 9 日期(年)报警值 */
0000f8  e59d001c          LDR      r0,[sp,#0x1c]
0000fc  e1c107b4          STRH     r0,[r1,#0x74]
;;;178        ALMON = Alarm.RTC_Mon;		/* ALMON 4 月报警值 */
000100  e59d0010          LDR      r0,[sp,#0x10]
000104  e5c10078          STRB     r0,[r1,#0x78]
;;;179        ALYEAR = Alarm.RTC_Year;    /* ALYEAR 12 年报警值 */
000108  e59d0014          LDR      r0,[sp,#0x14]
00010c  e1c107bc          STRH     r0,[r1,#0x7c]
;;;180    }
000110  e28dd010          ADD      sp,sp,#0x10
000114  e12fff1e          BX       lr
                          ENDP

                  RTCGetTime PROC
;;;190    RTCTime RTCGetTime( void ) 
;;;191    {
000118  e92d4010          PUSH     {r4,lr}
00011c  e24dd020          SUB      sp,sp,#0x20
000120  e1a04000          MOV      r4,r0
;;;192        RTCTime LocalTime;
;;;193        LocalTime.RTC_Sec = SEC;
000124  e59f0084          LDR      r0,|L1.432|
000128  e5d00020          LDRB     r0,[r0,#0x20]
00012c  e58d0000          STR      r0,[sp,#0]
;;;194        LocalTime.RTC_Min = MIN;
000130  e59f0078          LDR      r0,|L1.432|
000134  e5d00024          LDRB     r0,[r0,#0x24]
000138  e58d0004          STR      r0,[sp,#4]
;;;195        LocalTime.RTC_Hour = HOUR;
00013c  e59f006c          LDR      r0,|L1.432|
000140  e5d00028          LDRB     r0,[r0,#0x28]
000144  e58d0008          STR      r0,[sp,#8]
;;;196        LocalTime.RTC_Mday = DOM;
000148  e59f0060          LDR      r0,|L1.432|
00014c  e5d0002c          LDRB     r0,[r0,#0x2c]
000150  e58d000c          STR      r0,[sp,#0xc]
;;;197        LocalTime.RTC_Wday = DOW;
000154  e59f0054          LDR      r0,|L1.432|
000158  e5d00030          LDRB     r0,[r0,#0x30]
00015c  e58d0018          STR      r0,[sp,#0x18]
;;;198        LocalTime.RTC_Yday = DOY;
000160  e59f0048          LDR      r0,|L1.432|
000164  e1d003b4          LDRH     r0,[r0,#0x34]
000168  e58d001c          STR      r0,[sp,#0x1c]
;;;199        LocalTime.RTC_Mon = MONTH;
00016c  e59f003c          LDR      r0,|L1.432|
000170  e5d00038          LDRB     r0,[r0,#0x38]
000174  e58d0010          STR      r0,[sp,#0x10]
;;;200        LocalTime.RTC_Year = YEAR;
000178  e59f0030          LDR      r0,|L1.432|
00017c  e1d003bc          LDRH     r0,[r0,#0x3c]
000180  e58d0014          STR      r0,[sp,#0x14]
;;;201        return LocalTime;    
000184  e3a02020          MOV      r2,#0x20
000188  e1a0100d          MOV      r1,sp
00018c  e1a00004          MOV      r0,r4
000190  ebfffffe          BL       __aeabi_memcpy4
000194  e28dd020          ADD      sp,sp,#0x20
000198  e8bd4010          POP      {r4,lr}
;;;202    }
00019c  e12fff1e          BX       lr
                          ENDP

                  RTCSetAlarmMask PROC
;;;212    { 
;;;213        AMR = 0x00;
0001a0  e3a01000          MOV      r1,#0
0001a4  e59f2004          LDR      r2,|L1.432|
0001a8  e5c21010          STRB     r1,[r2,#0x10]
;;;214    		/*
;;;215    	 0 AMRSEC 为1 时,秒值不与报警寄存器比较。 
;;;216    	 1 AMRMIN 为1 时,分值不与报警寄存器比较。 
;;;217    	 2 AMRHOUR 为1 时,小时值不与报警寄存器比较。 
;;;218    	 3 AMRDOM 为1 时,日期(月)值不与报警寄存器比较。 
;;;219    	 4 AMRDOW 为1 时,星期值不与报警寄存器比较。 		 				
;;;220    	 5 AMRDOY 为1 时,日期(年)值不与报警寄存器比较。 
;;;221    	 6 AMRMON 为1 时,月值不与报警寄存器比较。 
;;;222    	 7 AMRYEAR 为1 时,年值不与报警寄存器比较。 
;;;223    	*/
;;;224    }
0001ac  e12fff1e          BX       lr
                  |L1.432|
0001b0  e0024000          DCD      0xe0024000
                  |L1.436|
0001b4  0000016d          DCD      0x0000016d
                  |L1.440|
0001b8  000007d7          DCD      0x000007d7
                          ENDP


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -