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

📄 watchdog1.lst

📁 ADuC7020/26是ADI模拟公司开发的ARM7TDMI内核
💻 LST
字号:
ARM COMPILER V2.42,  watchdog1                                                             09/01/06  14:44:55  PAGE 1   


ARM COMPILER V2.42, COMPILATION OF MODULE watchdog1
OBJECT MODULE PLACED IN watchdog1.OBJ
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe watchdog1.c THUMB DEBUG TABS(4) 

stmt  level    source

    1          /*********************************************************************
    2          
    3           Author        : ADI - Apps            www.analog.com/MicroConverter
    4          
    5           Date          : Sept. 2005
    6          
    7           File          : Watchdog1.c
    8          
    9           Hardware      : Applicable to ADuC702x rev H or I silicon
   10                           Currently targetting ADuC7026.
   11          
   12           Description   : This example demonstrates the use of the  Watchdog interrupt.
   13                           Note that a software reset is required after watchdog interrupt
   14                           to resume code execution.
   15                           - on the four first occurences the timer is refreshed/reloaded on time
   16                           - on the fifth occurence, code is delayed and the timer creates an
   17                           interrupt
   18                  
   19          *********************************************************************/
   20          #include<aduc7026.h>
   21          
   22          void delay(int);
   23          void IRQ_Handler(void) __irq;
   24          
   25          int main(void)              
   26          {
   27   1      
   28   1      char i;
   29   1      GP1DAT = 0x01000000;            // P1.0 configured as output.
   30   1      GP4DAT = 0x04000000;            // P4.2 configured as output. LED is turned on  
   31   1      
   32   1      T3LD = 0x1000;                  // 0x1000/32768 = 125ms
   33   1      T3CON = 0xE2;                   // IRQ instead of reset, for test purposes only
   34   1      
   35   1      IRQEN = 0x00000020;             // Timer3 IRQ
   36   1      
   37   1      while (1)
   38   1          {
   39   2          for (i=0;i<4;i++){
   40   3              delay(0x30000);         
   41   3              T3CLRI = 0xff;
   42   3              GP4DAT ^= 0x00040000;
   43   3              }
   44   2          delay(0xA0000);             // too long delay => gives a watchdog interrupt
   45   2          T3CLRI = 0xff;
   46   2          GP4DAT ^= 0x00040000;
   47   2          }               
   48   1      }
   49          
   50          void delay (int length)
   51          {
   52   1          while (length >=0)
   53   1              length--;
   54   1      }
   55          
   56          /********************************************************************/
   57          /*                                                                  */
   58          /*      Interrupt Service Rountine                                  */
   59          /*                                                                  */
ARM COMPILER V2.42,  watchdog1                                                             09/01/06  14:44:55  PAGE 2   

   60          /********************************************************************/
   61          
   62          void IRQ_Handler() __irq                            
   63          {               
   64   1          if ((IRQSTA & WATCHDOG_TIMER_BIT) != 0)     // Timer3 IRQ?
   65   1          {                                           // Watchdog interrupt allows saving...
   66   2                                                      //... data before reset if necessary
   67   2              GP1DAT ^= 0x00010000;                   // Complement P1.0
   68   2              RSTSTA = 0x4;                           // Software reset
   69   2          }               
   70   1          return ;
   71   1      } 
ARM COMPILER V2.42,  watchdog1                                                             09/01/06  14:44:55  PAGE 3   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN NUMBER (__startup)



*** PUBLICS:
 PUBLIC         delay?T
 PUBLIC         IRQ_Handler?A
 PUBLIC         main



*** CODE SEGMENT '?PR?main?watchdog1':
   25: int main(void)              
 00000000  B500      PUSH        {LR}
   26: {
 00000002            ; SCOPE-START
   29: GP1DAT = 0x01000000;            // P1.0 configured as output.
 00000002  4800      LDR         R1,=0x1000000
 00000004  4800      LDR         R0,=0xFFFFF430
 00000006  6001      STR         R1,[R0,#0x0]
   30: GP4DAT = 0x04000000;            // P4.2 configured as output. LED is turned on  
 00000008  4800      LDR         R1,=0x4000000
 0000000A  4800      LDR         R0,=0xFFFFF460
 0000000C  6001      STR         R1,[R0,#0x0]
   32: T3LD = 0x1000;                  // 0x1000/32768 = 125ms
 0000000E  4800      LDR         R1,=0x1000
 00000010  4800      LDR         R0,=0xFFFF0360
 00000012  6001      STR         R1,[R0,#0x0]
   33: T3CON = 0xE2;                   // IRQ instead of reset, for test purposes only
 00000014  21E2      MOV         R1,#0xE2
 00000016  4800      LDR         R0,=0xFFFF0368
 00000018  6001      STR         R1,[R0,#0x0]
   35: IRQEN = 0x00000020;             // Timer3 IRQ
 0000001A  2120      MOV         R1,#0x20
 0000001C  4800      LDR         R0,=0xFFFF0008
 0000001E  6001      STR         R1,[R0,#0x0]
   39:     for (i=0;i<4;i++){
 00000020          L_9:
 00000020  2400      MOV         R4,#0x0
 00000022  ---- Variable 'i' assigned to Register 'R4' ----
 00000022  E00D      B           L_7  ; T=0x00000040
 00000024          L_8:
   40:         delay(0x30000);         
 00000024  4800      LDR         R0,=0x30000
 00000026  F7FF      BL          delay?T  ; T=0x0001  (1)
 00000028  FFEB      BL          delay?T  ; T=0x0001  (2)
   41:         T3CLRI = 0xff;
 0000002A  21FF      MOV         R1,#0xFF
 0000002C  4800      LDR         R0,=0xFFFF036C
 0000002E  6001      STR         R1,[R0,#0x0]
   42:         GP4DAT ^= 0x00040000;
 00000030  4800      LDR         R2,=0x40000
 00000032  4800      LDR         R0,=0xFFFFF460
 00000034  6801      LDR         R1,[R0,#0x0]
 00000036  4051      EOR         R1,R2
 00000038  6001      STR         R1,[R0,#0x0]
   43:         }
 0000003A  3401      ADD         R4,#0x1
 0000003C  0624      LSL         R4,R4,#0x18
 0000003E  0E24      LSR         R4,R4,#0x18
 00000040          L_7:
 00000040  1C20      MOV         R0,R4 ; i
 00000042  0600      LSL         R0,R0,#0x18 ; i
 00000044  0E00      LSR         R0,R0,#0x18
 00000046  2804      CMP         R0,#0x4
 00000048  DBEC      BLT         L_8  ; T=0x00000024
ARM COMPILER V2.42,  watchdog1                                                             09/01/06  14:44:55  PAGE 4   

   44:     delay(0xA0000);             // too long delay => gives a watchdog interrupt
 0000004A  4800      LDR         R0,=0xA0000
 0000004C  F7FF      BL          delay?T  ; T=0x0001  (1)
 0000004E  FFD8      BL          delay?T  ; T=0x0001  (2)
   45:     T3CLRI = 0xff;
 00000050  21FF      MOV         R1,#0xFF
 00000052  4800      LDR         R0,=0xFFFF036C
 00000054  6001      STR         R1,[R0,#0x0]
   46:     GP4DAT ^= 0x00040000;
 00000056  4800      LDR         R2,=0x40000
 00000058  4800      LDR         R0,=0xFFFFF460
 0000005A  6801      LDR         R1,[R0,#0x0]
 0000005C  4051      EOR         R1,R2
 0000005E  6001      STR         R1,[R0,#0x0]
   47:      }                
 00000060  E7DE      B           L_9  ; T=0x00000020
 00000062            ; SCOPE-END
   48: }
 00000062  BC08      POP         {R3}
 00000064  4718      BX          R3
 00000066          ENDP ; 'main'


*** CODE SEGMENT '?PR?delay?T?watchdog1':
   50: void delay (int length)
 00000000  ---- Variable 'length' assigned to Register 'R0' ----
   52:     while (length >=0)
 00000000  E000      B           L_10  ; T=0x00000004
 00000002          L_12:
 00000002  3801      SUB         R0,#0x1
 00000004          L_10:
 00000004  1C01      MOV         R1,R0 ; length
 00000006  2900      CMP         R1,#0x0 ; length
 00000008  DAFB      BGE         L_12  ; T=0x00000002
   54: }
 0000000A  4770      BX          R14
 0000000C          ENDP ; 'delay?T'


*** CODE SEGMENT '?PR?IRQ_Handler?A?watchdog1':
   62: void IRQ_Handler() __irq                            
 00000000  E92D0003  STMDB       R13!,{R0-R1}
   64:     if ((IRQSTA & WATCHDOG_TIMER_BIT) != 0)     // Timer3 IRQ?
 00000004  E5100000  LDR         R0,=0xFFFF0000
 00000008  E5900000  LDR         R0,[R0,#0x0]
 0000000C  E3100020  TST         R0,#0x0020
 00000010  0A000006  BEQ         L_14  ; Targ=0x30
   67:         GP1DAT ^= 0x00010000;                   // Complement P1.0
 00000014  E5100000  LDR         R0,=0xFFFFF430
 00000018  E5901000  LDR         R1,[R0,#0x0]
 0000001C  E2211801  EOR         R1,R1,#0x10000
 00000020  E5801000  STR         R1,[R0,#0x0]
   68:         RSTSTA = 0x4;                           // Software reset
 00000024  E3A01004  MOV         R1,#0x4
 00000028  E5100000  LDR         R0,=0xFFFF0230
 0000002C  E5801000  STR         R1,[R0,#0x0]
   69:     }                 
 00000030          L_14:
   71: } 
 00000030  E8BD0003  LDMIA       R13!,{R0-R1}
 00000034  E25EF004  SUBS        R15,R14,#0x0004
 00000038          ENDP ; 'IRQ_Handler?A'



Module Information          Static
----------------------------------
  code size            =    ------
  data size            =    ------
  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 + -