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

📄 delay.txt

📁 STM32+ov7670
💻 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 + -