📄 systick.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\systick.o --depend=.\Obj\systick.d --device=DARMSTM --apcs=interwork -O0 -Otime -I..\..\Libraries\CMSIS\Core\CM3 -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\Source\inc -Id:\Keil\ARM\INC\ST\STM32F10x -D__MICROLIB -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER ..\..\Source\src\systick.c]
THUMB
AREA ||i.CheckTimer||, CODE, READONLY, ALIGN=2
CheckTimer PROC
;;;123 */
;;;124 uint8_t CheckTimer(uint8_t _id)
000000 4601 MOV r1,r0
;;;125 {
;;;126 if (_id >= TMR_COUNT)
000002 2904 CMP r1,#4
000004 db01 BLT |L1.10|
;;;127 {
;;;128 return 0;
000006 2000 MOVS r0,#0
|L1.8|
;;;129 }
;;;130
;;;131 if (g_Tmr[_id].flag == 1)
;;;132 {
;;;133 g_Tmr[_id].flag = 0;
;;;134 return 1;
;;;135 }
;;;136 return 0;
;;;137 }
000008 4770 BX lr
|L1.10|
00000a 4807 LDR r0,|L1.40|
00000c eb0000c1 ADD r0,r0,r1,LSL #3 ;131
000010 7900 LDRB r0,[r0,#4] ;131
000012 2801 CMP r0,#1 ;131
000014 d106 BNE |L1.36|
000016 2000 MOVS r0,#0 ;133
000018 4a03 LDR r2,|L1.40|
00001a eb0202c1 ADD r2,r2,r1,LSL #3 ;133
00001e 7110 STRB r0,[r2,#4] ;133
000020 2001 MOVS r0,#1 ;134
000022 e7f1 B |L1.8|
|L1.36|
000024 2000 MOVS r0,#0 ;136
000026 e7ef B |L1.8|
;;;138
ENDP
|L1.40|
DCD g_Tmr
AREA ||i.DelayMS||, CODE, READONLY, ALIGN=2
DelayMS PROC
;;;76 */
;;;77 void DelayMS(uint32_t n)
000000 2801 CMP r0,#1
;;;78 {
;;;79 /* 避免 n = 1 出现主程序死锁 */
;;;80 if (n == 1)
000002 d100 BNE |L2.6|
;;;81 {
;;;82 n = 2;
000004 2002 MOVS r0,#2
|L2.6|
;;;83 }
;;;84 g_Tmr[0].count = n;
000006 4907 LDR r1,|L2.36|
000008 6008 STR r0,[r1,#0] ; g_Tmr
;;;85 g_Tmr[0].flag = 0;
00000a 2100 MOVS r1,#0
00000c 4a05 LDR r2,|L2.36|
00000e 7111 STRB r1,[r2,#4]
;;;86
;;;87 /* while 循环体最好让CPU进入IDLE状态,已降低功耗 */
;;;88 while (1)
000010 e004 B |L2.28|
|L2.18|
;;;89 {
;;;90 CPU_IDLE();
;;;91
;;;92 if (g_Tmr[0].flag == 1)
000012 4904 LDR r1,|L2.36|
000014 7909 LDRB r1,[r1,#4] ; g_Tmr
000016 2901 CMP r1,#1
000018 d100 BNE |L2.28|
;;;93 {
;;;94 break;
00001a e000 B |L2.30|
|L2.28|
00001c e7f9 B |L2.18|
|L2.30|
00001e bf00 NOP
;;;95 }
;;;96 }
;;;97 }
000020 4770 BX lr
;;;98
ENDP
000022 0000 DCW 0x0000
|L2.36|
DCD g_Tmr
AREA ||i.SoftTimerDec||, CODE, READONLY, ALIGN=1
SoftTimerDec PROC
;;;31 */
;;;32 static void SoftTimerDec(SOFT_TMR *_tmr)
000000 6801 LDR r1,[r0,#0]
;;;33 {
;;;34 if (_tmr->count > 0)
000002 b129 CBZ r1,|L3.16|
;;;35 {
;;;36 if (--_tmr->count == 0)
000004 6801 LDR r1,[r0,#0]
000006 1e49 SUBS r1,r1,#1
000008 6001 STR r1,[r0,#0]
00000a d101 BNE |L3.16|
;;;37 {
;;;38 _tmr->flag = 1;
00000c 2101 MOVS r1,#1
00000e 7101 STRB r1,[r0,#4]
|L3.16|
;;;39 }
;;;40 }
;;;41 }
000010 4770 BX lr
;;;42
ENDP
AREA ||i.StartTimer||, CODE, READONLY, ALIGN=2
StartTimer PROC
;;;106 */
;;;107 void StartTimer(uint8_t _id, uint32_t _period)
000000 2804 CMP r0,#4
;;;108 {
;;;109 if (_id >= TMR_COUNT)
000002 db00 BLT |L4.6|
|L4.4|
;;;110 {
;;;111 return;
;;;112 }
;;;113
;;;114 g_Tmr[_id].count = _period;
;;;115 g_Tmr[_id].flag = 0;
;;;116 }
000004 4770 BX lr
|L4.6|
000006 4a04 LDR r2,|L4.24|
000008 f8421030 STR r1,[r2,r0,LSL #3] ;114
00000c 2200 MOVS r2,#0 ;115
00000e 4b02 LDR r3,|L4.24|
000010 eb0303c0 ADD r3,r3,r0,LSL #3 ;115
000014 711a STRB r2,[r3,#4] ;115
000016 e7f5 B |L4.4|
;;;117
ENDP
|L4.24|
DCD g_Tmr
AREA ||i.SysTick_ISR||, CODE, READONLY, ALIGN=2
SysTick_ISR PROC
;;;48 */
;;;49 void SysTick_ISR(void)
000000 b510 PUSH {r4,lr}
;;;50 {
;;;51 static uint8_t s_count = 0;
;;;52 uint8_t i;
;;;53
;;;54 for (i = 0; i < TMR_COUNT; i++)
000002 2400 MOVS r4,#0
000004 e006 B |L5.20|
|L5.6|
;;;55 {
;;;56 SoftTimerDec(&g_Tmr[i]);
000006 490b LDR r1,|L5.52|
000008 eb0100c4 ADD r0,r1,r4,LSL #3
00000c f7fffffe BL SoftTimerDec
000010 1c60 ADDS r0,r4,#1 ;54
000012 b2c4 UXTB r4,r0 ;54
|L5.20|
000014 2c04 CMP r4,#4 ;54
000016 dbf6 BLT |L5.6|
;;;57 }
;;;58
;;;59 /* 下面的代码实现所有按键的检测
;;;60 按键检测每隔10ms一次就行了,一般做40ms的滤波处理就可以有效过滤掉机械动作造成的
;;;61 按键抖动。
;;;62 */
;;;63 if (++s_count >= 10)
000018 4807 LDR r0,|L5.56|
00001a 7800 LDRB r0,[r0,#0] ; s_count
00001c 1c40 ADDS r0,r0,#1
00001e b2c0 UXTB r0,r0
000020 4905 LDR r1,|L5.56|
000022 7008 STRB r0,[r1,#0]
000024 280a CMP r0,#0xa
000026 db03 BLT |L5.48|
;;;64 {
;;;65 s_count = 0;
000028 2000 MOVS r0,#0
00002a 7008 STRB r0,[r1,#0]
;;;66
;;;67 KeyPro(); /* 该函数在 button.c 中实现 */
00002c f7fffffe BL KeyPro
|L5.48|
;;;68 }
;;;69 }
000030 bd10 POP {r4,pc}
;;;70
ENDP
000032 0000 DCW 0x0000
|L5.52|
DCD g_Tmr
|L5.56|
DCD ||.data||
AREA ||.bss||, DATA, NOINIT, ALIGN=2
g_Tmr
% 32
AREA ||.data||, DATA, ALIGN=0
s_count
000000 00 DCB 0x00
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -