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

📄 diag.lst

📁 ADI公司的关于光通讯模块的监控程序,在KEIL FOR ARM 的编译环境编译.程序大小约12K,芯片是ADu7020.
💻 LST
📖 第 1 页 / 共 5 页
字号:
  238   2          }
  239   1      }
  240          
  241          /********************************************************************/
  242          /*                                                                  */
  243          /*      Rx Power Diagnostic routine                                 */
  244          /*                                                                  */
  245          /********************************************************************/
  246          void rx_power_diag(BYTE msb, BYTE lsb, BYTE addr){
  247   1      
  248   1          BYTE result;
  249   1          HALFWORD monitor = (msb<<8) + lsb;
  250   1          HALFWORD high_alarm =   (A2h[addr  ]<<8) + A2h[addr+1];
  251   1          HALFWORD low_alarm =    (A2h[addr+2]<<8) + A2h[addr+3];
  252   1          HALFWORD high_warning = (A2h[addr+4]<<8) + A2h[addr+5];
  253   1          HALFWORD low_warning =  (A2h[addr+6]<<8) + A2h[addr+7];
  254   1      
  255   1          if (monitor>high_alarm) result=5;
  256   1          else if (monitor>high_warning && monitor<=high_alarm) result=4;
  257   1          else if (monitor<=high_warning && monitor>=low_warning) result=3;
ARM COMPILER V2.32a,  diag                                                                 08/08/05  09:50:22  PAGE 5   

  258   1          else if (monitor<low_warning && monitor>= low_alarm) result=2;
  259   1          else result=1;
  260   1      
  261   1          switch (result)
  262   1          {
  263   2              case 5:
  264   2                  A2h[113] |= 0x80;       // set high alarm flag bit7
  265   2                  A2h[117] |= 0x80;       // set high warning flag bit7
  266   2                  A2h[117] &= 0xBF;       // clear low warning flag bit6
  267   2                  A2h[113] &= 0xBF;       // clear low alarm flag bit6
  268   2                  break;
  269   2              case 4:
  270   2                  A2h[113] &= 0x7F;       // clear high alarm flag bit7
  271   2                  A2h[117] |= 0x80;       // set high warning flag bit7
  272   2                  A2h[117] &= 0xBF;       // clear low warning flag bit6
  273   2                  A2h[113] &= 0xBF;       // clear low alarm flag bit6
  274   2                  break;
  275   2              case 3:
  276   2                  A2h[113] &= 0x7F;       // clear high alarm flag bit7
  277   2                  A2h[117] &= 0x7F;       // clear high warning flag bit7
  278   2                  A2h[117] &= 0xBF;       // clear low warning flag bit6
  279   2                  A2h[113] &= 0xBF;       // clear low alarm flag bit6
  280   2                  break;
  281   2              case 2:
  282   2                  A2h[113] &= 0x7F;       // clear high alarm flag bit7
  283   2                  A2h[117] &= 0x7F;       // clear high warning flag bit7
  284   2                  A2h[117] |= 0x40;       // set low warning flag bit6
  285   2                  A2h[113] &= 0xBF;       // clear low alarm flag bit6
  286   2                  break;
  287   2              case 1:
  288   2                  A2h[113] &= 0x7F;       // clear high alarm flag bit7
  289   2                  A2h[117] &= 0x7F;       // clear high warning flag bit7
  290   2                  A2h[117] |= 0x40;       // set low warning flag bit6
  291   2                  A2h[113] |= 0x40;       // set low alarm flag bit6
  292   2                  break;
  293   2          }
  294   1      }
  295          
  296          
  297          /********************************************************************/
  298          /*                                                                  */
  299          /*      Check fault recovery status                                 */
  300          /*                                                                  */
  301          /********************************************************************/
  302          void fault_recovery_check(void){
  303   1      
  304   1              // latch Tx Laser Fault condition
  305   1              if (!(GP0DAT & 0x00000010))     // check if Laser fault recovered   
  306   1              {
  307   2                  IRQEN |= 0x00008000;        // enable XIRQ0 again
  308   2                  A2h[110] &= 0xFB;           // clear bit2
  309   2              }
  310   1      
  311   1              // latch Tx Laser disable state
  312   1              if (!(GP0DAT & 0x00000020))     // check if Laser disable recovered   
  313   1              {
  314   2                  IRQEN |= 0x00040000;        // enable XIRQ1 again
  315   2                  A2h[110] &= 0x7F;           // clear bit7
  316   2              }
  317   1      
  318   1      /*
  319   1              // latch Rx LOS
  320   1              if (!(GP1DAT & 0x00000010))     // check if LOS recovered   
  321   1              {
  322   1                  IRQEN |= 0x00080000;        // enable PLAIRQ0 again
  323   1                  A2h[110] &= 0xFD;           // clear bit1
ARM COMPILER V2.32a,  diag                                                                 08/08/05  09:50:22  PAGE 6   

  324   1              }
  325   1      
  326   1              // latch Rx Rate Sel
  327   1              if (!(GP1DAT & 0x00000020))     // check if Rate Sel is LOW state   
  328   1              {
  329   1                  IRQEN |= 0x00100000;        // enable PLAIRQ1 again
  330   1                  A2h[110] &= 0xEF;           // clear bit4
  331   1              }
  332   1      */
  333   1      }
  334          
  335          /********************************************************************/
  336          /*                                                                  */
  337          /*      Check LOS and RateSel bits                                  */
  338          /*                                                                  */
  339          /********************************************************************/
  340          void check_los_ratesel(void){
  341   1      
  342   1          // LOS P1.4
  343   1          if((GP1DAT & 0x00000010)) A2h[110] |= 0x02;    // set bit1(LOS)
  344   1          else A2h[110] &= 0xFD;                        // clear bit1
  345   1          
  346   1          // RateSel P1.5
  347   1          if((GP1DAT & 0x00000020)) A2h[110] |= 0x10;    // set bit4(RateSel)
  348   1          else A2h[110] &= 0xEF;           // clear bit4 
  349   1      
  350   1      }
  351          
ARM COMPILER V2.32a,  diag                                                                 08/08/05  09:50:22  PAGE 7   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN DATA (A2h)



*** PUBLICS:
 PUBLIC         temp_diag?T
 PUBLIC         voltage_diag?T
 PUBLIC         tx_bias_diag?T
 PUBLIC         tx_power_diag?T
 PUBLIC         rx_power_diag?T
 PUBLIC         fault_recovery_check?T
 PUBLIC         diag?T
 PUBLIC         check_los_ratesel?T



*** CODE SEGMENT '?PR?diag?T?diag':
   11: void diag(void){
 00000000  B500      PUSH        {LR}
   12:     temp_diag(A2h[96], A2h[97], 0);
 00000002  4800      LDR         R0,=A2h + 0x60 ; A2h+96
 00000004  7800      LDRB        R0,[R0,#0x0] ; A2h+96
 00000006  4800      LDR         R1,=A2h + 0x61 ; A2h+97
 00000008  7809      LDRB        R1,[R1,#0x0] ; A2h+97
 0000000A  2200      MOV         R2,#0x0
 0000000C  F7FF      BL          temp_diag?T  ; T=0x0001  (1)
 0000000E  FFF8      BL          temp_diag?T  ; T=0x0001  (2)
   13:     voltage_diag(A2h[98], A2h[99], 8);
 00000010  4800      LDR         R0,=A2h + 0x62 ; A2h+98
 00000012  7800      LDRB        R0,[R0,#0x0] ; A2h+98
 00000014  4800      LDR         R1,=A2h + 0x63 ; A2h+99
 00000016  7809      LDRB        R1,[R1,#0x0] ; A2h+99
 00000018  2208      MOV         R2,#0x8
 0000001A  F7FF      BL          voltage_diag?T  ; T=0x0001  (1)
 0000001C  FFF1      BL          voltage_diag?T  ; T=0x0001  (2)
   14:     tx_bias_diag(A2h[100], A2h[101], 16);
 0000001E  4800      LDR         R0,=A2h + 0x64 ; A2h+100
 00000020  7800      LDRB        R0,[R0,#0x0] ; A2h+100
 00000022  4800      LDR         R1,=A2h + 0x65 ; A2h+101
 00000024  7809      LDRB        R1,[R1,#0x0] ; A2h+101
 00000026  2210      MOV         R2,#0x10
 00000028  F7FF      BL          tx_bias_diag?T  ; T=0x0001  (1)
 0000002A  FFEA      BL          tx_bias_diag?T  ; T=0x0001  (2)
   15:     tx_power_diag(A2h[102], A2h[103], 24);
 0000002C  4800      LDR         R0,=A2h + 0x66 ; A2h+102
 0000002E  7800      LDRB        R0,[R0,#0x0] ; A2h+102
 00000030  4800      LDR         R1,=A2h + 0x67 ; A2h+103
 00000032  7809      LDRB        R1,[R1,#0x0] ; A2h+103
 00000034  2218      MOV         R2,#0x18
 00000036  F7FF      BL          tx_power_diag?T  ; T=0x0001  (1)
 00000038  FFE3      BL          tx_power_diag?T  ; T=0x0001  (2)
   16:     rx_power_diag(A2h[104], A2h[105], 32);
 0000003A  4800      LDR         R0,=A2h + 0x68 ; A2h+104
 0000003C  7800      LDRB        R0,[R0,#0x0] ; A2h+104
 0000003E  4800      LDR         R1,=A2h + 0x69 ; A2h+105
 00000040  7809      LDRB        R1,[R1,#0x0] ; A2h+105
 00000042  2220      MOV         R2,#0x20
 00000044  F7FF      BL          rx_power_diag?T  ; T=0x0001  (1)
 00000046  FFDC      BL          rx_power_diag?T  ; T=0x0001  (2)
   17:     check_los_ratesel();
 00000048  F7FF      BL          check_los_ratesel?T  ; T=0x0001  (1)
 0000004A  FFDA      BL          check_los_ratesel?T  ; T=0x0001  (2)
   18: }
 0000004C  BC08      POP         {R3}
 0000004E  4718      BX          R3
 00000050          ENDP ; 'diag?T'

ARM COMPILER V2.32a,  diag                                                                 08/08/05  09:50:22  PAGE 8   


*** CODE SEGMENT '?PR?temp_diag?T?diag':
   25: void temp_diag(BYTE msb, BYTE lsb, BYTE addr){
 00000000  B407      PUSH        {R0-R2}
 00000002  B086      SUB         R13,#0x18
 00000004            ; SCOPE-START
   29:     HALFWORD monitor = (msb<<8) + lsb;
 00000004  A806      ADD         R0,R13,#0x18
 00000006  7800      LDRB        R0,[R0,#0x0] ; msb
 00000008  1C01      MOV         R1,R0
 0000000A  0209      LSL         R1,R1,#0x8
 0000000C  A807      ADD         R0,R13,#0x1C
 0000000E  7800      LDRB        R0,[R0,#0x0] ; lsb
 00000010  1809      ADD         R1,R0
 00000012  A801      ADD         R0,R13,#0x4
 00000014  8001      STRH        R1,[R0,#0x0] ; monitor
   30:     HALFWORD high_alarm =   (A2h[addr  ]<<8) + A2h[addr+1];
 00000016  A808      ADD         R0,R13,#0x20
 00000018  7800      LDRB        R0,[R0,#0x0] ; addr
 0000001A  1C01      MOV         R1,R0
 0000001C  4800      LDR         R0,=A2h ; A2h
 0000001E  1840      ADD         R0,R1 ; A2h
 00000020  7800      LDRB        R0,[R0,#0x0]
 00000022  1C01      MOV         R1,R0
 00000024  0209      LSL         R1,R1,#0x8
 00000026  A808      ADD         R0,R13,#0x20
 00000028  7800      LDRB        R0,[R0,#0x0] ; addr
 0000002A  1C02      MOV         R2,R0
 0000002C  4800      LDR         R0,=A2h + 0x1 ; A2h+1
 0000002E  1880      ADD         R0,R2 ; A2h+1
 00000030  7800      LDRB        R0,[R0,#0x0]
 00000032  1809      ADD         R1,R0
 00000034  A802      ADD         R0,R13,#0x8
 00000036  8001      STRH        R1,[R0,#0x0] ; high_alarm
   31:     HALFWORD low_alarm =    (A2h[addr+2]<<8) + A2h[addr+3];
 00000038  A808      ADD         R0,R13,#0x20
 0000003A  7800      LDRB        R0,[R0,#0x0] ; addr
 0000003C  1C01      MOV         R1,R0
 0000003E  4800      LDR         R0,=A2h + 0x2 ; A2h+2
 00000040  1840      ADD         R0,R1 ; A2h+2
 00000042  7800      LDRB        R0,[R0,#0x0]
 00000044  1C01      MOV         R1,R0
 00000046  0209      LSL         R1,R1,#0x8
 00000048  A808      ADD         R0,R13,#0x20
 0000004A  7800      LDRB        R0,[R0,#0x0] ; addr
 0000004C  1C02      MOV         R2,R0
 0000004E  4800      LDR         R0,=A2h + 0x3 ; A2h+3
 00000050  1880      ADD         R0,R2 ; A2h+3
 00000052  7800      LDRB        R0,[R0,#0x0]
 00000054  1809      ADD         R1,R0
 00000056  A803      ADD         R0,R13,#0xC
 00000058  8001      STRH        R1,[R0,#0x0] ; low_alarm
   32:     HALFWORD high_warning = (A2h[addr+4]<<8) + A2h[addr+5];
 0000005A  A808      ADD         R0,R13,#0x20
 0000005C  7800      LDRB        R0,[R0,#0x0] ; addr
 0000005E  1C01      MOV         R1,R0
 00000060  4800      LDR         R0,=A2h + 0x4 ; A2h+4
 00000062  1840      ADD         R0,R1 ; A2h+4

⌨️ 快捷键说明

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