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

📄 irquart0.lst

📁 一个基于ARM单片机的红外解码的程序,红外时序通过串口发出,是红外解码的一个辅助助手,非常好用.
💻 LST
字号:
ARM COMPILER V2.50a,  IRQUART0                                                             16/06/07  08:25:44  PAGE 1   


ARM COMPILER V2.50a, COMPILATION OF MODULE IRQUART0
OBJECT MODULE PLACED IN IRQUART0.OBJ
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe IRQUART0.C THUMB BROWSE DEBUG TABS(4) 

stmt  level    source

    1          #include "config.h"
    2          #include "IRQUART0.h"
    3          
    4          
    5          uint8 rcv_buf[50];
    6          volatile uint8 i=0;
    7          uint8 j=0;
    8          
    9          volatile uint8 rcv_new;
   10          
   11          void IRQ_UART0(void) __irq
   12          {
   13   1      //  uint8 m;
   14   1          if((U0IIR & 0x0F) == 0x04)
   15   1          {
   16   2              //while(1);
   17   2              rcv_new = 1;
   18   2              //for(m=0;m<8;m++)
   19   2              {       
   20   3                  rcv_buf[i] = U0RBR;
   21   3                  i++;
   22   3              }
   23   2          }
   24   1          
   25   1          VICVectAddr = 0x00;
   26   1      }
   27          
   28          void UART0_SendByte(uint8 dat)
   29          {
   30   1          U0THR = dat;
   31   1          while((U0LSR & 0x20) == 0);
   32   1      }
   33          
   34          void UART0_SendBuf(void)
   35          {
   36   1          if(rcv_new == 1)
   37   1          {
   38   2              rcv_new = 0;    
   39   2          while((i>j) && (j<50))
   40   2          {
   41   3              UART0_SendByte(rcv_buf[j]);
   42   3              j++;
   43   3          }
   44   2          while((U0LSR & 0x20) == 0); 
   45   2          if((i==j) || (j>=50))
   46   2          {
   47   3              i=j=0;
   48   3          }
   49   2          }
   50   1      }
   51          
   52          int8 UART0_Init(uint32 baud,UARTMODE set)
   53          {
   54   1          uint32 bak;
   55   1      
   56   1          
   57   1          U0LCR = 0x80;
   58   1          bak   = (Fpclk>>4)/baud;
   59   1          U0DLM = bak>>8;
ARM COMPILER V2.50a,  IRQUART0                                                             16/06/07  08:25:44  PAGE 2   

   60   1          U0DLL = bak & 0xff;
   61   1      
   62   1          bak = set.datab - 5;
   63   1          if(set.stopb == 2)  bak |= 0x04;
   64   1      
   65   1          if(set.parity != 0)
   66   1          {
   67   2              set.parity = set.parity-1;
   68   2              bak |= 0x08;
   69   2          }
   70   1          bak |= set.parity<<4;
   71   1      
   72   1          U0LCR = bak;
   73   1          i=0;j=0;
   74   1          return(1);
   75   1      }
   76          
   77          
   78          /*----------------------------------------------------------
   79          void main()
   80          {
   81              UARTMODE set;
   82          
   83              set.datab = 8;
   84              set.stopb = 1;
   85              set.parity = 0;
   86          
   87              rcv_new = 0;
   88          
   89              PINSEL0 |= 0x05;                      //设置IO连接到UART0
   90          
   91          
   92              UART0_Init(115200,set);
   93              //U0FCR = 0x81; //接收器触发点为8个字符
   94              U0FCR = 0x01;   //接收器触发点为1个字符
   95          
   96              U0IER = 0x01;   //接收中断开,发送中断关
   97          
   98              //串口0中断设置
   99              VICVectCntl0 = 0x20|0x06;
  100              VICVectAddr0 = (uint32)IRQ_UART0;
  101              VICIntEnable = 1<<0x06;
  102          
  103              VICIntSelect = 0x00;                //设置所有通道为IRQ中断
  104          }
  105          -----------------------------------------------------------*/
ARM COMPILER V2.50a,  IRQUART0                                                             16/06/07  08:25:44  PAGE 3   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN CODE16 (?C?UDIV?T)



*** PUBLICS:
 PUBLIC         UART0_SendByte?T
 PUBLIC         IRQ_UART0?A
 PUBLIC         UART0_SendBuf?T
 PUBLIC         UART0_Init?T
 PUBLIC         rcv_buf
 PUBLIC         rcv_new
 PUBLIC         i
 PUBLIC         j



*** DATA SEGMENT '?DT0?IRQUART0':
 00000000          rcv_buf:
 00000000            DS          50
 00000032          rcv_new:
 00000032            DS          1
 00000033          i:
 00000033           BEGIN_INIT
 00000033  00        DB          0x0
 00000034           END_INIT
 00000034          j:
 00000034           BEGIN_INIT
 00000034  00        DB          0x0
 00000035           END_INIT



*** CODE SEGMENT '?PR?IRQ_UART0?A?IRQUART0':
   11: void IRQ_UART0(void) __irq
 00000000  E92D0007  STMDB       R13!,{R0-R2}
   14:     if((U0IIR & 0x0F) == 0x04)
 00000004  E5100000  LDR         R0,=0xE000C008
 00000008  E5D00000  LDRB        R0,[R0,#0x0]
 0000000C  E200000F  AND         R0,R0,#0x000F
 00000010  E3500004  CMP         R0,#0x0004
 00000014  1A00000D  BNE         L_1  ; Targ=0x50
   17:         rcv_new = 1;
 00000018  E3A01001  MOV         R1,#0x1
 0000001C  E5100000  LDR         R0,=rcv_new ; rcv_new
 00000020  E5C01000  STRB        R1,[R0,#0x0] ; rcv_new
   20:             rcv_buf[i] = U0RBR;
 00000024  E5100000  LDR         R0,=0xE000C000
 00000028  E5D00000  LDRB        R0,[R0,#0x0]
 0000002C  E5101000  LDR         R1,=i ; i
 00000030  E5D11000  LDRB        R1,[R1,#0x0] ; i
 00000034  E1A02001  MOV         R2,R1
 00000038  E5101000  LDR         R1,=rcv_buf ; rcv_buf
 0000003C  E7C10002  STRB        R0,[R1,+R2]
   21:             i++;
 00000040  E5100000  LDR         R0,=i ; i
 00000044  E5D01000  LDRB        R1,[R0,#0x0] ; i
 00000048  E2811001  ADD         R1,R1,#0x0001
 0000004C  E5C01000  STRB        R1,[R0,#0x0] ; i
   23:     }
 00000050          L_1:
   25:     VICVectAddr = 0x00;
 00000050  E3A01000  MOV         R1,#0x0
 00000054  E5100000  LDR         R0,=0xFFFFF030
 00000058  E5801000  STR         R1,[R0,#0x0]
   26: }
 0000005C  E8BD0007  LDMIA       R13!,{R0-R2}
 00000060  E25EF004  SUBS        R15,R14,#0x0004
 00000064          ENDP ; 'IRQ_UART0?A'

ARM COMPILER V2.50a,  IRQUART0                                                             16/06/07  08:25:44  PAGE 4   


*** CODE SEGMENT '?PR?UART0_SendByte?T?IRQUART0':
   28: void UART0_SendByte(uint8 dat)
 00000000  1C02      MOV         R2,R0 ; dat
 00000002  ---- Variable 'dat' assigned to Register 'R2' ----
   30:     U0THR = dat;
 00000002  1C11      MOV         R1,R2 ; dat
 00000004  4800      LDR         R0,=0xE000C000
 00000006  7001      STRB        R1,[R0,#0x0]
   31:     while((U0LSR & 0x20) == 0);
 00000008          L_2:
 00000008  4800      LDR         R0,=0xE000C014
 0000000A  7800      LDRB        R0,[R0,#0x0]
 0000000C  2120      MOV         R1,#0x20
 0000000E  4208      TST         R0,R1
 00000010  D0FA      BEQ         L_2  ; T=0x00000008
   32: }
 00000012  4770      BX          R14
 00000014          ENDP ; 'UART0_SendByte?T'


*** CODE SEGMENT '?PR?UART0_SendBuf?T?IRQUART0':
   34: void UART0_SendBuf(void)
 00000000  B500      PUSH        {LR}
   36:     if(rcv_new == 1)
 00000002  4800      LDR         R0,=rcv_new ; rcv_new
 00000004  7800      LDRB        R0,[R0,#0x0] ; rcv_new
 00000006  2801      CMP         R0,#0x1
 00000008  D12A      BNE         L_6  ; T=0x00000060
   38:         rcv_new = 0;    
 0000000A  2100      MOV         R1,#0x0
 0000000C  4800      LDR         R0,=rcv_new ; rcv_new
 0000000E  7001      STRB        R1,[R0,#0x0] ; rcv_new
   39:     while((i>j) && (j<50))
 00000010  E00A      B           L_7  ; T=0x00000028
 00000012          L_9:
   41:         UART0_SendByte(rcv_buf[j]);
 00000012  4800      LDR         R0,=j ; j
 00000014  7800      LDRB        R0,[R0,#0x0] ; j
 00000016  1C01      MOV         R1,R0
 00000018  4800      LDR         R0,=rcv_buf ; rcv_buf
 0000001A  5C40      LDRB        R0,[R0,R1]
 0000001C  F7FF      BL          UART0_SendByte?T  ; T=0x0001  (1)
 0000001E  FFF0      BL          UART0_SendByte?T  ; T=0x0001  (2)
   42:         j++;
 00000020  4800      LDR         R0,=j ; j
 00000022  7801      LDRB        R1,[R0,#0x0] ; j
 00000024  3101      ADD         R1,#0x1
 00000026  7001      STRB        R1,[R0,#0x0] ; j
   43:     }
 00000028          L_7:
 00000028  4800      LDR         R0,=j ; j
 0000002A  7800      LDRB        R0,[R0,#0x0] ; j
 0000002C  1C02      MOV         R2,R0
 0000002E  4800      LDR         R1,=i ; i
 00000030  7809      LDRB        R1,[R1,#0x0] ; i
 00000032  4291      CMP         R1,R2
 00000034  D901      BLS         L_8  ; T=0x0000003A
 00000036  2832      CMP         R0,#0x32
 00000038  DBEB      BLT         L_9  ; T=0x00000012
 0000003A          L_8:
   44:     while((U0LSR & 0x20) == 0); 
 0000003A          L_12:
 0000003A  4800      LDR         R0,=0xE000C014
 0000003C  7800      LDRB        R0,[R0,#0x0]
 0000003E  2120      MOV         R1,#0x20
 00000040  4208      TST         R0,R1
 00000042  D0FA      BEQ         L_12  ; T=0x0000003A
   45:     if((i==j) || (j>=50))
ARM COMPILER V2.50a,  IRQUART0                                                             16/06/07  08:25:44  PAGE 5   

 00000044  4800      LDR         R0,=j ; j
 00000046  7800      LDRB        R0,[R0,#0x0] ; j
 00000048  1C02      MOV         R2,R0
 0000004A  4800      LDR         R1,=i ; i
 0000004C  7809      LDRB        R1,[R1,#0x0] ; i
 0000004E  4291      CMP         R1,R2
 00000050  D001      BEQ         L_17  ; T=0x00000056
 00000052  2832      CMP         R0,#0x32
 00000054  DB04      BLT         L_6  ; T=0x00000060
 00000056          L_17:
   47:         i=j=0;
 00000056  2100      MOV         R1,#0x0
 00000058  4800      LDR         R0,=j ; j
 0000005A  7001      STRB        R1,[R0,#0x0] ; j
 0000005C  4800      LDR         R0,=i ; i
 0000005E  7001      STRB        R1,[R0,#0x0] ; i
   49:     }
 00000060          L_6:
   50: }
 00000060  BC08      POP         {R3}
 00000062  4718      BX          R3
 00000064          ENDP ; 'UART0_SendBuf?T'


*** CODE SEGMENT '?PR?UART0_Init?T?IRQUART0':
   52: int8 UART0_Init(uint32 baud,UARTMODE set)
 00000000  B500      PUSH        {LR}
 00000002  1C02      MOV         R2,R0 ; baud
 00000004  ---- Variable 'baud' assigned to Register 'R2' ----
   53: {
 00000004            ; SCOPE-START
   57:     U0LCR = 0x80;
 00000004  2180      MOV         R1,#0x80
 00000006  4800      LDR         R0,=0xE000C00C
 00000008  7001      STRB        R1,[R0,#0x0]
   58:     bak   = (Fpclk>>4)/baud;
 0000000A  1C11      MOV         R1,R2 ; baud
 0000000C  4800      LDR         R0,=0xA8C00
 0000000E  F7FF      BL          ?C?UDIV?T  ; T=0x0001  (1) ; ?C?UDIV?T
 00000010  FFF7      BL          ?C?UDIV?T  ; T=0x0001  (2) ; ?C?UDIV?T
 00000012  1C08      MOV         R0,R1
 00000014  ---- Variable 'bak' assigned to Register 'R0' ----
   59:     U0DLM = bak>>8;
 00000014  1C02      MOV         R2,R0 ; bak
 00000016  0A12      LSR         R2,R2,#0x8 ; bak
 00000018  0612      LSL         R2,R2,#0x18
 0000001A  0E12      LSR         R2,R2,#0x18
 0000001C  4800      LDR         R1,=0xE000C004
 0000001E  700A      STRB        R2,[R1,#0x0]
   60:     U0DLL = bak & 0xff;
 00000020  1C01      MOV         R1,R0 ; bak
 00000022  20FF      MOV         R0,#0xFF
 00000024  4001      AND         R1,R0
 00000026  0609      LSL         R1,R1,#0x18
 00000028  0E09      LSR         R1,R1,#0x18
 0000002A  4800      LDR         R0,=0xE000C000
 0000002C  7001      STRB        R1,[R0,#0x0]
   62:     bak = set.datab - 5;
 0000002E  A800      ADD         R0,R13,#0x0
 00000030  7800      LDRB        R0,[R0,#0x0] ; set
 00000032  3805      SUB         R0,#0x5
   63:     if(set.stopb == 2)  bak |= 0x04;
 00000034  2101      MOV         R1,#0x1
 00000036  4469      ADD         R1,R13
 00000038  7809      LDRB        R1,[R1,#0x0] ; set+1
 0000003A  2902      CMP         R1,#0x2
 0000003C  D101      BNE         L_18  ; T=0x00000042
 0000003E  2104      MOV         R1,#0x4
ARM COMPILER V2.50a,  IRQUART0                                                             16/06/07  08:25:44  PAGE 6   

 00000040  4308      ORR         R0,R1
 00000042          L_18:
   65:     if(set.parity != 0)
 00000042  2102      MOV         R1,#0x2
 00000044  4469      ADD         R1,R13
 00000046  780A      LDRB        R2,[R1,#0x0] ; set+2
 00000048  2A00      CMP         R2,#0x0
 0000004A  D005      BEQ         L_19  ; T=0x00000058
   67:         set.parity = set.parity-1;
 0000004C  3A01      SUB         R2,#0x1
 0000004E  0612      LSL         R2,R2,#0x18
 00000050  0E12      LSR         R2,R2,#0x18
 00000052  700A      STRB        R2,[R1,#0x0] ; set+2
   68:         bak |= 0x08;
 00000054  2208      MOV         R2,#0x8
 00000056  4310      ORR         R0,R2
   69:     }
 00000058          L_19:
   70:     bak |= set.parity<<4;
 00000058  7809      LDRB        R1,[R1,#0x0] ; set+2
 0000005A  0109      LSL         R1,R1,#0x4
 0000005C  4308      ORR         R0,R1
   72:     U0LCR = bak;
 0000005E  1C01      MOV         R1,R0 ; bak
 00000060  0609      LSL         R1,R1,#0x18 ; bak
 00000062  0E09      LSR         R1,R1,#0x18
 00000064  4800      LDR         R0,=0xE000C00C
 00000066  7001      STRB        R1,[R0,#0x0]
   73:     i=0;j=0;
 00000068  2100      MOV         R1,#0x0
 0000006A  4800      LDR         R0,=i ; i
 0000006C  7001      STRB        R1,[R0,#0x0] ; i
 0000006E  4800      LDR         R0,=j ; j
 00000070  7001      STRB        R1,[R0,#0x0] ; j
   74:     return(1);
 00000072  2001      MOV         R0,#0x1
 00000074            ; SCOPE-END
   75: }
 00000074  BC08      POP         {R3}
 00000076  4718      BX          R3
 00000078          ENDP ; 'UART0_Init?T'



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