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

📄 vcomuser.lst

📁 针对飞利浦LPC214x的虚拟串口程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
  370   1          {
  371   2              U1FCR = 0x87;                  /* Enable and reset TX and RX FIFO. */
  372   2              U1LCR |= 0x80;
  373   2              switch(Data)
  374   2              {
  375   3              case 1:
  376   3                  SET_UART1_BAUD(115200);
  377   3                  break;
  378   3              case 2:
  379   3                  SET_UART1_BAUD(57600);
  380   3                  break;
  381   3              case 3:
  382   3                  SET_UART1_BAUD(38400);
  383   3                  break;
  384   3              case 6:
  385   3                  SET_UART1_BAUD(19200);
  386   3                  break;
  387   3              default:
  388   3                  SET_UART1_BAUD(9600);
ARM COMPILER V2.53,  VCOMuser                                                              09/06/07  15:42:25  PAGE 7   

  389   3              }
  390   2      
  391   2              U1LCR &= ~0x80;
  392   2          }
  393   1      }
  394          
  395          void SetSIOStopBit( BYTE channelNum, BYTE ConfigValue )
  396          {
  397   1          BYTE lcr;
  398   1          
  399   1          /* 0 is 1 stop bit, 1 is 2 stop bits, bit2 on LCR is stop bit setting */
  400   1          if ( channelNum == 0 ) {
  401   2              lcr = U0LCR & 0xFB;
  402   2              U0LCR = lcr | (ConfigValue << 2);           
  403   2          }
  404   1          else if ( channelNum == 1 ) {
  405   2              lcr = U1LCR & 0xFB;
  406   2              U1LCR = lcr | (ConfigValue << 2);
  407   2          }
  408   1      }
  409          
  410          void SetSIODataBit( BYTE channelNum, BYTE ConfigValue )
  411          {
  412   1          BYTE lcr;
  413   1          
  414   1          if ( channelNum == 0 ) {
  415   2              lcr = U0LCR & 0xFC;
  416   2              U0LCR = lcr | ConfigValue;          
  417   2          }
  418   1          else if ( channelNum == 1 ) {
  419   2              lcr = U1LCR & 0xFC;
  420   2              U1LCR = lcr | ConfigValue;
  421   2          }
  422   1      }
  423          
  424          void SetSIOParity( BYTE channelNum, BYTE ConfigValue )
  425          {
  426   1          BYTE lcr;
  427   1          
  428   1          if ( channelNum == 0 ) {
  429   2              lcr = U0LCR & 0xCF;
  430   2              U0LCR = lcr | (ConfigValue << 4);
  431   2          }
  432   1          else if ( channelNum == 1 ) {
  433   2              lcr = U1LCR & 0xCF;
  434   2              U1LCR = lcr | (ConfigValue << 4);
  435   2          }
  436   1      }
  437          
  438          void SetSIOFlowControl( BYTE channelNum, BYTE ConfigValue )
  439          {
  440   1          /* NO flow control setting is neceaasry, unlike the UART on x51 */ 
  441   1          if ( channelNum == 0 ) {
  442   2              ConfigValue = ConfigValue;          
  443   2          }
  444   1          else if ( channelNum == 1 ) {
  445   2              ConfigValue = ConfigValue;
  446   2          }
  447   1      }
  448          
  449          void SetSIODTR( BYTE channelNum, BYTE ConfigValue )
  450          {
  451   1          BYTE mcr;
  452   1          /* only apply to channel 1 */
  453   1          if ( channelNum == 1 ) {
  454   2              mcr = U1MCR & 0xFE;
ARM COMPILER V2.53,  VCOMuser                                                              09/06/07  15:42:25  PAGE 8   

  455   2              U1MCR = mcr | ConfigValue;
  456   2          }
  457   1      }
  458          
  459          void SetSIORTS( BYTE channelNum, BYTE ConfigValue )
  460          {
  461   1          BYTE mcr;
  462   1          
  463   1          /* only apply to channel 1 */
  464   1          if ( channelNum == 1 ) {
  465   2              mcr = U1MCR & 0xFD;
  466   2              U1MCR = mcr | (ConfigValue << 1);
  467   2          }
  468   1      }
  469          
  470          void GetSIOModemStatus( BYTE channelNum )
  471          {
  472   1          channelNum = channelNum;
  473   1      }
  474          
  475          /*
  476          *  VCOM Get SIO Setup Request Callback
  477          *    Parameters:      None (global SetupPacket and EP0Buf)
  478          *    Return Value:    TRUE - Success, FALSE - Error
  479          */
  480          
  481          BOOL VCOM_GetSIOSetup (void) {
  482   1          /* Get SIO setup from the device, not supported */
  483   1          return (TRUE);  
  484   1      }
  485          
  486          
  487          /*
  488          *  VCOM Set SIO Setup Request Callback
  489          *    Parameters:      None (global SetupPacket and EP0Buf)
  490          *    Return Value:    TRUE - Success, FALSE - Error
  491          */
  492          
  493          BOOL VCOM_SetSIOSetup( BYTE Cmd, BYTE Data ) {
  494   1          
  495   1          BYTE ChannelNum;
  496   1          
  497   1          /* Set SIO configuration, baudrate, data bits, stop bits, parity, flow control, 
  498   1          based on the info. from the host */
  499   1          if ( !(Cmd & 0x20) )
  500   1              ChannelNum = 0;
  501   1          else
  502   1              ChannelNum = 1;
  503   1          
  504   1          Cmd &= ~0x20;           /* clear bit 5, use all cmd for channel 0 */
  505   1          switch ( Cmd ) {
  506   2          case BAUDRATE_SETUP:
  507   2              SetSIOBaudrate( ChannelNum, Data );
  508   2              break;
  509   2          case STOPBIT_SETUP:
  510   2              SetSIOStopBit( ChannelNum, Data );
  511   2              break;          
  512   2          case DATABIT_SETUP:
  513   2              SetSIODataBit( ChannelNum, Data );
  514   2              break;
  515   2          case PARITY_SETUP:
  516   2              SetSIOParity( ChannelNum, Data );
  517   2              break;
  518   2          case FLOWCTRL_SETUP:
  519   2              SetSIOFlowControl( ChannelNum, Data );
  520   2              break;
ARM COMPILER V2.53,  VCOMuser                                                              09/06/07  15:42:25  PAGE 9   

  521   2          case DTR_SETUP:
  522   2              SetSIODTR( ChannelNum, Data );
  523   2              break;
  524   2          case RTS_SETUP:
  525   2              SetSIORTS( ChannelNum, Data );
  526   2              break;
  527   2          case HARDCODE_SETUP:
  528   2              break;
  529   2          case MODEM_SETUP:
  530   2              GetSIOModemStatus( ChannelNum );
  531   2              break;
  532   2          default:
  533   2              // EP0Buf[] = ...;
  534   2              // break;
  535   2              return (FALSE);
  536   2          }
  537   1          return (TRUE);
  538   1      }
  539          
ARM COMPILER V2.53,  VCOMuser                                                              09/06/07  15:42:25  PAGE 10  

ASSEMBLY LISTING OF GENERATED OBJECT CODE



*** EXTERNALS:
 EXTERN DATA (USB_Configuration)
 EXTERN CODE16 (USB_ResetCore?T)
 EXTERN CODE16 (USB_EndPoint0?T)
 EXTERN CODE16 (HostDataToUart?T)



*** PUBLICS:
 PUBLIC         USB_Reset_Event?T
 PUBLIC         USB_EndPoint1?T
 PUBLIC         USB_EndPoint2?T
 PUBLIC         USB_EndPoint3?T
 PUBLIC         USB_EndPoint4?T
 PUBLIC         USB_EndPoint5?T
 PUBLIC         USB_EndPoint6?T
 PUBLIC         USB_EndPoint7?T
 PUBLIC         USB_EndPoint8?T
 PUBLIC         USB_EndPoint9?T
 PUBLIC         USB_EndPoint10?T
 PUBLIC         USB_EndPoint11?T
 PUBLIC         USB_EndPoint12?T
 PUBLIC         USB_EndPoint13?T
 PUBLIC         USB_EndPoint14?T
 PUBLIC         USB_EndPoint15?T
 PUBLIC         USB_Configure_Event?T
 PUBLIC         VCOM_SetSIOSetup?T
 PUBLIC         VCOM_GetSIOSetup?T
 PUBLIC         SetSIOBaudrate?T
 PUBLIC         SetSIOStopBit?T
 PUBLIC         SetSIODataBit?T
 PUBLIC         SetSIOParity?T
 PUBLIC         SetSIOFlowControl?T
 PUBLIC         SetSIODTR?T
 PUBLIC         SetSIORTS?T
 PUBLIC         GetSIOModemStatus?T
 PUBLIC         USB_P_EP
 PUBLIC         ReportStatus0
 PUBLIC         ReportStatus1
 PUBLIC         Data2Host0
 PUBLIC         Data2Host1



*** DATA SEGMENT '?DT0?VCOMuser':
 00000000          USB_P_EP:
 00000000           BEGIN_INIT
 00000000  00000000  DD          USB_EndPoint0?T
 00000004  00000000  DD          USB_EndPoint1?T
 00000008  00000000  DD          USB_EndPoint2?T
 0000000C  00000000  DD          USB_EndPoint3?T
 00000010  00000000  DD          USB_EndPoint4?T
 00000014  00000000  DD          USB_EndPoint5?T
 00000018  00000000  DD          0x0
 0000001C  00000000  DD          0x0
 00000020  00000000  DD          0x0
 00000024  00000000  DD          0x0
 00000028  00000000  DD          0x0
 0000002C  00000000  DD          0x0
 00000030  00000000  DD          0x0
 00000034  00000000  DD          0x0
 00000038  00000000  DD          0x0
 0000003C  00000000  DD          0x0
 00000040           END_INIT
 00000040          ReportStatus0:
 00000040           BEGIN_INIT
 00000040  00        DB          0x0
ARM COMPILER V2.53,  VCOMuser                                                              09/06/07  15:42:25  PAGE 11  

 00000041           END_INIT
 00000041          ReportStatus1:
 00000041           BEGIN_INIT
 00000041  00        DB          0x0
 00000042           END_INIT
 00000042          Data2Host0:
 00000042           BEGIN_INIT
 00000042  00        DB          0x0
 00000043           END_INIT
 00000043          Data2Host1:
 00000043           BEGIN_INIT
 00000043  00        DB          0x0
 00000044           END_INIT



*** CODE SEGMENT '?PR?USB_Reset_Event?T?VCOMuser':
   56: void USB_Reset_Event (void) {
 00000000  B500      PUSH        {LR}
   57:     USB_ResetCore();
 00000002  F7FF      BL          USB_ResetCore?T  ; T=0x0001  (1)
 00000004  FFFD      BL          USB_ResetCore?T  ; T=0x0001  (2)
   58: }
 00000006  BC08      POP         {R3}
 00000008  4718      BX          R3
 0000000A          ENDP ; 'USB_Reset_Event?T'


*** CODE SEGMENT '?PR?USB_Configure_Event?T?VCOMuser':
  120:     if (USB_Configuration) {             /* Check if USB is configured */
 00000000  4800      LDR         R0,=USB_Configuration ; USB_Configuration
 00000002  7800      LDRB        R0,[R0,#0x0] ; USB_Configuration
 00000004  2800      CMP         R0,#0x0
 00000006  D008      BEQ         L_1  ; T=0x0000001A
  121:         ReportStatus0 = ReportStatus1 = 1;
 00000008  2101      MOV         R1,#0x1
 0000000A  4800      LDR         R0,=ReportStatus1 ; ReportStatus1
 0000000C  7001      STRB        R1,[R0,#0x0] ; ReportStatus1
 0000000E  4800      LDR         R0,=ReportStatus0 ; ReportStatus0
 00000010  7001      STRB        R1,[R0,#0x0] ; ReportStatus0
  122:         Data2Host0 = Data2Host1 = 1;
 00000012  4800      LDR         R0,=Data2Host1 ; Data2Host1
 00000014  7001      STRB        R1,[R0,#0x0] ; Data2Host1
 00000016  4800      LDR         R0,=Data2Host0 ; Data2Host0
 00000018  7001      STRB        R1,[R0,#0x0] ; Data2Host0
  123:     }
 0000001A          L_1:
  124: }
 0000001A  4770      BX          R14
 0000001C          ENDP ; 'USB_Configure_Event?T'


*** CODE SEGMENT '?PR?USB_EndPoint1?T?VCOMuser':
  175: }
 00000000  4770      BX          R14
 00000002          ENDP ; 'USB_EndPoint1?T'


*** CODE SEGMENT '?PR?USB_EndPoint2?T?VCOMuser':
  182: void USB_EndPoint2 (DWORD event) {
 00000000  B500      PUSH        {LR}
 00000002  1C01      MOV         R1,R0 ; event
 00000004  ---- Variable 'event' assigned to Register 'R1' ----
  183:     switch (event) {
 00000004  1C08      MOV         R0,R1 ; event
 00000006  2802      CMP         R0,#0x2 ; event
 00000008  D005      BEQ         L_3  ; T=0x00000016
 0000000A  2803      CMP         R0,#0x3 ; event
 0000000C  D106      BNE         L_2  ; T=0x0000001C
  184:     case USB_EVT_IN:
 0000000E          L_4:
  185:         Data2Host0 = 1;
 0000000E  2101      MOV         R1,#0x1
 00000010  4800      LDR         R0,=Data2Host0 ; Data2Host0
ARM COMPILER V2.53,  VCOMuser                                                              09/06/07  15:42:25  PAGE 12  

 00000012  7001      STRB        R1,[R0,#0x0] ; Data2Host0
  186:         break;
 00000014  E002      B           L_2  ; T=0x0000001C
  187:     case USB_EVT_OUT:
 00000016          L_3:
  188:         HostDataToUart(0);
 00000016  2000      MOV         R0,#0x0
 00000018  F7FF      BL          HostDataToUart?T  ; T=0x0001  (1)
 0000001A  FFF2      BL          HostDataToUart?T  ; T=0x0001  (2)
  192:     }
 0000001C          L_2:
  194: }
 0000001C  BC08      POP         {R3}
 0000001E  4718      BX          R3
 00000020          ENDP ; 'USB_EndPoint2?T'


*** CODE SEGMENT '?PR?USB_EndPoint3?T?VCOMuser':
  204: }
 00000000  4770      BX          R14
 00000002          ENDP ; 'USB_EndPoint3?T'


*** CODE SEGMENT '?PR?USB_EndPoint4?T?VCOMuser':
  213: }
 00000000  4770      BX          R14
 00000002          ENDP ; 'USB_EndPoint4?T'


*** CODE SEGMENT '?PR?USB_EndPoint5?T?VCOMuser':
  220: void USB_EndPoint5 (DWORD event) {
 00000000  B500      PUSH        {LR}
 00000002  1C01      MOV         R1,R0 ; event
 00000004  ---- Variable 'event' assigned to Register 'R1' ----
  221:     switch (event) {
 00000004  1C08      MOV         R0,R1 ; event
 00000006  2802      CMP         R0,#0x2 ; event
 00000008  D005      BEQ         L_6  ; T=0x00000016
 0000000A  2803      CMP         R0,#0x3 ; event
 0000000C  D106      BNE         L_5  ; T=0x0000001C
  222:     case USB_EVT_IN:
 0000000E          L_7:
  223:         Data2Host1 = 1;
 0000000E  2101      MOV         R1,#0x1
 00000010  4800      LDR         R0,=Data2Host1 ; Data2Host1
 00000012  7001      STRB        R1,[R0,#0x0] ; Data2Host1
  224:         break;
 00000014  E002      B           L_5  ; T=0x0000001C
  225:     case USB_EVT_OUT:
 00000016          L_6:
  226:         HostDataToUart( 1 );
 00000016  2001      MOV         R0,#0x1
 00000018  F7FF      BL          HostDataToUart?T  ; T=0x0001  (1)
 0000001A  FFF2      BL          HostDataToUart?T  ; T=0x0001  (2)
  228:     }
 0000001C          L_5:
  230: }
 0000001C  BC08      POP         {R3}
 0000001E  4718      BX          R3
 00000020          ENDP ; 'USB_EndPoint5?T'


⌨️ 快捷键说明

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