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

📄 systick.txt

📁 STM32手持式示波器源代码
💻 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 + -