📄 watchdog.txt
字号:
; generated by ARM C Compiler, ADS1.2 [Build 805]
; commandline [-errors .\err\watchdog.err -O0 -asm -g+ -cpu 5TEJ -fs -Wd -Ec -I.\include "-IC:\Program Files\ARM\ADSv1_2\INCLUDE"]
CODE32
AREA ||.text||, CODE, READONLY
Wdt_Batflt_Int PROC
;;;38 void __irq Wdt_Batflt_Int(void)
;;;39 {
|L1.0|
000000 e92d500f STMFD sp!,{r0-r3,r12,lr}
;;;40 if(rSUBSRCPND & 0x00002000){
000004 e59f0080 LDR r0,|L1.140|
000008 e5900018 LDR r0,[r0,#0x18]
00000c e3100d80 TST r0,#0x2000
000010 0a00000a BEQ |L1.64|
;;;41 rSUBSRCPND = BIT_SUB_WDT;
000014 e3a00d80 MOV r0,#0x2000
000018 e59f106c LDR r1,|L1.140|
00001c e5810018 STR r0,[r1,#0x18]
;;;42 Uart_Printf("%d ",++isWdtInt);
000020 e59f0068 LDR r0,|L1.144|
000024 e5900000 LDR r0,[r0,#0] ; isWdtInt
000028 e2800001 ADD r0,r0,#1
00002c e59f205c LDR r2,|L1.144|
000030 e5820000 STR r0,[r2,#0] ; isWdtInt
000034 e1a01000 MOV r1,r0
000038 e28f0054 ADR r0,|L1.148|
00003c ebfffffe BL _printf
;;;43 }
;;;44 if(rSUBSRCPND & 0x00004000){
|L1.64|
000040 e59f0044 LDR r0,|L1.140|
000044 e5900018 LDR r0,[r0,#0x18]
000048 e3100c40 TST r0,#0x4000
00004c 0a000004 BEQ |L1.100|
;;;45 rSUBSRCPND = BIT_WDT_BATFLT;
000050 e3a00b40 MOV r0,#0x10000
000054 e59f1030 LDR r1,|L1.140|
000058 e5810018 STR r0,[r1,#0x18]
;;;46 Uart_Printf("Battery Fault interrupt occured\n");
00005c e28f0034 ADR r0,|L1.152|
000060 ebfffffe BL _printf
;;;47 }
;;;48 ClearPending(BIT_WDT_BATFLT);
|L1.100|
000064 e3a00b40 MOV r0,#0x10000
000068 e59f101c LDR r1,|L1.140|
00006c e5810000 STR r0,[r1,#0]
000070 e1c10000 BIC r0,r1,r0
000074 e5900010 LDR r0,[r0,#0x10]
000078 e5810010 STR r0,[r1,#0x10]
00007c e1a00001 MOV r0,r1
000080 e5900010 LDR r0,[r0,#0x10]
;;;49 }
000084 e8bd500f LDMFD sp!,{r0-r3,r12,lr}
000088 e25ef004 SUBS pc,lr,#4
|L1.140|
00008c 40200000 DCD 0x40200000
|L1.144|
000090 00000000 DCD ||.bss$2||
|L1.148|
000094 00206425 DCB "%d \0"
|L1.152|
000098 74746142 DCB "Batt"
00009c 20797265 DCB "ery "
0000a0 6c756146 DCB "Faul"
0000a4 6e692074 DCB "t in"
0000a8 72726574 DCB "terr"
0000ac 20747075 DCB "upt "
0000b0 7563636f DCB "occu"
0000b4 0a646572 DCB "red\n"
0000b8 00000000 DCB "\0\0\0\0"
ENDP
Ch8_WDT_Test PROC
;;;11 void Ch8_WDT_Test(void)
;;;12 {
0000bc e92d4008 STMFD sp!,{r3,lr}
;;;13 rINTSUBMSK &= ~(BIT_SUB_WDT | ~BIT_SUB_BATFLT);
0000c0 e51f003c LDR r0,|L1.140|
0000c4 e590001c LDR r0,[r0,#0x1c]
0000c8 e2000c40 AND r0,r0,#0x4000
0000cc e51f1048 LDR r1,|L1.140|
0000d0 e581001c STR r0,[r1,#0x1c]
;;;14 rINTMSK &= ~(BIT_WDT_BATFLT); //Watch dog Interrupt service is available
0000d4 e1a00001 MOV r0,r1
0000d8 e5900008 LDR r0,[r0,#8]
0000dc e3c00b40 BIC r0,r0,#0x10000
0000e0 e5810008 STR r0,[r1,#8]
;;;15
;;;16
;;;17 pISR_WDT_BATFLT= (unsigned )Wdt_Batflt_Int;
0000e4 e59f00a4 LDR r0,|L1.400|
0000e8 e59f10a4 LDR r1,|L1.404|
0000ec e5810f60 STR r0,[r1,#0xf60]
;;;18 isWdtInt = 0;
0000f0 e3a00000 MOV r0,#0
0000f4 e51f106c LDR r1,|L1.144|
0000f8 e5810000 STR r0,[r1,#0] ; isWdtInt
;;;19
;;;20 rWTCON = 0; // wdt reset & interrupt disable
0000fc e3a00000 MOV r0,#0
000100 e59f1090 LDR r1,|L1.408|
000104 e5810000 STR r0,[r1,#0]
;;;21 rWTCON = ((PCLK/1000000-1)<<8) | (3<<3) | (1<<2); //Prescaler=0x2a(42),Clock division 128,Interrupt enable
000108 e59f008c LDR r0,|L1.412|
00010c e1c11000 BIC r1,r1,r0
000110 e5810000 STR r0,[r1,#0]
;;;22 rWTDAT = 7813 ;
000114 e59f0084 LDR r0,|L1.416|
000118 e1c11000 BIC r1,r1,r0
00011c e5810004 STR r0,[r1,#4]
;;;23 rWTCNT = 7813 ;
000120 e1c11000 BIC r1,r1,r0
000124 e5810008 STR r0,[r1,#8]
;;;24 rWTCON = rWTCON | (1<<5); //Watch-dog timer enable
000128 e1c10000 BIC r0,r1,r0
00012c e5900000 LDR r0,[r0,#0]
000130 e3800020 ORR r0,r0,#0x20
000134 e5810000 STR r0,[r1,#0]
;;;25
;;;26 while(isWdtInt != 5); // variable
000138 e1a00000 NOP
|L1.316|
00013c e51f00b4 LDR r0,|L1.144|
000140 e5900000 LDR r0,[r0,#0] ; isWdtInt
000144 e3500005 CMP r0,#5
000148 1afffffb BNE |L1.316|
;;;27
;;;28 Uart_Printf("[ WDT Reset Test]\n");
00014c e28f0050 ADR r0,|L1.420|
000150 ebfffffe BL _printf
;;;29 Uart_Printf("WDT Reset after wdt interrupt happened 5 times. \n");
000154 e28f005c ADR r0,|L1.440|
000158 ebfffffe BL _printf
;;;30
;;;31 // WDT reset enable
;;;32 rWTCON = ((PCLK/1000000-1)<<8) |( 1<<5) | (3<<3) | (1);
00015c e59f0088 LDR r0,|L1.492|
000160 e59f1030 LDR r1,|L1.408|
000164 e5810000 STR r0,[r1,#0]
;;;33 rINTSUBMSK &= (BIT_SUB_WDT | BIT_SUB_BATFLT);
000168 e24107fc SUB r0,r1,#0x3f00000
00016c e590001c LDR r0,[r0,#0x1c]
000170 e2000c60 AND r0,r0,#0x6000
000174 e24117fc SUB r1,r1,#0x3f00000
000178 e581001c STR r0,[r1,#0x1c]
;;;34 rINTMSK |= BIT_WDT_BATFLT; //WDT Interrupt Mask
00017c e1a00001 MOV r0,r1
000180 e5900008 LDR r0,[r0,#8]
000184 e3800b40 ORR r0,r0,#0x10000
000188 e5810008 STR r0,[r1,#8]
;;;35 }
00018c e8bd8008 LDMFD sp!,{r3,pc}
|L1.400|
000190 00000000 DCD Wdt_Batflt_Int
|L1.404|
000194 13fff000 DCD 0x13fff000
|L1.408|
000198 44100000 DCD 0x44100000
|L1.412|
00019c 0000321c DCD 0x0000321c
|L1.416|
0001a0 00001e85 DCD 0x00001e85
|L1.420|
0001a4 4457205b DCB "[ WD"
0001a8 65522054 DCB "T Re"
0001ac 20746573 DCB "set "
0001b0 74736554 DCB "Test"
0001b4 00000a5d DCB "]\n\0\0"
|L1.440|
0001b8 20544457 DCB "WDT "
0001bc 65736552 DCB "Rese"
0001c0 61202074 DCB "t a"
0001c4 72657466 DCB "fter"
0001c8 74647720 DCB " wdt"
0001cc 746e6920 DCB " int"
0001d0 75727265 DCB "erru"
0001d4 68207470 DCB "pt h"
0001d8 65707061 DCB "appe"
0001dc 2064656e DCB "ned "
0001e0 69742035 DCB "5 ti"
0001e4 2e73656d DCB "mes."
0001e8 00000a20 DCB " \n\0\0"
|L1.492|
0001ec 00003239 DCD 0x00003239
ENDP
AREA ||.bss||, NOINIT, ALIGN=2
isWdtInt
||.bss$2||
% 4
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -