📄 wdt.lst
字号:
ARM COMPILER V2.53, wdt 27/07/06 14:35:28 PAGE 1
ARM COMPILER V2.53, COMPILATION OF MODULE wdt
OBJECT MODULE PLACED IN .\Obj\wdt.obj
COMPILER INVOKED BY: g:\Keil\ARM\BIN\CA.exe wdt.c THUMB INCDIR(..\Common\inc) DEBUG PRINT(.\LST\WDT.LST) TABS(4) OBJECT(
-.\Obj\wdt.obj)
stmt level source
1 /*****************************************************************************
2 * wdt.c: Watchdog C file for Philips LPC214x Family Microprocessors
3 *
4 * Copyright(C) 2006, Philips Semiconductor
5 * All rights reserved.
6 *
7 * History
8 * 2005.10.01 ver 1.00 Prelimnary version, first Release
9 *
10 *****************************************************************************/
11 #include "LPC214x.H" /* LPC21xx definitions */
12 #include "type.h"
13 #include "irq.h"
14 #include "timer.h"
15 #include "wdt.h"
16
17 DWORD wdt_counter;
18
19 /*****************************************************************************
20 ** Function name: WDTHandler
21 **
22 ** Descriptions: Watchdog timer interrupt handler
23 **
24 ** parameters: None
25 ** Returned value: None
26 **
27 *****************************************************************************/
28 void WDTHandler(void) __irq
29 {
30 1 WDMOD &= ~WDTOF; /* clear the time-out terrupt flag */
31 1 IENABLE; /* handles nested interrupt */
32 1 wdt_counter++;
33 1 IDISABLE;
34 1 VICVectAddr = 0; /* Acknowledge Interrupt */
35 1 }
36
37 /*****************************************************************************
38 ** Function name: WDTInit
39 **
40 ** Descriptions: Initialize watchdog timer, install the
41 ** watchdog timer interrupt handler
42 **
43 ** parameters: None
44 ** Returned value: true or false, return false if the VIC table
45 ** is full and WDT interrupt handler can be
46 ** installed.
47 **
48 *****************************************************************************/
49 DWORD WDTInit( void )
50 {
51 1 wdt_counter = 0;
52 1 if ( install_irq( WDT_INT, (void *)WDTHandler ) == FALSE )
53 1 {
54 2 return (FALSE);
55 2 }
56 1
57 1 WDTC = WDT_FEED_VALUE; /* once WDEN is set, the WDT will start after
58 1 feeding */
ARM COMPILER V2.53, wdt 27/07/06 14:35:28 PAGE 2
59 1 WDMOD = WDEN | WDRESET;
60 1
61 1 WDFEED = 0xAA; /* Feeding sequence */
62 1 WDFEED = 0x55;
63 1 return( TRUE );
64 1 }
65
66 /*****************************************************************************
67 ** Function name: WDTFeed
68 **
69 ** Descriptions: Feed watchdog timer to prevent it from timeout
70 **
71 ** parameters: None
72 ** Returned value: None
73 **
74 *****************************************************************************/
75 void WDTFeed( void )
76 {
77 1 WDFEED = 0xAA; /* Feeding sequence */
78 1 WDFEED = 0x55;
79 1 return;
80 1 }
81
82 /******************************************************************************
83 ** End Of File
84 ******************************************************************************/
ARM COMPILER V2.53, wdt 27/07/06 14:35:28 PAGE 3
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN CODE16 (install_irq?T)
*** PUBLICS:
PUBLIC WDTHandler?A
PUBLIC WDTInit?T
PUBLIC WDTFeed?T
PUBLIC wdt_counter
*** DATA SEGMENT '?DT0?wdt':
00000000 wdt_counter:
00000000 DS 4
*** CODE SEGMENT '?PR?WDTHandler?A?wdt':
28: void WDTHandler(void) __irq
00000000 E92D4003 STMDB R13!,{R0-R1,LR}
30: WDMOD &= ~WDTOF; /* clear the time-out terrupt flag */
00000004 E3A0020E MOV R0,#0xE0000000
00000008 E5901000 LDR R1,[R0,#0x0]
0000000C E3C11004 BIC R1,R1,#0x0004
00000010 E5801000 STR R1,[R0,#0x0]
31: IENABLE; /* handles nested interrupt */
00000014 E14FE000 MRS R14,SPSR
00000018 E92D4000 STMFD R13!,{LR}
0000001C E321F01F MSR CPSR_c,#0x1F
00000020 E92D4000 STMFD R13!,{LR}
32: wdt_counter++;
00000024 E5100000 LDR R0,=wdt_counter ; wdt_counter
00000028 E5901000 LDR R1,[R0,#0x0] ; wdt_counter
0000002C E2811001 ADD R1,R1,#0x0001
00000030 E5801000 STR R1,[R0,#0x0] ; wdt_counter
33: IDISABLE;
00000034 E8BD4000 LDMFD R13!,{LR}
00000038 E321F092 MSR CPSR_c,#0x92
0000003C E8BD4000 LDMFD R13!,{LR}
00000040 E16FF00E MSR SPSR_cxsf,R14
34: VICVectAddr = 0; /* Acknowledge Interrupt */
00000044 E3A01000 MOV R1,#0x0
00000048 E5100000 LDR R0,=0xFFFFF030
0000004C E5801000 STR R1,[R0,#0x0]
35: }
00000050 E8BD4003 LDMIA R13!,{R0-R1,LR}
00000054 E25EF004 SUBS R15,R14,#0x0004
00000058 ENDP ; 'WDTHandler?A'
*** CODE SEGMENT '?PR?WDTInit?T?wdt':
49: DWORD WDTInit( void )
00000000 B500 PUSH {LR}
51: wdt_counter = 0;
00000002 2000 MOV R0,#0x0
00000004 4800 LDR R1,=wdt_counter ; wdt_counter
00000006 6008 STR R0,[R1,#0x0] ; wdt_counter
52: if ( install_irq( WDT_INT, (void *)WDTHandler ) == FALSE )
00000008 4900 LDR R1,=WDTHandler?A ; WDTHandler?A
0000000A F7FF BL install_irq?T ; T=0x0001 (1)
0000000C FFF9 BL install_irq?T ; T=0x0001 (2)
0000000E 2800 CMP R0,#0x0 ; install_irq?T
00000010 D101 BNE L_1 ; T=0x00000016
54: return (FALSE);
00000012 2000 MOV R0,#0x0
00000014 E00C B L_2 ; T=0x00000030
55: }
00000016 L_1:
57: WDTC = WDT_FEED_VALUE; /* once WDEN is set, the WDT will start after
ARM COMPILER V2.53, wdt 27/07/06 14:35:28 PAGE 4
00000016 4800 LDR R1,=0x3FFFFF
00000018 4800 LDR R0,=0xE0000004
0000001A 6001 STR R1,[R0,#0x0]
59: WDMOD = WDEN | WDRESET;
0000001C 2103 MOV R1,#0x3
0000001E 4800 LDR R0,=0xE0000000
00000020 6001 STR R1,[R0,#0x0]
61: WDFEED = 0xAA; /* Feeding sequence */
00000022 21AA MOV R1,#0xAA
00000024 4800 LDR R0,=0xE0000008
00000026 6001 STR R1,[R0,#0x0]
62: WDFEED = 0x55;
00000028 2155 MOV R1,#0x55
0000002A 4800 LDR R0,=0xE0000008
0000002C 6001 STR R1,[R0,#0x0]
63: return( TRUE );
0000002E 2001 MOV R0,#0x1
64: }
00000030 L_2:
00000030 BC08 POP {R3}
00000032 4718 BX R3
00000034 ENDP ; 'WDTInit?T'
*** CODE SEGMENT '?PR?WDTFeed?T?wdt':
77: WDFEED = 0xAA; /* Feeding sequence */
00000000 21AA MOV R1,#0xAA
00000002 4800 LDR R0,=0xE0000008
00000004 6001 STR R1,[R0,#0x0]
78: WDFEED = 0x55;
00000006 2155 MOV R1,#0x55
00000008 4800 LDR R0,=0xE0000008
0000000A 6001 STR R1,[R0,#0x0]
80: }
0000000C 4770 BX R14
0000000E ENDP ; 'WDTFeed?T'
Module Information Static
----------------------------------
code size = ------
data size = 4
const size = ------
End of Module Information.
ARM COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -