📄 vcomuser.lst
字号:
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 + -