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

📄 chap_9.lst

📁 周立功的LPC214x固件程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
ARM COMPILER V2.53,  Chap_9                                                                28/06/07  09:54:11  PAGE 14  

 0000002E  A801      ADD         R0,R13,#0x4
 00000030  7001      STRB        R1,[R0,#0x0] ; txdat
 00000032  E002      B           L_7  ; T=0x0000003A
 00000034          L_6:
  182:             txdat[0] = 1;                                       /* 不支持以上两个功能   not support two function above */
 00000034  2101      MOV         R1,#0x1
 00000036  A801      ADD         R0,R13,#0x4
 00000038  7001      STRB        R1,[R0,#0x0] ; txdat
 0000003A          L_7:
  183:         txdat[1]=0;                                             /* 高 8 位清 0          upper 8-bit clear */
 0000003A  2100      MOV         R1,#0x0
 0000003C  2005      MOV         R0,#0x5
 0000003E  4468      ADD         R0,R13
 00000040  7001      STRB        R1,[R0,#0x0] ; txdat+1
  184:         single_transmit(txdat, 2);                              /* 发送16ibt到USB主机   transmit 16-bit to USB host */
 00000042  A801      ADD         R0,R13,#0x4
 00000044  2102      MOV         R1,#0x2
 00000046  F7FF      BL          single_transmit?T  ; T=0x0001  (1)
 00000048  FFDB      BL          single_transmit?T  ; T=0x0001  (2)
  185:     } 
 0000004A  E048      B           L_8  ; T=0x000000DE
 0000004C          L_5:
  187:     else if (bRecipient == USB_RECIPIENT_INTERFACE) 
 0000004C  A803      ADD         R0,R13,#0xC
 0000004E  7800      LDRB        R0,[R0,#0x0] ; bRecipient
 00000050  2801      CMP         R0,#0x1
 00000052  D10B      BNE         L_9  ; T=0x0000006C
  189:         txdat[0]=0;
 00000054  2100      MOV         R1,#0x0
 00000056  A801      ADD         R0,R13,#0x4
 00000058  7001      STRB        R1,[R0,#0x0] ; txdat
  190:         txdat[1]=0;
 0000005A  2100      MOV         R1,#0x0
 0000005C  2005      MOV         R0,#0x5
 0000005E  4468      ADD         R0,R13
 00000060  7001      STRB        R1,[R0,#0x0] ; txdat+1
  191:         single_transmit(txdat, 2);                              /* 发送16ibt到USB主机   transmit 16-bit to USB host */
 00000062  A801      ADD         R0,R13,#0x4
 00000064  2102      MOV         R1,#0x2
 00000066  F7FF      BL          single_transmit?T  ; T=0x0001  (1)
 00000068  FFCB      BL          single_transmit?T  ; T=0x0001  (2)
  192:     }
 0000006A  E038      B           L_8  ; T=0x000000DE
 0000006C          L_9:
  194:     else if (bRecipient == USB_RECIPIENT_ENDPOINT) 
 0000006C  A803      ADD         R0,R13,#0xC
 0000006E  7800      LDRB        R0,[R0,#0x0] ; bRecipient
 00000070  2802      CMP         R0,#0x2
 00000072  D132      BNE         L_11  ; T=0x000000DA
  196:         endp = (INT8U)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
 00000074  4800      LDR         R0,=ControlData + 0x4 ; ControlData+4
 00000076  8800      LDRH        R0,[R0,#0x0] ; ControlData+4
 00000078  1C01      MOV         R1,R0
 0000007A  2003      MOV         R0,#0x3
 0000007C  4001      AND         R1,R0
 0000007E  0609      LSL         R1,R1,#0x18
 00000080  0E09      LSR         R1,R1,#0x18
 00000082  A800      ADD         R0,R13,#0x0
 00000084  7001      STRB        R1,[R0,#0x0] ; endp
  197:         if (ControlData.DeviceRequest.wIndex & (INT8U)USB_ENDPOINT_DIRECTION_MASK)
 00000086  4800      LDR         R0,=ControlData + 0x4 ; ControlData+4
 00000088  8800      LDRH        R0,[R0,#0x0] ; ControlData+4
 0000008A  2180      MOV         R1,#0x80
 0000008C  4208      TST         R0,R1
 0000008E  D008      BEQ         L_12  ; T=0x000000A2
  202:             c = USB_SelectEndpoint(endp * 2 + 1);               /* 读 IN 端点状态       read status of the IN endpoint */
ARM COMPILER V2.53,  Chap_9                                                                28/06/07  09:54:11  PAGE 15  

 00000090  A800      ADD         R0,R13,#0x0
 00000092  7800      LDRB        R0,[R0,#0x0] ; endp
 00000094  0040      LSL         R0,R0,#0x1
 00000096  3001      ADD         R0,#0x1
 00000098  F7FF      BL          USB_SelectEndpoint?T  ; T=0x0001  (1)
 0000009A  FFB2      BL          USB_SelectEndpoint?T  ; T=0x0001  (2)
 0000009C  A902      ADD         R1,R13,#0x8
 0000009E  7008      STRB        R0,[R1,#0x0] ; c
 000000A0  E006      B           L_13  ; T=0x000000B0
 000000A2          L_12:
  204:             c = USB_SelectEndpoint(endp * 2);                   /* 读 OUT 端点状态      read status of the OUT endpoint */
 000000A2  A800      ADD         R0,R13,#0x0
 000000A4  7800      LDRB        R0,[R0,#0x0] ; endp
 000000A6  0040      LSL         R0,R0,#0x1
 000000A8  F7FF      BL          USB_SelectEndpoint?T  ; T=0x0001  (1)
 000000AA  FFAA      BL          USB_SelectEndpoint?T  ; T=0x0001  (2)
 000000AC  A902      ADD         R1,R13,#0x8
 000000AE  7008      STRB        R0,[R1,#0x0] ; c
 000000B0          L_13:
  205:         if(c & USB_STALL)
 000000B0  A802      ADD         R0,R13,#0x8
 000000B2  7800      LDRB        R0,[R0,#0x0] ; c
 000000B4  2102      MOV         R1,#0x2
 000000B6  4208      TST         R0,R1
 000000B8  D003      BEQ         L_14  ; T=0x000000C2
  206:             txdat[0] = 1;                                       /* 端点已被禁止         the endpoint is stalled */
 000000BA  2101      MOV         R1,#0x1
 000000BC  A801      ADD         R0,R13,#0x4
 000000BE  7001      STRB        R1,[R0,#0x0] ; txdat
 000000C0  E002      B           L_15  ; T=0x000000C8
 000000C2          L_14:
  208:             txdat[0] = 0;                                       /* 端点已解禁           the endpoint is unstalled */
 000000C2  2100      MOV         R1,#0x0
 000000C4  A801      ADD         R0,R13,#0x4
 000000C6  7001      STRB        R1,[R0,#0x0] ; txdat
 000000C8          L_15:
  209:         txdat[1] = 0;
 000000C8  2100      MOV         R1,#0x0
 000000CA  2005      MOV         R0,#0x5
 000000CC  4468      ADD         R0,R13
 000000CE  7001      STRB        R1,[R0,#0x0] ; txdat+1
  210:         single_transmit(txdat, 2);                              /* 发送16ibt到USB主机   transmit 16-bit to USB host */
 000000D0  A801      ADD         R0,R13,#0x4
 000000D2  2102      MOV         R1,#0x2
 000000D4  F7FF      BL          single_transmit?T  ; T=0x0001  (1)
 000000D6  FF94      BL          single_transmit?T  ; T=0x0001  (2)
  212:     }
 000000D8  E001      B           L_8  ; T=0x000000DE
 000000DA          L_11:
  214:         stall_ep0();                                            /* 非标准请求,禁止逻辑端点0 */
 000000DA  F7FF      BL          stall_ep0?T  ; T=0x0001  (1)
 000000DC  FF91      BL          stall_ep0?T  ; T=0x0001  (2)
 000000DE          L_8:
 000000DE            ; SCOPE-END
  216: }                                                                
 000000DE  B004      ADD         R13,#0x10
 000000E0  BC08      POP         {R3}
 000000E2  4718      BX          R3
 000000E4          ENDP ; 'get_status?T'


*** CODE SEGMENT '?PR?clear_feature?T?Chap_9':
  223: void clear_feature(void)
 00000000  B500      PUSH        {LR}
 00000002  B082      SUB         R13,#0x8
  224: {
 00000004            ; SCOPE-START
  226:     INT8U bRecipient = ControlData.DeviceRequest.bmRequestType & USB_RECIPIENT;
ARM COMPILER V2.53,  Chap_9                                                                28/06/07  09:54:11  PAGE 16  

 00000004  4800      LDR         R0,=ControlData ; ControlData
 00000006  7800      LDRB        R0,[R0,#0x0] ; ControlData
 00000008  1C01      MOV         R1,R0
 0000000A  201F      MOV         R0,#0x1F
 0000000C  4001      AND         R1,R0
 0000000E  0609      LSL         R1,R1,#0x18
 00000010  0E09      LSR         R1,R1,#0x18
 00000012  A801      ADD         R0,R13,#0x4
 00000014  7001      STRB        R1,[R0,#0x0] ; bRecipient
  228:     if (bRecipient == USB_RECIPIENT_DEVICE                  
 00000016  A801      ADD         R0,R13,#0x4
 00000018  7800      LDRB        R0,[R0,#0x0] ; bRecipient
 0000001A  2800      CMP         R0,#0x0
 0000001C  D111      BNE         L_17  ; T=0x00000042
 0000001E  4800      LDR         R0,=ControlData + 0x2 ; ControlData+2
 00000020  8800      LDRH        R0,[R0,#0x0] ; ControlData+2
 00000022  2801      CMP         R0,#0x1
 00000024  D10D      BNE         L_17  ; T=0x00000042
  231:         DISABLE();                              
 00000026  F7FF      BL          DISABLE?T  ; T=0x0001  (1)
 00000028  FFEB      BL          DISABLE?T  ; T=0x0001  (2)
  232:         bEPPflags.bits.remote_wakeup = 0;                       /* 清除远程唤醒特性     clear reamote wakeup feature */ 
 0000002A  4800      LDR         R0,=bEPPflags ; bEPPflags
 0000002C  6801      LDR         R1,[R0,#0x0] ; bEPPflags
 0000002E  2210      MOV         R2,#0x10
 00000030  4391      BIC         R1,R2
 00000032  6001      STR         R1,[R0,#0x0] ; bEPPflags
  233:         ENABLE();
 00000034  F7FF      BL          ENABLE?T  ; T=0x0001  (1)
 00000036  FFE4      BL          ENABLE?T  ; T=0x0001  (2)
  234:         single_transmit(0, 0);                                  /* 返回一个空包         return an empty packet */
 00000038  2000      MOV         R0,#0x0
 0000003A  2100      MOV         R1,#0x0
 0000003C  F7FF      BL          single_transmit?T  ; T=0x0001  (1)
 0000003E  FFE0      BL          single_transmit?T  ; T=0x0001  (2)
  235:     }
 00000040  E02A      B           L_18  ; T=0x00000098
 00000042          L_17:
  237:     else if (bRecipient == USB_RECIPIENT_ENDPOINT
 00000042  A801      ADD         R0,R13,#0x4
 00000044  7800      LDRB        R0,[R0,#0x0] ; bRecipient
 00000046  2802      CMP         R0,#0x2
 00000048  D124      BNE         L_19  ; T=0x00000094
 0000004A  4800      LDR         R0,=ControlData + 0x2 ; ControlData+2
 0000004C  8800      LDRH        R0,[R0,#0x0] ; ControlData+2
 0000004E  2800      CMP         R0,#0x0
 00000050  D120      BNE         L_19  ; T=0x00000094
  241:         endp = (INT8U)(ControlData.DeviceRequest.wIndex & MAX_ENDPOINTS);
 00000052  4800      LDR         R0,=ControlData + 0x4 ; ControlData+4
 00000054  8800      LDRH        R0,[R0,#0x0] ; ControlData+4
 00000056  1C01      MOV         R1,R0
 00000058  2003      MOV         R0,#0x3
 0000005A  4001      AND         R1,R0
 0000005C  0609      LSL         R1,R1,#0x18
 0000005E  0E09      LSR         R1,R1,#0x18
 00000060  A800      ADD         R0,R13,#0x0
 00000062  7001      STRB        R1,[R0,#0x0] ; endp
  242:         if (ControlData.DeviceRequest.wIndex & (INT8U)USB_ENDPOINT_DIRECTION_MASK)
 00000064  4800      LDR         R0,=ControlData + 0x4 ; ControlData+4
 00000066  8800      LDRH        R0,[R0,#0x0] ; ControlData+4
 00000068  2180      MOV         R1,#0x80
 0000006A  4208      TST         R0,R1
 0000006C  D007      BEQ         L_20  ; T=0x0000007E
  243:             USB_SetEndpointStatus(endp * 2 + 1, 0);             /* 解禁 IN 端点         the IN endpoint is unstalled */
 0000006E  A800      ADD         R0,R13,#0x0
 00000070  7800      LDRB        R0,[R0,#0x0] ; endp
ARM COMPILER V2.53,  Chap_9                                                                28/06/07  09:54:11  PAGE 17  

 00000072  0040      LSL         R0,R0,#0x1
 00000074  3001      ADD         R0,#0x1
 00000076  2100      MOV         R1,#0x0
 00000078  F7FF      BL          USB_SetEndpointStatus?T  ; T=0x0001  (1)
 0000007A  FFC2      BL          USB_SetEndpointStatus?T  ; T=0x0001  (2)
 0000007C  E005      B           L_21  ; T=0x0000008A
 0000007E          L_20:
  245:             USB_

⌨️ 快捷键说明

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