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

📄 wdg.txt

📁 STM32+ov7670
💻 TXT
字号:
; generated by ARM C/C++ Compiler, 4.1 [Build 481]
; commandline ArmCC [--debug -c --asm --interleave -o.\OBJ\wdg.o --depend=.\OBJ\wdg.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\wdg.crf HARDWARE\WDG\wdg.c]
                          THUMB

                          AREA ||.text||, CODE, READONLY, ALIGN=2

                  IWDG_Init PROC
;;;16     //时间计算(大概):Tout=40K/((4*2^prer)*rlr)值.
;;;17     void IWDG_Init(u8 prer,u16 rlr) 
000000  f2455255          MOV      r2,#0x5555
;;;18     {
;;;19     	IWDG->KR=0X5555;//使能对IWDG->PR和IWDG->RLR的写		 										  
000004  4b3d              LDR      r3,|L1.252|
000006  601a              STR      r2,[r3,#0]
;;;20       	IWDG->PR=prer;  //LSI/32=40Khz/4*2^pre   
000008  461a              MOV      r2,r3
00000a  6050              STR      r0,[r2,#4]
;;;21       	IWDG->RLR=rlr;  //从加载寄存器 IWDG->RLR  
00000c  6091              STR      r1,[r2,#8]
;;;22     	IWDG->KR=0XAAAA;//reload											   
00000e  f64a22aa          MOV      r2,#0xaaaa
000012  601a              STR      r2,[r3,#0]
;;;23       	IWDG->KR=0XCCCC;//使能看门狗	
000014  f64c42cc          MOV      r2,#0xcccc
000018  601a              STR      r2,[r3,#0]
;;;24     }
00001a  4770              BX       lr
;;;25     //喂独立看门狗
                          ENDP

                  IWDG_Feed PROC
;;;26     void IWDG_Feed(void)
00001c  f64a20aa          MOV      r0,#0xaaaa
;;;27     {
;;;28     	IWDG->KR=0XAAAA;//reload											   
000020  4936              LDR      r1,|L1.252|
000022  6008              STR      r0,[r1,#0]
;;;29     }
000024  4770              BX       lr
;;;30     
                          ENDP

                  WWDG_Init PROC
;;;37     //低2位有效.Fwwdg=PCLK1/4096/2^fprer.
;;;38     void WWDG_Init(u8 tr,u8 wr,u8 fprer)
000026  b570              PUSH     {r4-r6,lr}
;;;39     {							  
000028  4604              MOV      r4,r0
00002a  460d              MOV      r5,r1
00002c  4616              MOV      r6,r2
;;;40     	RCC->APB1ENR|=1<<11;	//使能wwdg时钟
00002e  4834              LDR      r0,|L1.256|
000030  69c0              LDR      r0,[r0,#0x1c]
000032  f4406000          ORR      r0,r0,#0x800
000036  4932              LDR      r1,|L1.256|
000038  61c8              STR      r0,[r1,#0x1c]
;;;41     	WWDG_CNT=tr&WWDG_CNT;   //初始化WWDG_CNT.									   
00003a  4932              LDR      r1,|L1.260|
00003c  7809              LDRB     r1,[r1,#0]  ; WWDG_CNT
00003e  ea040001          AND      r0,r4,r1
000042  4930              LDR      r1,|L1.260|
000044  7008              STRB     r0,[r1,#0]
;;;42     	WWDG->CFR|=fprer<<7;    //PCLK1/4096再除2^fprer
000046  4830              LDR      r0,|L1.264|
000048  6800              LDR      r0,[r0,#0]
00004a  ea4010c6          ORR      r0,r0,r6,LSL #7
00004e  492f              LDR      r1,|L1.268|
000050  f8c10c04          STR      r0,[r1,#0xc04]
;;;43     	WWDG->CFR|=1<<9;        //使能中断
000054  4608              MOV      r0,r1
000056  f8d00c04          LDR      r0,[r0,#0xc04]
00005a  f4407000          ORR      r0,r0,#0x200
00005e  f8c10c04          STR      r0,[r1,#0xc04]
;;;44     	WWDG->CFR&=0XFF80;     
000062  4829              LDR      r0,|L1.264|
000064  6800              LDR      r0,[r0,#0]
000066  f64f7180          MOV      r1,#0xff80
00006a  ea000001          AND      r0,r0,r1
00006e  4927              LDR      r1,|L1.268|
000070  f8c10c04          STR      r0,[r1,#0xc04]
;;;45     	WWDG->CFR|=wr;		    //设定窗口值     
000074  4608              MOV      r0,r1
000076  f8d00c04          LDR      r0,[r0,#0xc04]
00007a  ea400005          ORR      r0,r0,r5
00007e  f8c10c04          STR      r0,[r1,#0xc04]
;;;46     	WWDG->CR|=WWDG_CNT|(1<<7); //开启看门狗,设置7位计数器   							   
000082  4823              LDR      r0,|L1.272|
000084  6800              LDR      r0,[r0,#0]
000086  491f              LDR      r1,|L1.260|
000088  7809              LDRB     r1,[r1,#0]  ; WWDG_CNT
00008a  f0410180          ORR      r1,r1,#0x80
00008e  ea400001          ORR      r0,r0,r1
000092  491e              LDR      r1,|L1.268|
000094  f8c10c00          STR      r0,[r1,#0xc00]
;;;47     	MY_NVIC_Init(2,3,WWDG_IRQChannel,2);//抢占2,子优先级3,组2	   
000098  f04f0302          MOV      r3,#2
00009c  f04f0200          MOV      r2,#0
0000a0  f04f0103          MOV      r1,#3
0000a4  4618              MOV      r0,r3
0000a6  f7fffffe          BL       MY_NVIC_Init
;;;48     }
0000aa  bd70              POP      {r4-r6,pc}
;;;49     //重设置WWDG计数器的值
                          ENDP

                  WWDG_Set_Counter PROC
;;;50     void WWDG_Set_Counter(u8 cnt)
0000ac  4918              LDR      r1,|L1.272|
;;;51     {
;;;52     	WWDG->CR|=(cnt&0x7F);//重设置7位计数器
0000ae  6809              LDR      r1,[r1,#0]
0000b0  f000027f          AND      r2,r0,#0x7f
0000b4  ea410102          ORR      r1,r1,r2
0000b8  4a14              LDR      r2,|L1.268|
0000ba  f8c21c00          STR      r1,[r2,#0xc00]
;;;53     }
0000be  4770              BX       lr
;;;54     //窗口看门狗中断服务程序
                          ENDP

                  WWDG_IRQHandler PROC
;;;55     void WWDG_IRQHandler(void)
0000c0  b510              PUSH     {r4,lr}
;;;56     {			
;;;57     	u8 wr,tr;
;;;58     	wr=WWDG->CFR&0X7F;
0000c2  4811              LDR      r0,|L1.264|
0000c4  6800              LDR      r0,[r0,#0]
0000c6  f000037f          AND      r3,r0,#0x7f
;;;59     	tr=WWDG->CR&0X7F;				    
0000ca  4810              LDR      r0,|L1.268|
0000cc  f8d00c00          LDR      r0,[r0,#0xc00]
0000d0  f000047f          AND      r4,r0,#0x7f
;;;60     	if(tr<wr)WWDG_Set_Counter(WWDG_CNT);//只有当计数器的值,小于窗口寄存器的值才能写CR!!	 
0000d4  429c              CMP      r4,r3
0000d6  da03              BGE      |L1.224|
0000d8  480a              LDR      r0,|L1.260|
0000da  7800              LDRB     r0,[r0,#0]  ; WWDG_CNT
0000dc  f7fffffe          BL       WWDG_Set_Counter
                  |L1.224|
;;;61     	WWDG->SR=0X00;//清除提前唤醒中断标志位
0000e0  2000              MOVS     r0,#0
0000e2  490c              LDR      r1,|L1.276|
0000e4  6008              STR      r0,[r1,#0]
;;;62     	LED1=!LED1;
0000e6  480c              LDR      r0,|L1.280|
0000e8  f8d00184          LDR      r0,[r0,#0x184]
0000ec  b908              CBNZ     r0,|L1.242|
0000ee  2001              MOVS     r0,#1
0000f0  e000              B        |L1.244|
                  |L1.242|
0000f2  2000              MOVS     r0,#0
                  |L1.244|
0000f4  4909              LDR      r1,|L1.284|
0000f6  6008              STR      r0,[r1,#0]
;;;63     }
0000f8  bd10              POP      {r4,pc}
;;;64     
                          ENDP

0000fa  0000              DCW      0x0000
                  |L1.252|
                          DCD      0x40003000
                  |L1.256|
                          DCD      0x40021000
                  |L1.260|
                          DCD      WWDG_CNT
                  |L1.264|
                          DCD      0x40002c04
                  |L1.268|
                          DCD      0x40002000
                  |L1.272|
                          DCD      0x40002c00
                  |L1.276|
                          DCD      0x40002c08
                  |L1.280|
                          DCD      0x42210000
                  |L1.284|
                          DCD      0x42210184

                          AREA ||.data||, DATA, ALIGN=0

                  WWDG_CNT
000000  7f                DCB      0x7f

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -