📄 main.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 938] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\output\main.o --depend=.\output\main.d --device=DARMSTM --apcs=interwork -O0 -I.\ -ID:\Keil\ARM\INC\ST\STM32F10x --omf_browse=.\output\main.crf main.c]
THUMB
AREA ||.text||, CODE, READONLY, ALIGN=2
Time_Display PROC
;;;365 void Time_Display(u32 TimeVar)
;;;366 {
000000 e92d41f0 PUSH {r4-r8,lr}
000004 4604 MOV r4,r0
;;;367 u32 THH = 0, TMM = 0, TSS = 0;
000006 2500 MOVS r5,#0
000008 2600 MOVS r6,#0
00000a 2700 MOVS r7,#0
;;;368
;;;369 /* Compute hours */
;;;370 THH = TimeVar/3600;
00000c f44f6061 MOV r0,#0xe10
000010 fbb4f5f0 UDIV r5,r4,r0
;;;371 /* Compute minutes */
;;;372 TMM = (TimeVar % 3600)/60;
000014 fbb4f1f0 UDIV r1,r4,r0
000018 fb004011 MLS r0,r0,r1,r4
00001c 213c MOVS r1,#0x3c
00001e fbb0f6f1 UDIV r6,r0,r1
;;;373 /* Compute seconds */
;;;374 TSS = (TimeVar % 3600)% 60;
000022 f44f6061 MOV r0,#0xe10
000026 fbb4f1f0 UDIV r1,r4,r0
00002a fb004011 MLS r0,r0,r1,r4
00002e 213c MOVS r1,#0x3c
000030 fbb0f2f1 UDIV r2,r0,r1
000034 fb010712 MLS r7,r1,r2,r0
;;;375
;;;376 printf("Time: %0.2d:%0.2d:%0.2d\r",THH, TMM, TSS);
000038 463b MOV r3,r7
00003a 4632 MOV r2,r6
00003c 4629 MOV r1,r5
00003e a0d9 ADR r0,|L1.932|
000040 f7fffffe BL __1printf
;;;377 }
000044 e8bd81f0 POP {r4-r8,pc}
;;;378
ENDP
Time_Show PROC
;;;386 void Time_Show(void)
;;;387 {
000048 b510 PUSH {r4,lr}
;;;388 printf("\n\r");
00004a a0dd ADR r0,|L1.960|
00004c f7fffffe BL __1printf
;;;389
;;;390 /* Infinite loop */
;;;391 while(1)
000050 e00b B |L1.106|
|L1.82|
;;;392 {
;;;393 /* If 1s has paased */
;;;394 if(TimeDisplay == 1)
000052 48dc LDR r0,|L1.964|
000054 6800 LDR r0,[r0,#0] ; TimeDisplay
000056 2801 CMP r0,#1
000058 d107 BNE |L1.106|
;;;395 {
;;;396 /* Display current time */
;;;397 Time_Display(RTC_GetCounter());
00005a f7fffffe BL RTC_GetCounter
00005e 4604 MOV r4,r0
000060 f7fffffe BL Time_Display
;;;398 TimeDisplay = 0;
000064 2000 MOVS r0,#0
000066 49d7 LDR r1,|L1.964|
000068 6008 STR r0,[r1,#0] ; TimeDisplay
|L1.106|
00006a e7f2 B |L1.82|
;;;399 }
;;;400 }
;;;401 }
;;;402
ENDP
USART_Scanf PROC
;;;488 u8 USART_Scanf(u32 value)
;;;489 {
00006c b57c PUSH {r2-r6,lr}
00006e 4605 MOV r5,r0
;;;490 u32 index = 0;
000070 2400 MOVS r4,#0
;;;491 u32 tmp[2] = {0, 0};
000072 4668 MOV r0,sp
000074 2100 MOVS r1,#0
000076 460a MOV r2,r1
000078 c006 STM r0!,{r1,r2}
;;;492
;;;493 while(index < 2)
00007a e01e B |L1.186|
|L1.124|
;;;494 {
;;;495 /* Loop until RXNE = 1 */
;;;496 while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET)
00007c bf00 NOP
|L1.126|
00007e 2120 MOVS r1,#0x20
000080 48d1 LDR r0,|L1.968|
000082 f7fffffe BL USART_GetFlagStatus
000086 2800 CMP r0,#0
000088 d0f9 BEQ |L1.126|
;;;497 {
;;;498 }
;;;499 tmp[index++] = (USART_ReceiveData(USART1));
00008a 48cf LDR r0,|L1.968|
00008c f7fffffe BL USART_ReceiveData
000090 4621 MOV r1,r4
000092 1c64 ADDS r4,r4,#1
000094 466a MOV r2,sp
000096 f8420021 STR r0,[r2,r1,LSL #2]
;;;500 if((tmp[index - 1] < 0x30) || (tmp[index - 1] > 0x39))
00009a 1e60 SUBS r0,r4,#1
00009c 4669 MOV r1,sp
00009e f8510020 LDR r0,[r1,r0,LSL #2]
0000a2 2830 CMP r0,#0x30
0000a4 d305 BCC |L1.178|
0000a6 1e60 SUBS r0,r4,#1
0000a8 4669 MOV r1,sp
0000aa f8510020 LDR r0,[r1,r0,LSL #2]
0000ae 2839 CMP r0,#0x39
0000b0 d903 BLS |L1.186|
|L1.178|
;;;501 {
;;;502 printf("\n\rPlease enter valid number between 0 and 9");
0000b2 a0c6 ADR r0,|L1.972|
0000b4 f7fffffe BL __1printf
;;;503 index--;
0000b8 1e64 SUBS r4,r4,#1
|L1.186|
0000ba 2c02 CMP r4,#2 ;493
0000bc d3de BCC |L1.124|
;;;504 }
;;;505 }
;;;506 /* Calculate the Corresponding value */
;;;507 index = (tmp[1] - 0x30) + ((tmp[0] - 0x30) * 10);
0000be 9801 LDR r0,[sp,#4]
0000c0 3830 SUBS r0,r0,#0x30
0000c2 9900 LDR r1,[sp,#0]
0000c4 3930 SUBS r1,r1,#0x30
0000c6 eb010181 ADD r1,r1,r1,LSL #2
0000ca eb000441 ADD r4,r0,r1,LSL #1
;;;508 /* Checks */
;;;509 if(index > value)
0000ce 42ac CMP r4,r5
0000d0 d905 BLS |L1.222|
;;;510 {
;;;511 printf("\n\rPlease enter valid number between 0 and %d", value);
0000d2 4629 MOV r1,r5
0000d4 a0c8 ADR r0,|L1.1016|
0000d6 f7fffffe BL __1printf
;;;512 return 0xFF;
0000da 20ff MOVS r0,#0xff
|L1.220|
;;;513 }
;;;514 return index;
;;;515 }
0000dc bd7c POP {r2-r6,pc}
|L1.222|
0000de b2e0 UXTB r0,r4 ;514
0000e0 e7fc B |L1.220|
;;;516
ENDP
Time_Regulate PROC
;;;312 u32 Time_Regulate(void)
;;;313 {
0000e2 b570 PUSH {r4-r6,lr}
;;;314 u32 Tmp_HH = 0xFF, Tmp_MM = 0xFF, Tmp_SS = 0xFF;
0000e4 24ff MOVS r4,#0xff
0000e6 25ff MOVS r5,#0xff
0000e8 26ff MOVS r6,#0xff
;;;315
;;;316 printf("\r\n==============Time Settings=====================================");
0000ea 48cf LDR r0,|L1.1064|
0000ec f7fffffe BL __1printf
;;;317 printf("\r\n Please Set Hours");
0000f0 a0ce ADR r0,|L1.1068|
0000f2 f7fffffe BL __1printf
;;;318
;;;319 while(Tmp_HH == 0xFF)
0000f6 e003 B |L1.256|
|L1.248|
;;;320 {
;;;321 Tmp_HH = USART_Scanf(23);
0000f8 2017 MOVS r0,#0x17
0000fa f7fffffe BL USART_Scanf
0000fe 4604 MOV r4,r0
|L1.256|
000100 2cff CMP r4,#0xff ;319
000102 d0f9 BEQ |L1.248|
;;;322 }
;;;323 printf(": %d", Tmp_HH);
000104 4621 MOV r1,r4
000106 a0cf ADR r0,|L1.1092|
000108 f7fffffe BL __1printf
;;;324 printf("\r\n Please Set Minutes");
00010c a0cf ADR r0,|L1.1100|
00010e f7fffffe BL __1printf
;;;325 while(Tmp_MM == 0xFF)
000112 e003 B |L1.284|
|L1.276|
;;;326 {
;;;327 Tmp_MM = USART_Scanf(59);
000114 203b MOVS r0,#0x3b
000116 f7fffffe BL USART_Scanf
00011a 4605 MOV r5,r0
|L1.284|
00011c 2dff CMP r5,#0xff ;325
00011e d0f9 BEQ |L1.276|
;;;328 }
;;;329 printf(": %d", Tmp_MM);
000120 4629 MOV r1,r5
000122 a0c8 ADR r0,|L1.1092|
000124 f7fffffe BL __1printf
;;;330 printf("\r\n Please Set Seconds");
000128 a0ce ADR r0,|L1.1124|
00012a f7fffffe BL __1printf
;;;331 while(Tmp_SS == 0xFF)
00012e e003 B |L1.312|
|L1.304|
;;;332 {
;;;333 Tmp_SS = USART_Scanf(59);
000130 203b MOVS r0,#0x3b
000132 f7fffffe BL USART_Scanf
000136 4606 MOV r6,r0
|L1.312|
000138 2eff CMP r6,#0xff ;331
00013a d0f9 BEQ |L1.304|
;;;334 }
;;;335 printf(": %d", Tmp_SS);
00013c 4631 MOV r1,r6
00013e a0c1 ADR r0,|L1.1092|
000140 f7fffffe BL __1printf
;;;336
;;;337 /* Return the value to store in RTC counter register */
;;;338 return((Tmp_HH*3600 + Tmp_MM*60 + Tmp_SS));
000144 f44f6061 MOV r0,#0xe10
000148 4360 MULS r0,r4,r0
00014a ebc51105 RSB r1,r5,r5,LSL #4
00014e eb000081 ADD r0,r0,r1,LSL #2
000152 4430 ADD r0,r0,r6
;;;339 }
000154 bd70 POP {r4-r6,pc}
;;;340
ENDP
Time_Adjust PROC
;;;348 void Time_Adjust(void)
;;;349 {
000156 b510 PUSH {r4,lr}
;;;350 /* Wait until last write operation on RTC registers has finished */
;;;351 RTC_WaitForLastTask();
000158 f7fffffe BL RTC_WaitForLastTask
;;;352 /* Change the current time */
;;;353 RTC_SetCounter(Time_Regulate());
00015c f7fffffe BL Time_Regulate
000160 4604 MOV r4,r0
000162 f7fffffe BL RTC_SetCounter
;;;354 /* Wait until last write operation on RTC registers has finished */
;;;355 RTC_WaitForLastTask();
000166 f7fffffe BL RTC_WaitForLastTask
;;;356 }
00016a bd10 POP {r4,pc}
;;;357
ENDP
RTC_Configuration PROC
;;;235 void RTC_Configuration(void)
;;;236 {
00016c b510 PUSH {r4,lr}
;;;237 /* Enable PWR and BKP clocks */
;;;238 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
00016e 2101 MOVS r1,#1
000170 f04f50c0 MOV r0,#0x18000000
000174 f7fffffe BL RCC_APB1PeriphClockCmd
;;;239
;;;240 /* Allow access to BKP Domain */
;;;241 PWR_BackupAccessCmd(ENABLE);
000178 2001 MOVS r0,#1
00017a f7fffffe BL PWR_BackupAccessCmd
;;;242
;;;243 /* Reset Backup Domain */
;;;244 BKP_DeInit();
00017e f7fffffe BL BKP_DeInit
;;;245
;;;246 #ifdef RTCClockSource_LSI
;;;247 /* Enable LSI */
;;;248 RCC_LSICmd(ENABLE);
;;;249 /* Wait till LSI is ready */
;;;250 while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)
;;;251 {
;;;252 }
;;;253
;;;254 /* Select LSI as RTC Clock Source */
;;;255 RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
;;;256 #elif defined RTCClockSource_LSE
;;;257 /* Enable LSE */
;;;258 RCC_LSEConfig(RCC_LSE_ON);
000182 2001 MOVS r0,#1
000184 f7fffffe BL RCC_LSEConfig
;;;259 /* Wait till LSE is ready */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -