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

📄 uart.lst

📁 针对飞利浦LPC214x的虚拟串口程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
 000000B8  4800      LDR         R0,=r_first1 ; r_first1
 000000BA  6001      STR         R1,[R0,#0x0] ; r_first1
 000000BC            ; SCOPE-END
  131: }
 000000BC          L_6:
 000000BC  B012      ADD         R13,#0x48
 000000BE  BCF0      POP         {R4-R7}
 000000C0  BC08      POP         {R3}
 000000C2  4718      BX          R3
 000000C4          ENDP ; 'UartDataToHost?T'


*** CODE SEGMENT '?PR?HostDataToUart?T?uart':
  138: void    HostDataToUart(DWORD dwPort)
 00000000  B5F0      PUSH        {R4-R7,LR}
 00000002  1C06      MOV         R6,R0 ; dwPort
 00000004  ---- Variable 'dwPort' assigned to Register 'R6' ----
 00000004  B091      SUB         R13,#0x44
 00000006  ---- Variable 'next' assigned to Register 'R5' ----
 00000006  ---- Variable 'pBuf' assigned to Register 'R4' ----
  139: {
 00000006            ; SCOPE-START
  141:     DWORD dwEp  = dwPort==0 ? 2 : 5;
 00000006  1C30      MOV         R0,R6 ; dwPort
 00000008  2800      CMP         R0,#0x0 ; dwPort
 0000000A  D101      BNE         L_23  ; T=0x00000010
 0000000C  2102      MOV         R1,#0x2
 0000000E  E000      B           L_24  ; T=0x00000012
 00000010          L_23:
 00000010  2105      MOV         R1,#0x5
 00000012          L_24:
 00000012  ---- Variable 'dwEp' assigned to Register 'R1' ----
  142:     DWORD next  = dwPort==0 ? s_next0 : s_next1;
 00000012  1C30      MOV         R0,R6 ; dwPort
 00000014  2800      CMP         R0,#0x0 ; dwPort
 00000016  D103      BNE         L_25  ; T=0x00000020
 00000018  4800      LDR         R0,=s_next0 ; s_next0
 0000001A  6800      LDR         R0,[R0,#0x0] ; s_next0
 0000001C  1C05      MOV         R5,R0
 0000001E  E001      B           L_26  ; T=0x00000024
ARM COMPILER V2.53,  uart                                                                  09/06/07  15:43:41  PAGE 10  

 00000020          L_25:
 00000020  4800      LDR         R0,=s_next1 ; s_next1
 00000022  6805      LDR         R5,[R0,#0x0] ; s_next1
 00000024          L_26:
  143:     DWORD first = dwPort==0 ? s_first0 : s_first1;
 00000024  1C30      MOV         R0,R6 ; dwPort
 00000026  2800      CMP         R0,#0x0 ; dwPort
 00000028  D102      BNE         L_27  ; T=0x00000030
 0000002A  4800      LDR         R0,=s_first0 ; s_first0
 0000002C  6800      LDR         R0,[R0,#0x0] ; s_first0
 0000002E  E001      B           L_28  ; T=0x00000034
 00000030          L_27:
 00000030  4800      LDR         R0,=s_first1 ; s_first1
 00000032  6800      LDR         R0,[R0,#0x0] ; s_first1
 00000034          L_28:
 00000034  9010      STR         R0,[R13,#0x40] ; first
  144:     BYTE * pBuf = dwPort==0 ? SendBuf0 : SendBuf1;
 00000036  1C30      MOV         R0,R6 ; dwPort
 00000038  2800      CMP         R0,#0x0 ; dwPort
 0000003A  D102      BNE         L_29  ; T=0x00000042
 0000003C  4800      LDR         R0,=SendBuf0 ; SendBuf0
 0000003E  1C04      MOV         R4,R0
 00000040  E000      B           L_30  ; T=0x00000044
 00000042          L_29:
 00000042  4800      LDR         R4,=SendBuf1 ; SendBuf1
 00000044          L_30:
  145:     DWORD dwCnt = USB_ReadEP(dwEp, tmpbuf);
 00000044  1C08      MOV         R0,R1 ; dwEp
 00000046  A900      ADD         R1,R13,#0x0
 00000048  F7FF      BL          USB_ReadEP?T  ; T=0x0001  (1)
 0000004A  FFDA      BL          USB_ReadEP?T  ; T=0x0001  (2)
 0000004C  1C01      MOV         R1,R0 ; dwCnt
 0000004E  ---- Variable 'dwCnt' assigned to Register 'R1' ----
  146:     DWORD i=0;
 0000004E  2000      MOV         R0,#0x0
 00000050  ---- Variable 'i' assigned to Register 'R0' ----
  148:     while(dwCnt--)
 00000050  E012      B           L_31  ; T=0x00000078
 00000052          L_33:
  150:         if(next == first-1)
 00000052  9B10      LDR         R3,[R13,#0x40] ; first
 00000054  3B01      SUB         R3,#0x1
 00000056  1C2A      MOV         R2,R5 ; next
 00000058  429A      CMP         R2,R3 ; next
 0000005A  D011      BEQ         L_32  ; T=0x00000080
  152:         pBuf[next] = tmpbuf[i];
 0000005C  1C03      MOV         R3,R0 ; i
 0000005E  AA00      ADD         R2,R13,#0x0
 00000060  5CD2      LDRB        R2,[R2,R3]
 00000062  1C2F      MOV         R7,R5 ; next
 00000064  1C23      MOV         R3,R4 ; pBuf
 00000066  55DA      STRB        R2,[R3,R7]
  153:         if(++next >= SEND_BUF_LEN)  
 00000068  1C2A      MOV         R2,R5 ; next
 0000006A  3201      ADD         R2,#0x1
 0000006C  1C15      MOV         R5,R2 ; next
 0000006E  4B80      LDR         R3,=0x200
 00000070  429A      CMP         R2,R3
 00000072  D300      BCC         L_36  ; T=0x00000076
  154:             next = 0;
 00000074  2500      MOV         R5,#0x0
 00000076          L_36:
  155:         i++;
 00000076  3001      ADD         R0,#0x1
  156:     }
 00000078          L_31:
ARM COMPILER V2.53,  uart                                                                  09/06/07  15:43:41  PAGE 11  

 00000078  1C0A      MOV         R2,R1 ; dwCnt
 0000007A  3901      SUB         R1,#0x1
 0000007C  2A00      CMP         R2,#0x0 ; dwCnt
 0000007E  D1E8      BNE         L_33  ; T=0x00000052
 00000080          L_32:
  158:     if(dwPort == 0)
 00000080  1C30      MOV         R0,R6 ; dwPort
 00000082  2800      CMP         R0,#0x0 ; dwPort
 00000084  D11C      BNE         L_37  ; T=0x000000C0
  160:         s_next0 = next;
 00000086  1C29      MOV         R1,R5 ; next
 00000088  4800      LDR         R0,=s_next0 ; s_next0
 0000008A  6001      STR         R1,[R0,#0x0] ; s_next0
  161:         if(U0LSR & 0x40 && s_first0 != s_next0) // 发送器为空,需要重新启动发送
 0000008C  4800      LDR         R0,=0xE000C014
 0000008E  7800      LDRB        R0,[R0,#0x0]
 00000090  2140      MOV         R1,#0x40
 00000092  4208      TST         R0,R1
 00000094  D030      BEQ         L_40  ; T=0x000000F8
 00000096  4800      LDR         R0,=s_next0 ; s_next0
 00000098  6801      LDR         R1,[R0,#0x0] ; s_next0
 0000009A  4800      LDR         R0,=s_first0 ; s_first0
 0000009C  6800      LDR         R0,[R0,#0x0] ; s_first0
 0000009E  4288      CMP         R0,R1
 000000A0  D02A      BEQ         L_40  ; T=0x000000F8
  163:             U0THR = pBuf[s_first0];
 000000A2  1C02      MOV         R2,R0
 000000A4  1C21      MOV         R1,R4 ; pBuf
 000000A6  5C8A      LDRB        R2,[R1,R2]
 000000A8  4800      LDR         R1,=0xE000C000
 000000AA  700A      STRB        R2,[R1,#0x0]
  164:             if(++s_first0 >= SEND_BUF_LEN)
 000000AC  4800      LDR         R1,=s_first0 ; s_first0
 000000AE  3001      ADD         R0,#0x1
 000000B0  6008      STR         R0,[R1,#0x0] ; s_first0
 000000B2  4980      LDR         R1,=0x200
 000000B4  4288      CMP         R0,R1
 000000B6  D31F      BCC         L_40  ; T=0x000000F8
  165:                 s_first0 = 0;
 000000B8  2100      MOV         R1,#0x0
 000000BA  4800      LDR         R0,=s_first0 ; s_first0
 000000BC  6001      STR         R1,[R0,#0x0] ; s_first0
  167:     }
 000000BE  E01B      B           L_40  ; T=0x000000F8
 000000C0          L_37:
  170:         s_next1 = next;
 000000C0  1C29      MOV         R1,R5 ; next
 000000C2  4800      LDR         R0,=s_next1 ; s_next1
 000000C4  6001      STR         R1,[R0,#0x0] ; s_next1
  171:         if(U1LSR & 0x40 && s_first1 != s_next1)
 000000C6  4800      LDR         R0,=0xE0010014
 000000C8  7800      LDRB        R0,[R0,#0x0]
 000000CA  2140      MOV         R1,#0x40
 000000CC  4208      TST         R0,R1
 000000CE  D013      BEQ         L_40  ; T=0x000000F8
 000000D0  4800      LDR         R0,=s_next1 ; s_next1
 000000D2  6801      LDR         R1,[R0,#0x0] ; s_next1
 000000D4  4800      LDR         R0,=s_first1 ; s_first1
 000000D6  6800      LDR         R0,[R0,#0x0] ; s_first1
 000000D8  4288      CMP         R0,R1
 000000DA  D00D      BEQ         L_40  ; T=0x000000F8
  173:             U1THR = pBuf[s_first1];
 000000DC  1C02      MOV         R2,R0
 000000DE  1C21      MOV         R1,R4 ; pBuf
 000000E0  5C8A      LDRB        R2,[R1,R2]
 000000E2  4800      LDR         R1,=0xE0010000
ARM COMPILER V2.53,  uart                                                                  09/06/07  15:43:41  PAGE 12  

 000000E4  700A      STRB        R2,[R1,#0x0]
  174:             if(++s_first1 >= SEND_BUF_LEN)
 000000E6  4800      LDR         R1,=s_first1 ; s_first1
 000000E8  3001      ADD         R0,#0x1
 000000EA  6008      STR         R0,[R1,#0x0] ; s_first1
 000000EC  4980      LDR         R1,=0x200
 000000EE  4288      CMP         R0,R1
 000000F0  D302      BCC         L_40  ; T=0x000000F8
  175:                 s_first1 = 0;
 000000F2  2100      MOV         R1,#0x0
 000000F4  4800      LDR         R0,=s_first1 ; s_first1
 000000F6  6001      STR         R1,[R0,#0x0] ; s_first1
  177:     }
 000000F8          L_40:
 000000F8            ; SCOPE-END
  178: }
 000000F8  B011      ADD         R13,#0x44
 000000FA  BCF0      POP         {R4-R7}
 000000FC  BC08      POP         {R3}
 000000FE  4718      BX          R3
 00000100          ENDP ; 'HostDataToUart?T'


*** CODE SEGMENT '?PR?Uart0_irq?A?uart':
  186: void    Uart0_irq(void) __irq
 00000000  E92D001F  STMDB       R13!,{R0-R4}
  187: {
 00000004            ; SCOPE-START
  189:     while(1)  // 循环处理,直到UART0中无任何挂起的中断
 00000004          L_45:
  191:         if((iir = U0IIR) & 1)
 00000004  E5100000  LDR         R0,=0xE000C008
 00000008  E5900000  LDR         R0,[R0,#0x0]
 0000000C  E1A00C00  MOV         R0,R0,LSL #24
 00000010  E1A00C20  MOV         R0,R0,LSR #24
 00000014  E1A01000  MOV         R1,R0 ; iir
 00000018  ---- Variable 'iir' assigned to Register 'R1' ----
 00000018  E1A00C00  MOV         R0,R0,LSL #24
 0000001C  E1A00C20  MOV         R0,R0,LSR #24
 00000020  E3100001  TST         R0,#0x0001
 00000024  1A000040  BNE         L_44  ; Targ=0x12C
  193:         switch(iir & 0x0e)
 00000028  E1A00001  MOV         R0,R1 ; iir
 0000002C  E1A00C00  MOV         R0,R0,LSL #24 ; iir
 00000030  E1A00C20  MOV         R0,R0,LSR #24
 00000034  E200000E  AND         R0,R0,#0x000E
 00000038  E3500002  CMP         R0,#0x0002
 0000003C  0A00001E  BEQ         L_49  ; Targ=0xBC
 00000040  E350000C  CMP         R0,#0x000C
 00000044  0A000001  BEQ         L_56  ; Targ=0x50
 00000048  E3500004  CMP         R0,#0x0004
 0000004C  1AFFFFEC  BNE         L_45  ; Targ=0x4
  197:             while(U0LSR & 1)  //将fifo中的所有数据读完
 00000050          L_56:
 00000050  EA000014  B           L_53  ; Targ=0xA8
 00000054          L_55:
  199:                 ch = U0RBR;
 00000054  E5100000  LDR         R0,=0xE000C000
 00000058  E5D04000  LDRB        R4,[R0,#0x0]
 0000005C  ---- Variable 'ch' assigned to Register 'R4' ----
  200:                 if(r_next0 != r_first0-1)
 0000005C  E5100000  LDR         R0,=r_first0 ; r_first0
 00000060  E5901000  LDR         R1,[R0,#0x0] ; r_first0
 00000064  E2411001  SUB         R1,R1,#0x0001
 00000068  E5100000  LDR         R0,=r_next0 ; r_next0
 0000006C  E5900000  LDR         R0,[R0,#0x0] ; r_next0
 00000070  E1500001  CMP         R0,R1
 00000074  0A00000B  BEQ         L_53  ; Targ=0xA8
ARM COMPILER V2.53,  uart                                                                  09/06/07  15:43:41  PAGE 13  

  202:                     RcvBuf0[r_next0] = ch;
 00000078  E1A01004  MOV         R1,R4 ; ch
 0000007C  E1A03000  MOV         R3,R0
 00000080  E5102000  LDR         R2,=RcvBuf0 ; RcvBuf0
 00000084  E7C21003  STRB        R1,[R2,+R3]
  203:                     if (++r_next0 >= RCV_BUF_LEN)
 00000088  E5101000  LDR         R1,=r_next0 ; r_next0
 0000008C  E2800001  ADD         R0,R0,#0x0001
 00000090  E5810000  STR         R0,[R1,#0x0] ; r_next0
 00000094  E3500B01  CMP         R0,#0x0400
 00000098  3A000002  BCC         L_53  ; Targ=0xA8
  204:                         r_next0 = 0;
 0000009C  E3A01000  MOV         R1,#0x0
 000000A0  E5100000  LDR         R0,=r_next0 ; r_next0
 000000A4  E5801000  STR         R1,[R0,#0x0] ; r_next0
  206:             }
 000000A8          L_53:
 000000A8  E5100000  LDR         R0,=0xE000C014
 000000AC  E5D00000  LDRB        R0,[R0,#0x0]
 000000B0  E3100001  TST         R0,#0x0001
 000000B4  1AFFFFE6  BNE         L_55  ; Targ=0x54
  207:             break;
 000000B8  EAFFFFD1  B           L_45  ; Targ=0x4
  209:         case 0x02:  // THR Empty.
 000000BC          L_49:
  210:             {
 000000BC            ; SCOPE-START
  211:                 DWORD nCnt = 16; //fifo counter
 000000BC  E3A00010  MOV         R0,#0x10
 000000C0  ---- Variable 'nCnt' assigned to Register 'R0' ----
  212:                 while( s_next0 != s_first0 && nCnt--)
 000000C0  EA00000E  B           L_59  ; Targ=0x100
 000000C4          L_61:
  214:                     U0THR = SendBuf0[s_first0];
 000000C4  E5101000  LDR         R1,=s_first0 ; s_first0

⌨️ 快捷键说明

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