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

📄 uart.lst

📁 针对飞利浦LPC214x的虚拟串口程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
  266   1      
  267   1          VICVectAddr=0;
  268   1      }
  269          
  270          
  271          /*******************************************************************
  272          * 功能描述:   初始化UART0
  273          * 参    数:
  274          * 返    回:
  275          * 备    注: 
  276          *******************************************************************/
  277          void    InitUart (void) 
  278          {
  279   1          // 配置UART管脚
  280   1          PINSEL0 = (PINSEL0 & (~0x0f000f)) | 0x050005;   // set p0[1..0] for uart0
  281   1      
  282   1          ResetBufferPointer(0);
  283   1          ResetBufferPointer(1);
  284   1      
  285   1          U0LCR = 0x83;               //  默认"9600,n,8,1"
  286   1          SET_UART0_BAUD(9600)                
  287   1          U0LCR = 0x03;
  288   1          U0IER = 0x03;               // enable rx/tx interrupt.
  289   1          U0FCR = 1 | (2<<6);         // enable fifo,8 byte
  290   1      
  291   1          U1LCR = 0x83;               //  默认"9600,n,8,1"
  292   1          SET_UART1_BAUD(9600)                
  293   1          U1LCR = 0x03;
  294   1          U1IER = 0x03;               // enable rx/tx interrupt.
  295   1          U1FCR = 1 | (2<<6);         // enable fifo,8 byte
  296   1      
  297   1          //设置向量中断
  298   1          VICVectAddr3 = (unsigned long)Uart0_irq;
  299   1          VICVectCntl3 = 0x20 | 6;                    
  300   1          VICIntEnable = 1 << 6 ;
  301   1      
  302   1          VICVectAddr4 = (unsigned long)Uart1_irq;
  303   1          VICVectCntl4 = 0x20 | 7;                    
  304   1          VICIntEnable = 1 << 7 ;
  305   1      }
ARM COMPILER V2.53,  uart                                                                  09/06/07  15:43:41  PAGE 6   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN CODE16 (USB_ReadEP?T)
 EXTERN CODE16 (USB_WriteEP?T)



*** PUBLICS:
 PUBLIC         UartDataToHost?T
 PUBLIC         HostDataToUart?T
 PUBLIC         InitUart?T
 PUBLIC         ResetBufferPointer?T
 PUBLIC         Uart0_irq?A
 PUBLIC         Uart1_irq?A
 PUBLIC         SendBuf0
 PUBLIC         RcvBuf0
 PUBLIC         SendBuf1
 PUBLIC         RcvBuf1
 PUBLIC         r_first0
 PUBLIC         r_first1
 PUBLIC         r_next0
 PUBLIC         r_next1
 PUBLIC         s_first0
 PUBLIC         s_first1
 PUBLIC         s_next0
 PUBLIC         s_next1



*** DATA SEGMENT '?DT0?uart':
 00000000          r_first0:
 00000000            DS          4
 00000004          r_first1:
 00000004            DS          4
 00000008          r_next0:
 00000008            DS          4
 0000000C          r_next1:
 0000000C            DS          4
 00000010          s_first0:
 00000010            DS          4
 00000014          s_first1:
 00000014            DS          4
 00000018          s_next0:
 00000018            DS          4
 0000001C          s_next1:
 0000001C            DS          4
 00000020          SendBuf0:
 00000020            DS          512
 00000220          RcvBuf0:
 00000220            DS          1024
 00000620          SendBuf1:
 00000620            DS          512
 00000820          RcvBuf1:
 00000820            DS          1024



*** CODE SEGMENT '?PR?ResetBufferPointer?T?uart':
   73: void    ResetBufferPointer(DWORD dwPortNum)
 00000000  1C01      MOV         R1,R0 ; dwPortNum
 00000002  ---- Variable 'dwPortNum' assigned to Register 'R1' ----
   75:     if(dwPortNum==0)
 00000002  1C08      MOV         R0,R1 ; dwPortNum
 00000004  2800      CMP         R0,#0x0 ; dwPortNum
 00000006  D109      BNE         L_1  ; T=0x0000001C
   77:         s_first0 = s_next0 = 0;
 00000008  2100      MOV         R1,#0x0
 0000000A  4800      LDR         R0,=s_next0 ; s_next0
 0000000C  6001      STR         R1,[R0,#0x0] ; s_next0
 0000000E  4800      LDR         R0,=s_first0 ; s_first0
ARM COMPILER V2.53,  uart                                                                  09/06/07  15:43:41  PAGE 7   

 00000010  6001      STR         R1,[R0,#0x0] ; s_first0
   78:         r_first0 = r_next0 = 0;
 00000012  4800      LDR         R0,=r_next0 ; r_next0
 00000014  6001      STR         R1,[R0,#0x0] ; r_next0
 00000016  4800      LDR         R0,=r_first0 ; r_first0
 00000018  6001      STR         R1,[R0,#0x0] ; r_first0
   79:     }
 0000001A  E008      B           L_2  ; T=0x0000002E
 0000001C          L_1:
   82:         s_first1 = s_next1 = 0;
 0000001C  2100      MOV         R1,#0x0
 0000001E  4800      LDR         R0,=s_next1 ; s_next1
 00000020  6001      STR         R1,[R0,#0x0] ; s_next1
 00000022  4800      LDR         R0,=s_first1 ; s_first1
 00000024  6001      STR         R1,[R0,#0x0] ; s_first1
   83:         r_first1 = r_next1 = 0;
 00000026  4800      LDR         R0,=r_next1 ; r_next1
 00000028  6001      STR         R1,[R0,#0x0] ; r_next1
 0000002A  4800      LDR         R0,=r_first1 ; r_first1
 0000002C  6001      STR         R1,[R0,#0x0] ; r_first1
   84:     }
 0000002E          L_2:
   85: }
 0000002E  4770      BX          R14
 00000030          ENDP ; 'ResetBufferPointer?T'


*** CODE SEGMENT '?PR?UartDataToHost?T?uart':
   93: void    UartDataToHost(DWORD dwPort)
 00000000  B5F0      PUSH        {R4-R7,LR}
 00000002  1C05      MOV         R5,R0 ; dwPort
 00000004  ---- Variable 'dwPort' assigned to Register 'R5' ----
 00000004  B092      SUB         R13,#0x48
 00000006  ---- Variable 'first' assigned to Register 'R4' ----
   94: {
 00000006            ; SCOPE-START
  104:     if( (dwPort==0 && r_next0==r_first0) || (dwPort==1 && r_next1==r_first1))
 00000006  1C28      MOV         R0,R5 ; dwPort
 00000008  2800      CMP         R0,#0x0 ; dwPort
 0000000A  D105      BNE         L_5  ; T=0x00000018
 0000000C  4800      LDR         R0,=r_first0 ; r_first0
 0000000E  6801      LDR         R1,[R0,#0x0] ; r_first0
 00000010  4800      LDR         R0,=r_next0 ; r_next0
 00000012  6800      LDR         R0,[R0,#0x0] ; r_next0
 00000014  4288      CMP         R0,R1
 00000016  D051      BEQ         L_6  ; T=0x000000BC
 00000018          L_5:
 00000018  1C28      MOV         R0,R5 ; dwPort
 0000001A  2801      CMP         R0,#0x1 ; dwPort
 0000001C  D105      BNE         L_3  ; T=0x0000002A
 0000001E  4800      LDR         R0,=r_first1 ; r_first1
 00000020  6801      LDR         R1,[R0,#0x0] ; r_first1
 00000022  4800      LDR         R0,=r_next1 ; r_next1
 00000024  6800      LDR         R0,[R0,#0x0] ; r_next1
 00000026  4288      CMP         R0,R1
 00000028  D048      BEQ         L_6  ; T=0x000000BC
  105:         return;
 0000002A          L_3:
  108:      dwEp   = dwPort==0 ? 2 : 5;
 0000002A  1C28      MOV         R0,R5 ; dwPort
 0000002C  2800      CMP         R0,#0x0 ; dwPort
 0000002E  D101      BNE         L_7  ; T=0x00000034
 00000030  2002      MOV         R0,#0x2
 00000032  E000      B           L_8  ; T=0x00000036
 00000034          L_7:
 00000034  2005      MOV         R0,#0x5
 00000036          L_8:
 00000036  9010      STR         R0,[R13,#0x40] ; dwEp
ARM COMPILER V2.53,  uart                                                                  09/06/07  15:43:41  PAGE 8   

  109:     next    = dwPort==0 ? r_next0 : r_next1;
 00000038  1C28      MOV         R0,R5 ; dwPort
 0000003A  2800      CMP         R0,#0x0 ; dwPort
 0000003C  D102      BNE         L_9  ; T=0x00000044
 0000003E  4800      LDR         R0,=r_next0 ; r_next0
 00000040  6800      LDR         R0,[R0,#0x0] ; r_next0
 00000042  E001      B           L_10  ; T=0x00000048
 00000044          L_9:
 00000044  4800      LDR         R0,=r_next1 ; r_next1
 00000046  6800      LDR         R0,[R0,#0x0] ; r_next1
 00000048          L_10:
 00000048  9011      STR         R0,[R13,#0x44] ; next
  110:     first = dwPort==0 ? r_first0 : r_first1;
 0000004A  1C28      MOV         R0,R5 ; dwPort
 0000004C  2800      CMP         R0,#0x0 ; dwPort
 0000004E  D103      BNE         L_11  ; T=0x00000058
 00000050  4800      LDR         R0,=r_first0 ; r_first0
 00000052  6800      LDR         R0,[R0,#0x0] ; r_first0
 00000054  1C04      MOV         R4,R0
 00000056  E001      B           L_12  ; T=0x0000005C
 00000058          L_11:
 00000058  4800      LDR         R0,=r_first1 ; r_first1
 0000005A  6804      LDR         R4,[R0,#0x0] ; r_first1
 0000005C          L_12:
  111:     pBuf = dwPort==0 ? RcvBuf0 : RcvBuf1;
 0000005C  1C28      MOV         R0,R5 ; dwPort
 0000005E  2800      CMP         R0,#0x0 ; dwPort
 00000060  D101      BNE         L_13  ; T=0x00000066
 00000062  4800      LDR         R1,=RcvBuf0 ; RcvBuf0
 00000064  E000      B           L_14  ; T=0x00000068
 00000066          L_13:
 00000066  4800      LDR         R1,=RcvBuf1 ; RcvBuf1
 00000068          L_14:
 00000068  ---- Variable 'pBuf' assigned to Register 'R1' ----
  112:      dwCnt = USB_MAX_PACKET;
 00000068  2040      MOV         R0,#0x40
 0000006A  ---- Variable 'dwCnt' assigned to Register 'R0' ----
  113:      i=0;
 0000006A  2300      MOV         R3,#0x0
 0000006C  ---- Variable 'i' assigned to Register 'R3' ----
  116:     while(dwCnt--)
 0000006C  E011      B           L_15  ; T=0x00000092
 0000006E          L_17:
  118:         if(next == first)
 0000006E  1C26      MOV         R6,R4 ; first
 00000070  9A11      LDR         R2,[R13,#0x44] ; next
 00000072  42B2      CMP         R2,R6 ; first
 00000074  D011      BEQ         L_16  ; T=0x0000009A
  120:         tmpbuf[i] = pBuf[first];
 00000076  1C26      MOV         R6,R4 ; first
 00000078  1C0A      MOV         R2,R1 ; pBuf
 0000007A  5D92      LDRB        R2,[R2,R6]
 0000007C  1C1F      MOV         R7,R3 ; i
 0000007E  AE00      ADD         R6,R13,#0x0
 00000080  55F2      STRB        R2,[R6,R7]
  121:         if(++first >= RCV_BUF_LEN)
 00000082  1C22      MOV         R2,R4 ; first
 00000084  3201      ADD         R2,#0x1
 00000086  1C14      MOV         R4,R2 ; first
 00000088  4800      LDR         R6,=0x400
 0000008A  42B2      CMP         R2,R6
 0000008C  D300      BCC         L_20  ; T=0x00000090
  122:             first = 0;
 0000008E  2400      MOV         R4,#0x0
 00000090          L_20:
  123:         i++;
ARM COMPILER V2.53,  uart                                                                  09/06/07  15:43:41  PAGE 9   

 00000090  3301      ADD         R3,#0x1
  124:     }
 00000092          L_15:
 00000092  1C02      MOV         R2,R0 ; dwCnt
 00000094  3801      SUB         R0,#0x1
 00000096  2A00      CMP         R2,#0x0 ; dwCnt
 00000098  D1E9      BNE         L_17  ; T=0x0000006E
 0000009A          L_16:
  125:     USB_WriteEP(dwEp | 0x80, tmpbuf, i);
 0000009A  9810      LDR         R0,[R13,#0x40] ; dwEp
 0000009C  2180      MOV         R1,#0x80
 0000009E  4308      ORR         R0,R1
 000000A0  A900      ADD         R1,R13,#0x0
 000000A2  1C1A      MOV         R2,R3 ; i
 000000A4  F7FF      BL          USB_WriteEP?T  ; T=0x0001  (1)
 000000A6  FFAC      BL          USB_WriteEP?T  ; T=0x0001  (2)
  127:     if(dwPort == 0)
 000000A8  1C28      MOV         R0,R5 ; dwPort
 000000AA  2800      CMP         R0,#0x0 ; dwPort
 000000AC  D103      BNE         L_21  ; T=0x000000B6
  128:         r_first0 = first;
 000000AE  1C21      MOV         R1,R4 ; first
 000000B0  4800      LDR         R0,=r_first0 ; r_first0
 000000B2  6001      STR         R1,[R0,#0x0] ; r_first0
 000000B4  E002      B           L_6  ; T=0x000000BC
 000000B6          L_21:
  130:         r_first1 = first;
 000000B6  1C21      MOV         R1,R4 ; first

⌨️ 快捷键说明

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