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

📄 flash.lst

📁 ADI公司的关于光通讯模块的监控程序,在KEIL FOR ARM 的编译环境编译.程序大小约12K,芯片是ADu7020.
💻 LST
📖 第 1 页 / 共 2 页
字号:
ARM COMPILER V2.32a,  flash                                                                08/08/05  09:50:22  PAGE 1   


ARM COMPILER V2.32a, COMPILATION OF MODULE flash
OBJECT MODULE PLACED IN flash.OBJ
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe flash.c THUMB OPTIMIZE(0,SPEED) BROWSE DEBUG TABS(4) 

stmt  level    source

    1          // flash.c
    2          
    3          /********************************************************************/
    4          /*                                                                  */
    5          /*      Flash/EE Rountine                                           */
    6          /*                                                                  */
    7          /********************************************************************/
    8          #include <ADuC7020.h>
    9          #include "common.h"
   10          
   11          
   12          /********************************************************************/
   13          /*                                                                  */
   14          /*      Flash/EE Data initialize routine                            */
   15          /*                                          (source-to-flash)       */
   16          /********************************************************************/
   17          
   18          void InitFlash(void){
   19   1      
   20   1          int i;
   21   1      
   22   1          if(flash_read(0xF208)){    // check A2h[130]
   23   2      
   24   2              sff8472_table();        // load defalt data table
   25   2      
   26   2              A2h[130]=0;             // clear flash init. enable bit
   27   2      
   28   2              // Load A2h data to Flash, start address 0x0008F000
   29   2              flash_erase(0xF000);    // erase page, F000 thru F1FF
   30   2              flash_erase(0xF200);    // erase page, F200 thru F3FF
   31   2      
   32   2              for(i=0; i<256; i++){
   33   3                  flash_write(0xF000+(i*4), A2h[i]);
   34   3              }
   35   2      
   36   2              // Load A0h data to Flash, start address 0x0008F400
   37   2              flash_erase(0xF400);    // erase page, F400 thru F5FF
   38   2              flash_erase(0xF600);    // erase page, F600 thru F7FF   
   39   2      
   40   2              for(i=0; i<256; i++){
   41   3                  flash_write(0xF400+(i*4), A0h[i]);
   42   3              }
   43   2          }
   44   1      }
   45          
   46          
   47          /********************************************************************/
   48          /*                                                                  */
   49          /*      Initialize SFF8472 table in SRAM                            */
   50          /*                                          (flash-to-sram)         */
   51          /********************************************************************/
   52          void InitSFF8472(void){
   53   1      
   54   1          int i;
   55   1      
   56   1              // Map A2h data to SRAM
   57   1              for(i=0; i<256; i++){
   58   2              A2h[i] = (flash_read(0xF000+(i*4)));
   59   2              }
ARM COMPILER V2.32a,  flash                                                                08/08/05  09:50:22  PAGE 2   

   60   1      
   61   1              // Load A0h data to Flash, start address 0x0008F400
   62   1              for(i=0; i<256; i++){
   63   2              A0h[i] = (flash_read(0xF400+(i*4)));
   64   2              }
   65   1      }
   66          
   67          
   68          /********************************************************************/
   69          /*                                                                  */
   70          /*      Flash/EE Update routine                                     */
   71          /*                                                                  */
   72          /********************************************************************/
   73          void FlashUpdate(BYTE i2c_addr){
   74   1      
   75   1          int i;
   76   1      
   77   1          //FIQCLR = 0x00000200;     // clear I2C0SIRQ
   78   1      
   79   1      
   80   1          if(i2c_addr == 0xA0){
   81   2              // Load A0h data to Flash, start address 0x0008F400
   82   2              flash_erase(0xF400);    // erase page, F400 thru F5FF
   83   2              flash_erase(0xF600);    // erase page, F600 thru F7FF
   84   2              for(i=0; i<256; i++){
   85   3                  flash_write(0xF400+(i*4), A0h[i]);
   86   3              }
   87   2          }
   88   1          
   89   1          if(i2c_addr == 0xA2){
   90   2              // Load A2h data to Flash, start address 0x0008F000
   91   2              flash_erase(0xF000);    // erase page, F000 thru F1FF
   92   2              flash_erase(0xF200);    // erase page, F200 thru F2FF   
   93   2              for(i=0; i<256; i++){
   94   3                  flash_write(0xF000+(i*4), A2h[i]);
   95   3              }
   96   2          }
   97   1      
   98   1          //FIQEN = 0x00000200;     // enable I2C0SIRQ
   99   1      
  100   1      }
  101          
  102          
  103          /********************************************************************/
  104          /*                                                                  */
  105          /*      Flash/EE read routine                                       */
  106          /*                                                                  */
  107          /********************************************************************/
  108          unsigned char flash_read(unsigned short int addr){
  109   1          
  110   1          WORD cnt = 3000;
  111   1          
  112   1          FEEADR = addr;              // set address
  113   1          FEECON = 0x01;              // single read command
  114   1          //while(!(FEESTA & 0x01)){}   // wait for command completion
  115   1          
  116   1          while((cnt>1) && (!(FEESTA & 0x01))) {cnt--;}
  117   1          
  118   1          return (FEEDAT & 0xFF);     // return one byte data
  119   1      }
  120          
  121          
  122          /********************************************************************/
  123          /*                                                                  */
  124          /*      Flash/EE write routine                                      */
  125          /*                                                                  */
ARM COMPILER V2.32a,  flash                                                                08/08/05  09:50:22  PAGE 3   

  126          /********************************************************************/
  127          void flash_write(unsigned short int addr, unsigned char data){
  128   1      
  129   1          WORD cnt = 3000;
  130   1      
  131   1          FEEADR = addr;              // set address
  132   1          FEEDAT = data;              // set data value
  133   1          FEECON = 0x02;              // write command
  134   1          //while(!(FEESTA & 0x01)){}   // wait for command completion
  135   1      
  136   1          while((cnt>1) && (!(FEESTA & 0x01))) {cnt--;}
  137   1          
  138   1      }
  139          
  140          
  141          /********************************************************************/
  142          /*                                                                  */
  143          /*      Flash/EE erase routine                                      */
  144          /*                                                                  */
  145          /********************************************************************/
  146          void flash_erase(unsigned short int addr){
  147   1          
  148   1          WORD cnt = 3000;
  149   1          
  150   1          FEEADR = addr;              // set address
  151   1          FEECON = 0x05;              // page erase command
  152   1          //while(!(FEESTA & 0x01)){}   // wait for command completion
  153   1          
  154   1          while((cnt>1) && (!(FEESTA & 0x01))) {cnt--;}
  155   1      
  156   1      }
ARM COMPILER V2.32a,  flash                                                                08/08/05  09:50:22  PAGE 4   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN DATA (A0h)
 EXTERN DATA (A2h)
 EXTERN CODE16 (sff8472_table?T)



*** PUBLICS:
 PUBLIC         flash_read?T
 PUBLIC         flash_write?T
 PUBLIC         flash_erase?T
 PUBLIC         InitFlash?T
 PUBLIC         FlashUpdate?T
 PUBLIC         InitSFF8472?T



*** CODE SEGMENT '?PR?InitFlash?T?flash':
   18: void InitFlash(void){
 00000000  B500      PUSH        {LR}
 00000002  B081      SUB         R13,#0x4
 00000004            ; SCOPE-START
   22:     if(flash_read(0xF208)){    // check A2h[130]
 00000004  4800      LDR         R0,=0xF208
 00000006  F7FF      BL          flash_read?T  ; T=0x0001  (1)
 00000008  FFFB      BL          flash_read?T  ; T=0x0001  (2)
 0000000A  2800      CMP         R0,#0x0 ; flash_read?T
 0000000C  D042      BEQ         L_1  ; T=0x00000094
   24:         sff8472_table();        // load defalt data table
 0000000E  F7FF      BL          sff8472_table?T  ; T=0x0001  (1)
 00000010  FFF7      BL          sff8472_table?T  ; T=0x0001  (2)
   26:         A2h[130]=0;             // clear flash init. enable bit
 00000012  2100      MOV         R1,#0x0
 00000014  4800      LDR         R0,=A2h + 0x82 ; A2h+130
 00000016  7001      STRB        R1,[R0,#0x0] ; A2h+130
   29:         flash_erase(0xF000);    // erase page, F000 thru F1FF
 00000018  4800      LDR         R0,=0xF000
 0000001A  F7FF      BL          flash_erase?T  ; T=0x0001  (1)
 0000001C  FFF1      BL          flash_erase?T  ; T=0x0001  (2)
   30:         flash_erase(0xF200);    // erase page, F200 thru F3FF
 0000001E  4800      LDR         R0,=0xF200
 00000020  F7FF      BL          flash_erase?T  ; T=0x0001  (1)
 00000022  FFEE      BL          flash_erase?T  ; T=0x0001  (2)
   32:         for(i=0; i<256; i++){
 00000024  2100      MOV         R1,#0x0
 00000026  A800      ADD         R0,R13,#0x0
 00000028  6001      STR         R1,[R0,#0x0] ; i
 0000002A  E00F      B           L_4  ; T=0x0000004C
 0000002C          L_5:
   33:             flash_write(0xF000+(i*4), A2h[i]);
 0000002C  A800      ADD         R0,R13,#0x0
 0000002E  6800      LDR         R0,[R0,#0x0] ; i
 00000030  0080      LSL         R0,R0,#0x2
 00000032  4800      LDR         R1,=0xF000
 00000034  1840      ADD         R0,R1
 00000036  A900      ADD         R1,R13,#0x0
 00000038  680A      LDR         R2,[R1,#0x0] ; i
 0000003A  4800      LDR         R1,=A2h ; A2h
 0000003C  1889      ADD         R1,R2 ; A2h
 0000003E  7809      LDRB        R1,[R1,#0x0]
 00000040  F7FF      BL          flash_write?T  ; T=0x0001  (1)
 00000042  FFDE      BL          flash_write?T  ; T=0x0001  (2)
   34:         }
 00000044  A800      ADD         R0,R13,#0x0
 00000046  6801      LDR         R1,[R0,#0x0] ; i
 00000048  3101      ADD         R1,#0x1
 0000004A  6001      STR         R1,[R0,#0x0] ; i
ARM COMPILER V2.32a,  flash                                                                08/08/05  09:50:22  PAGE 5   

 0000004C          L_4:
 0000004C  A800      ADD         R0,R13,#0x0
 0000004E  6800      LDR         R0,[R0,#0x0] ; i
 00000050  4940      LDR         R1,=0x100
 00000052  4288      CMP         R0,R1
 00000054  DBEA      BLT         L_5  ; T=0x0000002C
   37:         flash_erase(0xF400);    // erase page, F400 thru F5FF
 00000056  4800      LDR         R0,=0xF400
 00000058  F7FF      BL          flash_erase?T  ; T=0x0001  (1)
 0000005A  FFD2      BL          flash_erase?T  ; T=0x0001  (2)
   38:         flash_erase(0xF600);    // erase page, F600 thru F7FF   
 0000005C  4800      LDR         R0,=0xF600
 0000005E  F7FF      BL          flash_erase?T  ; T=0x0001  (1)
 00000060  FFCF      BL          flash_erase?T  ; T=0x0001  (2)
   40:         for(i=0; i<256; i++){
 00000062  2100      MOV         R1,#0x0
 00000064  A800      ADD         R0,R13,#0x0
 00000066  6001      STR         R1,[R0,#0x0] ; i
 00000068  E00F      B           L_9  ; T=0x0000008A
 0000006A          L_10:
   41:             flash_write(0xF400+(i*4), A0h[i]);
 0000006A  A800      ADD         R0,R13,#0x0
 0000006C  6800      LDR         R0,[R0,#0x0] ; i
 0000006E  0080      LSL         R0,R0,#0x2
 00000070  4800      LDR         R1,=0xF400
 00000072  1840      ADD         R0,R1
 00000074  A900      ADD         R1,R13,#0x0
 00000076  680A      LDR         R2,[R1,#0x0] ; i
 00000078  4800      LDR         R1,=A0h ; A0h
 0000007A  1889      ADD         R1,R2 ; A0h
 0000007C  7809      LDRB        R1,[R1,#0x0]
 0000007E  F7FF      BL          flash_write?T  ; T=0x0001  (1)
 00000080  FFBF      BL          flash_write?T  ; T=0x0001  (2)
   42:         }
 00000082  A800      ADD         R0,R13,#0x0
 00000084  6801      LDR         R1,[R0,#0x0] ; i
 00000086  3101      ADD         R1,#0x1
 00000088  6001      STR         R1,[R0,#0x0] ; i
 0000008A          L_9:
 0000008A  A800      ADD         R0,R13,#0x0
 0000008C  6800      LDR         R0,[R0,#0x0] ; i
 0000008E  4940      LDR         R1,=0x100
 00000090  4288      CMP         R0,R1
 00000092  DBEA      BLT         L_10  ; T=0x0000006A
   43:     }
 00000094          L_1:
 00000094            ; SCOPE-END
   44: }
 00000094  B001      ADD         R13,#0x4
 00000096  BC08      POP         {R3}
 00000098  4718      BX          R3
 0000009A          ENDP ; 'InitFlash?T'


*** CODE SEGMENT '?PR?InitSFF8472?T?flash':
   52: void InitSFF8472(void){
 00000000  B500      PUSH        {LR}
 00000002  B081      SUB         R13,#0x4
 00000004            ; SCOPE-START
   57:         for(i=0; i<256; i++){
 00000004  2100      MOV         R1,#0x0
 00000006  A800      ADD         R0,R13,#0x0
 00000008  6001      STR         R1,[R0,#0x0] ; i
 0000000A  E00F      B           L_14  ; T=0x0000002C
 0000000C          L_15:
   58:         A2h[i] = (flash_read(0xF000+(i*4)));
 0000000C  A800      ADD         R0,R13,#0x0
 0000000E  6800      LDR         R0,[R0,#0x0] ; i
ARM COMPILER V2.32a,  flash                                                                08/08/05  09:50:22  PAGE 6   

 00000010  0080      LSL         R0,R0,#0x2
 00000012  4800      LDR         R1,=0xF000
 00000014  1840      ADD         R0,R1
 00000016  F7FF      BL          flash_read?T  ; T=0x0001  (1)
 00000018  FFF3      BL          flash_read?T  ; T=0x0001  (2)
 0000001A  A900      ADD         R1,R13,#0x0
 0000001C  680A      LDR         R2,[R1,#0x0] ; i

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -