📄 wdg.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 + -