📄 delay.txt
字号:
; generated by ARM C/C++ Compiler, 4.1 [Build 481]
; commandline ArmCC [--debug -c --asm --interleave -o.\OBJ\delay.o --depend=.\OBJ\delay.d --cpu=Cortex-M3 --apcs=interwork -O0 -I..\Demo -I.\HARDWARE\EXTI -I.\HARDWARE\KEY -I.\HARDWARE\LCD -I.\HARDWARE\LED -I.\HARDWARE\TIMER -I.\HARDWARE\WDG -I.\SYSTEM\delay -I.\SYSTEM\sys -I.\SYSTEM\usart -I.\USER -IC:\Keil\ARM\INC -IC:\Keil\ARM\INC\ST\STM32F10x --omf_browse=.\OBJ\delay.crf SYSTEM\delay\delay.c]
THUMB
AREA ||.text||, CODE, READONLY, ALIGN=2
delay_init PROC
;;;15 //SYSCLK:系统时钟
;;;16 void delay_init(u8 SYSCLK)
000000 f04f21e0 MOV r1,#0xe000e000
;;;17 {
;;;18 SysTick->CTRL&=0xfffffffb;//bit2清空,选择外部时钟 HCLK/8
000004 6909 LDR r1,[r1,#0x10]
000006 f0210104 BIC r1,r1,#4
00000a f04f22e0 MOV r2,#0xe000e000
00000e 6111 STR r1,[r2,#0x10]
;;;19 fac_us=SYSCLK/8;
000010 17c2 ASRS r2,r0,#31
000012 eb007252 ADD r2,r0,r2,LSR #29
000016 10d2 ASRS r2,r2,#3
000018 4b1f LDR r3,|L1.152|
00001a 701a STRB r2,[r3,#0]
;;;20 fac_ms=(u16)fac_us*1000;
00001c 4619 MOV r1,r3
00001e 7809 LDRB r1,[r1,#0] ; fac_us
000020 f44f727a MOV r2,#0x3e8
000024 4351 MULS r1,r2,r1
000026 4a1d LDR r2,|L1.156|
000028 8011 STRH r1,[r2,#0]
;;;21 }
00002a 4770 BX lr
;;;22 //延时nms
ENDP
delay_ms PROC
;;;27 //对72M条件下,nms<=1864
;;;28 void delay_ms(u16 nms)
00002c 4601 MOV r1,r0
;;;29 {
;;;30 u32 temp;
;;;31 SysTick->LOAD=(u32)nms*fac_ms;//时间加载(SysTick->LOAD为24bit)
00002e 4a1b LDR r2,|L1.156|
000030 8812 LDRH r2,[r2,#0] ; fac_ms
000032 434a MULS r2,r1,r2
000034 f04f23e0 MOV r3,#0xe000e000
000038 615a STR r2,[r3,#0x14]
;;;32 SysTick->VAL =0x00; //清空计数器
00003a 2200 MOVS r2,#0
00003c 619a STR r2,[r3,#0x18]
;;;33 SysTick->CTRL=0x01 ; //开始倒数
00003e 2201 MOVS r2,#1
000040 611a STR r2,[r3,#0x10]
;;;34 do
000042 bf00 NOP
|L1.68|
;;;35 {
;;;36 temp=SysTick->CTRL;
000044 f04f22e0 MOV r2,#0xe000e000
000048 6910 LDR r0,[r2,#0x10]
;;;37 }
;;;38 while(temp&0x01&&!(temp&(1<<16)));//等待时间到达
00004a f0100f01 TST r0,#1
00004e d002 BEQ |L1.86|
000050 f4103f80 TST r0,#0x10000
000054 d0f6 BEQ |L1.68|
|L1.86|
;;;39 SysTick->CTRL=0x00; //关闭计数器
000056 2200 MOVS r2,#0
000058 f04f23e0 MOV r3,#0xe000e000
00005c 611a STR r2,[r3,#0x10]
;;;40 SysTick->VAL =0X00; //清空计数器
00005e 619a STR r2,[r3,#0x18]
;;;41 }
000060 4770 BX lr
;;;42 //延时nus
ENDP
delay_us PROC
;;;43 //nus为要延时的us数.
;;;44 void delay_us(u32 nus)
000062 4601 MOV r1,r0
;;;45 {
;;;46 u32 temp;
;;;47 SysTick->LOAD=nus*fac_us; //时间加载
000064 4a0c LDR r2,|L1.152|
000066 7812 LDRB r2,[r2,#0] ; fac_us
000068 434a MULS r2,r1,r2
00006a f04f23e0 MOV r3,#0xe000e000
00006e 615a STR r2,[r3,#0x14]
;;;48 SysTick->VAL=0x00; //清空计数器
000070 2200 MOVS r2,#0
000072 619a STR r2,[r3,#0x18]
;;;49 SysTick->CTRL=0x01 ; //开始倒数
000074 2201 MOVS r2,#1
000076 611a STR r2,[r3,#0x10]
;;;50 do
000078 bf00 NOP
|L1.122|
;;;51 {
;;;52 temp=SysTick->CTRL;
00007a f04f22e0 MOV r2,#0xe000e000
00007e 6910 LDR r0,[r2,#0x10]
;;;53 }
;;;54 while(temp&0x01&&!(temp&(1<<16)));//等待时间到达
000080 f0100f01 TST r0,#1
000084 d002 BEQ |L1.140|
000086 f4103f80 TST r0,#0x10000
00008a d0f6 BEQ |L1.122|
|L1.140|
;;;55 SysTick->CTRL=0x00; //关闭计数器
00008c 2200 MOVS r2,#0
00008e f04f23e0 MOV r3,#0xe000e000
000092 611a STR r2,[r3,#0x10]
;;;56 SysTick->VAL =0X00; //清空计数器
000094 619a STR r2,[r3,#0x18]
;;;57 }
000096 4770 BX lr
;;;58
ENDP
|L1.152|
DCD fac_us
|L1.156|
DCD fac_ms
AREA ||.data||, DATA, ALIGN=1
fac_us
000000 0000 DCB 0x00,0x00
fac_ms
000002 0000 DCW 0x0000
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -