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

📄 usbci.lst

📁 周立功的LPC214x固件程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
  446          void reconnect_USB(void)
  447          {
  448   1          INT32U clk_cnt;
  449   1      
  450   1          disconnect_USB();                               /* disconnect USB bus */
  451   1          for (clk_cnt = 0;clk_cnt<= 0x1FFFF;clk_cnt++);  /* delay */
  452   1          
  453   1          connect_USB();                                  /* connect USB bus */
  454   1      }
  455          
  456          
  457          /*******************************************************************************************************
  458          **                            End Of File
  459          ********************************************************************************************************/
ARM COMPILER V2.53,  USBCI                                                                 28/06/07  09:54:12  PAGE 9   

ASSEMBLY LISTING OF GENERATED OBJECT CODE



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



*** PUBLICS:
 PUBLIC         USB_ConfigMaxPaketSize?T
 PUBLIC         USB_ReadTestRegister?T
 PUBLIC         USB_SetAddressEnable?T
 PUBLIC         USB_SetEndpointEnable?T
 PUBLIC         USB_SetMode?T
 PUBLIC         USB_SetDevStatus?T
 PUBLIC         USB_GetDevStatus?T
 PUBLIC         USB_SelectEndpoint?T
 PUBLIC         USB_SelectClrIntEndpoint?T
 PUBLIC         USB_SetEndpointStatus?T
 PUBLIC         USB_ClearBuffer?T
 PUBLIC         USB_ValidBuffer?T
 PUBLIC         USB_ReadEndpoint?T
 PUBLIC         USB_WriteEndpoint?T
 PUBLIC         reconnect_USB?T
 PUBLIC         USB_GetData?T
 PUBLIC         USB_SendCmd?T
 PUBLIC         disconnect_USB?T
 PUBLIC         connect_USB?T



*** CODE SEGMENT '?PR?USB_ConfigMaxPaketSize?T?USBCI':
   50: void USB_ConfigMaxPaketSize(INT8U endp, INT32U packetsize)
 00000000  B403      PUSH        {R0-R1}
   53:     USBReEp |= (INT32U)(0x01 << endp);                              /* 与原来存在的寄存器值做或操作 */
 00000002  A800      ADD         R0,R13,#0x0
 00000004  7800      LDRB        R0,[R0,#0x0] ; endp
 00000006  2201      MOV         R2,#0x1
 00000008  4082      LSL         R2,R0
 0000000A  4800      LDR         R0,=0xE0090044
 0000000C  6801      LDR         R1,[R0,#0x0]
 0000000E  4311      ORR         R1,R2
 00000010  6001      STR         R1,[R0,#0x0]
   56:     USBEpInd = (INT32U)endp;                                        /* 选择端点 */  
 00000012  A800      ADD         R0,R13,#0x0
 00000014  7800      LDRB        R0,[R0,#0x0] ; endp
 00000016  1C01      MOV         R1,R0
 00000018  4800      LDR         R0,=0xE0090048
 0000001A  6001      STR         R1,[R0,#0x0]
   59:     USBMaxPSize = (INT32U)packetsize;                               /* 写入端点最大包长度值 */  
 0000001C  A801      ADD         R0,R13,#0x4
 0000001E  6801      LDR         R1,[R0,#0x0] ; packetsize
 00000020  4800      LDR         R0,=0xE009004C
 00000022  6001      STR         R1,[R0,#0x0]
   62:     while((USBDevIntSt & EP_RLZEDINT) == 0);                        /* 等待处理完成 */
 00000024          L_1:
 00000024  4800      LDR         R0,=0xE0090000
 00000026  6800      LDR         R0,[R0,#0x0]
 00000028  4940      LDR         R1,=0x100
 0000002A  4208      TST         R0,R1
 0000002C  D0FA      BEQ         L_1  ; T=0x00000024
   65:     USBDevIntClr = EP_RLZEDINT;                                     /* 清除中断标志位 */    
 0000002E  4940      LDR         R1,=0x100
 00000030  4800      LDR         R0,=0xE0090008
 00000032  6001      STR         R1,[R0,#0x0]
   66: }
 00000034  B002      ADD         R13,#0x8
 00000036  4770      BX          R14
 00000038          ENDP ; 'USB_ConfigMaxPaketSize?T'


*** CODE SEGMENT '?PR?USB_GetData?T?USBCI':
ARM COMPILER V2.53,  USBCI                                                                 28/06/07  09:54:12  PAGE 10  

   81: INT8U USB_GetData(INT32U cmd)
 00000000  B401      PUSH        {R0}
   84:     USBCmdCode = cmd;                                   /* 写入命令字 */
 00000002  A800      ADD         R0,R13,#0x0
 00000004  6801      LDR         R1,[R0,#0x0] ; cmd
 00000006  4800      LDR         R0,=0xE0090010
 00000008  6001      STR         R1,[R0,#0x0]
   87:     while((USBDevIntSt & CDFULL) == 0);                 /* 等待USBDevIntSt寄存器的CDFULL位置1*/
 0000000A          L_5:
 0000000A  4800      LDR         R0,=0xE0090000
 0000000C  6800      LDR         R0,[R0,#0x0]
 0000000E  2120      MOV         R1,#0x20
 00000010  4208      TST         R0,R1
 00000012  D0FA      BEQ         L_5  ; T=0x0000000A
   90:     USBDevIntClr = CDFULL;                              /* 清除CDFULL位 */
 00000014  2120      MOV         R1,#0x20
 00000016  4800      LDR         R0,=0xE0090008
 00000018  6001      STR         R1,[R0,#0x0]
   93:     return USBCmdData;                                  /* 读取数据 */
 0000001A  4800      LDR         R0,=0xE0090014
 0000001C  6800      LDR         R0,[R0,#0x0]
   94: }
 0000001E  B001      ADD         R13,#0x4
 00000020  4770      BX          R14
 00000022          ENDP ; 'USB_GetData?T'


*** CODE SEGMENT '?PR?USB_SendCmd?T?USBCI':
  104: void USB_SendCmd(INT32U cmd, INT32U data)
 00000000  B403      PUSH        {R0-R1}
  107:     USBCmdCode = cmd;                                   /* 写入命令字 */
 00000002  A800      ADD         R0,R13,#0x0
 00000004  6801      LDR         R1,[R0,#0x0] ; cmd
 00000006  4800      LDR         R0,=0xE0090010
 00000008  6001      STR         R1,[R0,#0x0]
  110:     while((USBDevIntSt & CCEMPTY) == 0);                /* 等待 USBDevIntSt 寄存器的 CCEMPTY 位置1 */
 0000000A          L_10:
 0000000A  4800      LDR         R0,=0xE0090000
 0000000C  6800      LDR         R0,[R0,#0x0]
 0000000E  2110      MOV         R1,#0x10
 00000010  4208      TST         R0,R1
 00000012  D0FA      BEQ         L_10  ; T=0x0000000A
  113:     USBDevIntClr = CCEMPTY;                             /* 清除 CCEMPTY 位*/
 00000014  2110      MOV         R1,#0x10
 00000016  4800      LDR         R0,=0xE0090008
 00000018  6001      STR         R1,[R0,#0x0]
  115:     if (data != 0)                                      /* 如果还有数据阶段 */
 0000001A  A801      ADD         R0,R13,#0x4
 0000001C  6800      LDR         R0,[R0,#0x0] ; data
 0000001E  2800      CMP         R0,#0x0
 00000020  D00B      BEQ         L_14  ; T=0x0000003A
  118:         USBCmdCode = data;                              /* 将数据编码写入命令代码寄存器 */
 00000022  A801      ADD         R0,R13,#0x4
 00000024  6801      LDR         R1,[R0,#0x0] ; data
 00000026  4800      LDR         R0,=0xE0090010
 00000028  6001      STR         R1,[R0,#0x0]
  121:         while((USBDevIntSt & CCEMPTY) == 0);            /* 等待 USBDevIntSt 寄存器的 CCEMPTY 位置1 */
 0000002A          L_15:
 0000002A  4800      LDR         R0,=0xE0090000
 0000002C  6800      LDR         R0,[R0,#0x0]
 0000002E  2110      MOV         R1,#0x10
 00000030  4208      TST         R0,R1
 00000032  D0FA      BEQ         L_15  ; T=0x0000002A
  124:         USBDevIntClr = CCEMPTY;                         /* 清除 CCEMPTY 位*/
 00000034  2110      MOV         R1,#0x10
 00000036  4800      LDR         R0,=0xE0090008
 00000038  6001      STR         R1,[R0,#0x0]
  125:     }    
ARM COMPILER V2.53,  USBCI                                                                 28/06/07  09:54:12  PAGE 11  

 0000003A          L_14:
  126: }  
 0000003A  B002      ADD         R13,#0x8
 0000003C  4770      BX          R14
 0000003E          ENDP ; 'USB_SendCmd?T'


*** CODE SEGMENT '?PR?USB_ReadTestRegister?T?USBCI':
  139: INT16U USB_ReadTestRegister(void)
 00000000  B500      PUSH        {LR}
 00000002  B081      SUB         R13,#0x4
  140: {
 00000004            ; SCOPE-START
  143:     USB_SendCmd(USBCMD_RDTEST_REG, 0);  
 00000004  4800      LDR         R0,=0xFD0500
 00000006  2100      MOV         R1,#0x0
 00000008  F7FF      BL          USB_SendCmd?T  ; T=0x0001  (1)
 0000000A  FFFA      BL          USB_SendCmd?T  ; T=0x0001  (2)
  145:     temp = USB_GetData(USBDAT_RDTEST_REG);                      /* read LSB byte */
 0000000C  4800      LDR         R0,=0xFD0200
 0000000E  F7FF      BL          USB_GetData?T  ; T=0x0001  (1)
 00000010  FFF7      BL          USB_GetData?T  ; T=0x0001  (2)
 00000012  0601      LSL         R1,R0,#0x18 ; USB_GetData?T
 00000014  0E09      LSR         R1,R1,#0x18
 00000016  A800      ADD         R0,R13,#0x0
 00000018  8001      STRH        R1,[R0,#0x0] ; temp
  146:     temp += (INT16U)USB_GetData(USBDAT_RDTEST_REG) << 8;        /* read MSB byte */
 0000001A  4800      LDR         R0,=0xFD0200
 0000001C  F7FF      BL          USB_GetData?T  ; T=0x0001  (1)
 0000001E  FFF0      BL          USB_GetData?T  ; T=0x0001  (2)
 00000020  0600      LSL         R0,R0,#0x18 ; USB_GetData?T
 00000022  0E00      LSR         R0,R0,#0x18
 00000024  0402      LSL         R2,R0,#0x10
 00000026  0C12      LSR         R2,R2,#0x10
 00000028  0212      LSL         R2,R2,#0x8
 0000002A  0412      LSL         R2,R2,#0x10
 0000002C  0C12      LSR         R2,R2,#0x10
 0000002E  A800      ADD         R0,R13,#0x0
 00000030  8801      LDRH        R1,[R0,#0x0] ; temp
 00000032  1889      ADD         R1,R2
 00000034  8001      STRH        R1,[R0,#0x0] ; temp
  148:     return temp;
 00000036  A800      ADD         R0,R13,#0x0
 00000038  8800      LDRH        R0,[R0,#0x0] ; temp
 0000003A            ; SCOPE-END
  149: }    
 0000003A  B001      ADD         R13,#0x4
 0000003C  BC08      POP         {R3}
 0000003E  4718      BX          R3
 00000040          ENDP ; 'USB_ReadTestRegister?T'


*** CODE SEGMENT '?PR?USB_SetAddressEnable?T?USBCI':
  160: void USB_SetAddressEnable(INT8U bAddress, INT8U bEnable)
 00000000  B503      PUSH        {R0-R1,LR}
  162:     if (bEnable)
 00000002  A801      ADD         R0,R13,#0x4
 00000004  7800      LDRB        R0,[R0,#0x0] ; bEnable
 00000006  2800      CMP         R0,#0x0
 00000008  D005      BEQ         L_20  ; T=0x00000016
  163:         bAddress |= 0x80;   
 0000000A  A800      ADD         R0,R13,#0x0
 0000000C  7801      LDRB        R1,[R0,#0x0] ; bAddress
 0000000E  2080      MOV         R0,#0x80
 00000010  4301      ORR         R1,R0
 00000012  A800      ADD         R0,R13,#0x0
 00000014  7001      STRB        R1,[R0,#0x0] ; bAddress
 00000016          L_20:
  165:     USB_SendCmd(USBCMD_SET_ADDRESS, ((INT32U)(bAddress << 16)) | USBDAT_SET_ADDRESS);
 00000016  A800      ADD         R0,R13,#0x0
ARM COMPILER V2.53,  USBCI                                                                 28/06/07  09:54:12  PAGE 12  

 00000018  7800      LDRB        R0,[R0,#0x0] ; bAddress
 0000001A  1C01      MOV         R1,R0
 0000001C  0409      LSL         R1,R1,#0x10
 0000001E  4840      LDR         R0,=0x100
 00000020  4301      ORR         R1,R0
 00000022  4800      LDR         R0,=0xD00500
 00000024  F7FF      BL          USB_SendCmd?T  ; T=0x0001  (1)
 00000026  FFEC      BL          USB_SendCmd?T  ; T=0x0001  (2)
  166: }    
 00000028  B002      ADD         R13,#0x8
 0000002A  BC08      POP         {R3}
 0000002C  4718      BX          R3
 0000002E          ENDP ; 'USB_SetAddressEnable?T'


*** CODE SEGMENT '?PR?USB_SetEndpointEnable?T?USBCI':
  176: void USB_SetEndpointEnable(INT8U bEnble)
 00000000  B501      PUSH        {R0,LR}
  178:     USB_SendCmd(USBCMD_CONFIG_DEV, ((INT32U)(bEnble << 16)) | USBDAT_CONFIG_DEV);

⌨️ 快捷键说明

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