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

📄 wdt.lst

📁 LPC214X系列ARM在KEIL编译环境下的所以例程
💻 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 + -