📄 bsp_timer.txt
字号:
; generated by ARM C/C++ Compiler, 4.1 [Build 561]
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Flash\Obj\bsp_timer.o --depend=.\Flash\Obj\bsp_timer.d --cpu=Cortex-M3 --apcs=interwork -O0 --diag_suppress=870 -I..\..\Libraries\CMSIS\CM3\CoreSupport -I..\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x -I..\..\Libraries\STM32F10x_StdPeriph_Driver\inc -I..\..\User\bsp -I..\..\User\fatfs -I..\..\User -IC:\Keil\ARM\INC -IC:\Keil\ARM\INC\ST\STM32F10x -D__MICROLIB -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER ..\..\User\bsp\bsp_timer.c]
THUMB
AREA ||i.SysTick_ISR||, CODE, READONLY, ALIGN=2
SysTick_ISR PROC
;;;68 */
;;;69 void SysTick_ISR(void)
000000 b510 PUSH {r4,lr}
;;;70 {
;;;71 static uint8_t s_count = 0;
;;;72 uint8_t i;
;;;73
;;;74 for (i = 0; i < TMR_COUNT; i++)
000002 2400 MOVS r4,#0
000004 e006 B |L1.20|
|L1.6|
;;;75 {
;;;76 bsp_SoftTimerDec(&g_Tmr[i]);
000006 4912 LDR r1,|L1.80|
000008 eb0100c4 ADD r0,r1,r4,LSL #3
00000c f7fffffe BL bsp_SoftTimerDec
000010 1c60 ADDS r0,r4,#1 ;74
000012 b2c4 UXTB r4,r0 ;74
|L1.20|
000014 2c04 CMP r4,#4 ;74
000016 dbf6 BLT |L1.6|
;;;77 }
;;;78
;;;79 g_iRunTime++; /* 全局运行时间每1ms增1 */
000018 480e LDR r0,|L1.84|
00001a 6800 LDR r0,[r0,#0] ; g_iRunTime
00001c 1c40 ADDS r0,r0,#1
00001e 490d LDR r1,|L1.84|
000020 6008 STR r0,[r1,#0] ; g_iRunTime
;;;80 if (g_iRunTime == 0x7FFFFFFF)
000022 4608 MOV r0,r1
000024 6800 LDR r0,[r0,#0] ; g_iRunTime
000026 f06f4100 MVN r1,#0x80000000
00002a 4288 CMP r0,r1
00002c d102 BNE |L1.52|
;;;81 {
;;;82 g_iRunTime = 0;
00002e 2000 MOVS r0,#0
000030 4908 LDR r1,|L1.84|
000032 6008 STR r0,[r1,#0] ; g_iRunTime
|L1.52|
;;;83 }
;;;84
;;;85 if (++s_count >= 10)
000034 4808 LDR r0,|L1.88|
000036 7800 LDRB r0,[r0,#0] ; s_count
000038 1c40 ADDS r0,r0,#1
00003a b2c0 UXTB r0,r0
00003c 4906 LDR r1,|L1.88|
00003e 7008 STRB r0,[r1,#0]
000040 280a CMP r0,#0xa
000042 db03 BLT |L1.76|
;;;86 {
;;;87 s_count = 0;
000044 2000 MOVS r0,#0
000046 7008 STRB r0,[r1,#0]
;;;88
;;;89
;;;90
;;;91 /*
;;;92 下面的代码实现所有按键的检测。按键检测每隔10ms一次就行了,一般做40ms的滤波处理就可以
;;;93 有效过滤掉机械动作造成的按键抖动。
;;;94 */
;;;95 bsp_KeyPro(); /* 该函数在 bsp_button.c 中实现 */
000048 f7fffffe BL bsp_KeyPro
|L1.76|
;;;96 }
;;;97 }
00004c bd10 POP {r4,pc}
;;;98
ENDP
00004e 0000 DCW 0x0000
|L1.80|
DCD g_Tmr
|L1.84|
DCD g_iRunTime
|L1.88|
DCD s_count
AREA ||i.__set_PRIMASK||, CODE, READONLY, ALIGN=1
__set_PRIMASK PROC
;;;986 */
;;;987 static __INLINE void __set_PRIMASK(uint32_t priMask)
000000 f3808810 MSR PRIMASK,r0
;;;988 {
;;;989 register uint32_t __regPriMask __ASM("primask");
;;;990 __regPriMask = (priMask);
;;;991 }
000004 4770 BX lr
;;;992
ENDP
AREA ||i.bsp_CheckTimer||, CODE, READONLY, ALIGN=2
bsp_CheckTimer PROC
;;;188 */
;;;189 uint8_t bsp_CheckTimer(uint8_t _id)
000000 4601 MOV r1,r0
;;;190 {
;;;191 if (_id >= TMR_COUNT)
000002 2904 CMP r1,#4
000004 db01 BLT |L3.10|
;;;192 {
;;;193 return 0;
000006 2000 MOVS r0,#0
|L3.8|
;;;194 }
;;;195
;;;196 if (g_Tmr[_id].flag == 1)
;;;197 {
;;;198 g_Tmr[_id].flag = 0;
;;;199 return 1;
;;;200 }
;;;201 else
;;;202 {
;;;203 return 0;
;;;204 }
;;;205 }
000008 4770 BX lr
|L3.10|
00000a 4807 LDR r0,|L3.40|
00000c eb0000c1 ADD r0,r0,r1,LSL #3 ;196
000010 7900 LDRB r0,[r0,#4] ;196
000012 2801 CMP r0,#1 ;196
000014 d106 BNE |L3.36|
000016 2000 MOVS r0,#0 ;198
000018 4a03 LDR r2,|L3.40|
00001a eb0202c1 ADD r2,r2,r1,LSL #3 ;198
00001e 7110 STRB r0,[r2,#4] ;198
000020 2001 MOVS r0,#1 ;199
000022 e7f1 B |L3.8|
|L3.36|
000024 2000 MOVS r0,#0 ;203
000026 e7ef B |L3.8|
;;;206
ENDP
|L3.40|
DCD g_Tmr
AREA ||i.bsp_DelayMS||, CODE, READONLY, ALIGN=2
bsp_DelayMS PROC
;;;129 */
;;;130 void bsp_DelayMS(uint32_t n)
000000 b510 PUSH {r4,lr}
;;;131 {
000002 4604 MOV r4,r0
;;;132 /* 避免 n = 1 出现主程序死锁 */
;;;133 if (n <= 1)
000004 2c01 CMP r4,#1
000006 d800 BHI |L4.10|
;;;134 {
;;;135 n = 2;
000008 2402 MOVS r4,#2
|L4.10|
;;;136 }
;;;137
;;;138 __set_PRIMASK(1); /* 关中断 */
00000a 2001 MOVS r0,#1
00000c f7fffffe BL __set_PRIMASK
;;;139 g_Tmr[0].count = n;
000010 4807 LDR r0,|L4.48|
000012 6004 STR r4,[r0,#0] ; g_Tmr
;;;140 g_Tmr[0].flag = 0;
000014 2000 MOVS r0,#0
000016 4906 LDR r1,|L4.48|
000018 7108 STRB r0,[r1,#4]
;;;141 __set_PRIMASK(0); /* 开中断 */
00001a f7fffffe BL __set_PRIMASK
;;;142
;;;143 while (1)
00001e e004 B |L4.42|
|L4.32|
;;;144 {
;;;145 CPU_IDLE(); /* 此处是空操作。用户可以定义,让CPU进入IDLE状态,以降低功耗;或实现喂狗 */
;;;146
;;;147 /* 等待延迟时间到 */
;;;148 if (g_Tmr[0].flag == 1)
000020 4803 LDR r0,|L4.48|
000022 7900 LDRB r0,[r0,#4] ; g_Tmr
000024 2801 CMP r0,#1
000026 d100 BNE |L4.42|
;;;149 {
;;;150 break;
000028 e000 B |L4.44|
|L4.42|
00002a e7f9 B |L4.32|
|L4.44|
00002c bf00 NOP
;;;151 }
;;;152 }
;;;153 }
00002e bd10 POP {r4,pc}
;;;154
ENDP
|L4.48|
DCD g_Tmr
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -