📄 bsp_timer.txt
字号:
AREA ||i.bsp_GetRunTime||, CODE, READONLY, ALIGN=2
bsp_GetRunTime PROC
;;;214 */
;;;215 int32_t bsp_GetRunTime(void)
000000 b510 PUSH {r4,lr}
;;;216 {
;;;217 int runtime;
;;;218
;;;219 __set_PRIMASK(1); /* 关中断 */
000002 2001 MOVS r0,#1
000004 f7fffffe BL __set_PRIMASK
;;;220
;;;221 runtime = g_iRunTime; /* 由于在Systick中断被改写,因此关中断进行保护 */
000008 4803 LDR r0,|L5.24|
00000a 6804 LDR r4,[r0,#0] ; g_iRunTime
;;;222
;;;223 __set_PRIMASK(0); /* 开中断 */
00000c 2000 MOVS r0,#0
00000e f7fffffe BL __set_PRIMASK
;;;224
;;;225 return runtime;
000012 4620 MOV r0,r4
;;;226 }
000014 bd10 POP {r4,pc}
ENDP
000016 0000 DCW 0x0000
|L5.24|
DCD g_iRunTime
AREA ||i.bsp_InitTimer||, CODE, READONLY, ALIGN=2
bsp_InitTimer PROC
;;;37
;;;38 void bsp_InitTimer(void)
000000 b510 PUSH {r4,lr}
;;;39 {
;;;40 uint8_t i;
;;;41
;;;42 /* 清零所有的软件定时器 */
;;;43 for (i = 0; i < TMR_COUNT; i++)
000002 2000 MOVS r0,#0
000004 e008 B |L6.24|
|L6.6|
;;;44 {
;;;45 g_Tmr[i].count = 0;
000006 2100 MOVS r1,#0
000008 4a18 LDR r2,|L6.108|
00000a f8421030 STR r1,[r2,r0,LSL #3]
;;;46 g_Tmr[i].flag = 0;
00000e eb0202c0 ADD r2,r2,r0,LSL #3
000012 7111 STRB r1,[r2,#4]
000014 1c41 ADDS r1,r0,#1 ;43
000016 b2c8 UXTB r0,r1 ;43
|L6.24|
000018 2804 CMP r0,#4 ;43
00001a dbf4 BLT |L6.6|
;;;47 }
;;;48
;;;49 /*
;;;50 配置systic中断周期为1ms,并启动systick中断。
;;;51 这个函数在 \Libraries\CMSIS\CM3\CoreSupport\core_cm3.h
;;;52
;;;53 Systick中断向量在(\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm\
;;;54 startup_stm32f10x_hd.s 文件中定义为 SysTick_Handler。
;;;55 SysTick_Handler函数的实现在stm32f10x_it.c 文件。
;;;56 SysTick_Handler函数调用了SysTick_ISR()函数,在本文件末尾。
;;;57 */
;;;58 SysTick_Config(SystemCoreClock / 1000);
00001c 4a14 LDR r2,|L6.112|
00001e 6812 LDR r2,[r2,#0] ; SystemCoreClock
000020 f44f737a MOV r3,#0x3e8
000024 fbb2f1f3 UDIV r1,r2,r3
000028 f1b17f80 CMP r1,#0x1000000
00002c d300 BCC |L6.48|
00002e e01c B |L6.106|
|L6.48|
000030 f021427f BIC r2,r1,#0xff000000
000034 1e52 SUBS r2,r2,#1
000036 f04f23e0 MOV r3,#0xe000e000
00003a 615a STR r2,[r3,#0x14]
00003c bf00 NOP
00003e 175a ASRS r2,r3,#29
000040 2a00 CMP r2,#0
000042 da05 BGE |L6.80|
000044 220f MOVS r2,#0xf
000046 0112 LSLS r2,r2,#4
000048 4b0a LDR r3,|L6.116|
00004a 240b MOVS r4,#0xb
00004c 551a STRB r2,[r3,r4]
00004e e004 B |L6.90|
|L6.80|
000050 220f MOVS r2,#0xf
000052 0112 LSLS r2,r2,#4
000054 4b08 LDR r3,|L6.120|
000056 175c ASRS r4,r3,#29
000058 551a STRB r2,[r3,r4]
|L6.90|
00005a bf00 NOP
00005c 2200 MOVS r2,#0
00005e f04f23e0 MOV r3,#0xe000e000
000062 619a STR r2,[r3,#0x18]
000064 2207 MOVS r2,#7
000066 611a STR r2,[r3,#0x10]
000068 bf00 NOP
|L6.106|
;;;59 }
00006a bd10 POP {r4,pc}
;;;60
ENDP
|L6.108|
DCD g_Tmr
|L6.112|
DCD SystemCoreClock
|L6.116|
DCD 0xe000ed18
|L6.120|
DCD 0xe000e400
AREA ||i.bsp_SoftTimerDec||, CODE, READONLY, ALIGN=1
bsp_SoftTimerDec PROC
;;;106 */
;;;107 static void bsp_SoftTimerDec(SOFT_TMR *_tmr)
000000 7901 LDRB r1,[r0,#4]
;;;108 {
;;;109 if (_tmr->flag == 0)
000002 b939 CBNZ r1,|L7.20|
;;;110 {
;;;111 if (_tmr->count > 0)
000004 6801 LDR r1,[r0,#0]
000006 b129 CBZ r1,|L7.20|
;;;112 {
;;;113 /* 如果定时器变量减到1则设置定时器到达标志 */
;;;114 if (--_tmr->count == 0)
000008 6801 LDR r1,[r0,#0]
00000a 1e49 SUBS r1,r1,#1
00000c 6001 STR r1,[r0,#0]
00000e d101 BNE |L7.20|
;;;115 {
;;;116 _tmr->flag = 1;
000010 2101 MOVS r1,#1
000012 7101 STRB r1,[r0,#4]
|L7.20|
;;;117 }
;;;118 }
;;;119 }
;;;120 }
000014 4770 BX lr
;;;121
ENDP
AREA ||i.bsp_StartTimer||, CODE, READONLY, ALIGN=2
bsp_StartTimer PROC
;;;164 */
;;;165 void bsp_StartTimer(uint8_t _id, uint32_t _period)
000000 b570 PUSH {r4-r6,lr}
;;;166 {
000002 4604 MOV r4,r0
000004 460d MOV r5,r1
;;;167 if (_id >= TMR_COUNT)
000006 2c04 CMP r4,#4
000008 db00 BLT |L8.12|
|L8.10|
;;;168 {
;;;169 /* while(1); 死机 */
;;;170 return;
;;;171 }
;;;172
;;;173 __set_PRIMASK(1); /* 关中断 */
;;;174 g_Tmr[_id].count = _period;
;;;175 g_Tmr[_id].flag = 0;
;;;176 __set_PRIMASK(0); /* 开中断 */
;;;177 }
00000a bd70 POP {r4-r6,pc}
|L8.12|
00000c 2001 MOVS r0,#1 ;173
00000e f7fffffe BL __set_PRIMASK
000012 4806 LDR r0,|L8.44|
000014 f8405034 STR r5,[r0,r4,LSL #3] ;174
000018 2000 MOVS r0,#0 ;175
00001a 4904 LDR r1,|L8.44|
00001c eb0101c4 ADD r1,r1,r4,LSL #3 ;175
000020 7108 STRB r0,[r1,#4] ;175
000022 f7fffffe BL __set_PRIMASK
000026 bf00 NOP
000028 e7ef B |L8.10|
;;;178
ENDP
00002a 0000 DCW 0x0000
|L8.44|
DCD g_Tmr
AREA ||.bss||, DATA, NOINIT, ALIGN=2
g_Tmr
% 32
AREA ||.data||, DATA, ALIGN=2
g_iRunTime
DCD 0x00000000
s_count
000004 00 DCB 0x00
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -