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

📄 bsp_timer.txt

📁 stm32-SDIO+FatFS文件系统txt-int-ascii
💻 TXT
📖 第 1 页 / 共 2 页
字号:
                          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 + -