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

📄 usbhw.lst

📁 在ATMEL芯片下的USB底层程序的开发
💻 LST
📖 第 1 页 / 共 5 页
字号:
 00000012  6B00      LDR         R0,[R0,#0x30]
 00000014  2310      MOV         R3,#0x10
 00000016  4218      TST         R0,R3
 00000018  D013      BEQ         L_42  ; T=0x00000042
  357:     if ((DualBankEP & (1 << EPNum)) && (TxDataBank[EPNum] == 0)) {
 0000001A  1C20      MOV         R0,R4 ; EPNum
 0000001C  2301      MOV         R3,#0x1
 0000001E  4083      LSL         R3,R0
 00000020  4800      LDR         R0,=DualBankEP ; DualBankEP
 00000022  7800      LDRB        R0,[R0,#0x0] ; DualBankEP
 00000024  4018      AND         R0,R3
 00000026  2800      CMP         R0,#0x0
 00000028  D009      BEQ         L_35  ; T=0x0000003E
 0000002A  1C23      MOV         R3,R4 ; EPNum
 0000002C  4800      LDR         R0,=TxDataBank ; TxDataBank
 0000002E  5CC0      LDRB        R0,[R0,R3]
 00000030  2800      CMP         R0,#0x0
 00000032  D104      BNE         L_35  ; T=0x0000003E
  358:       TxDataBank[EPNum] = 1;
 00000034  2301      MOV         R3,#0x1
 00000036  1C25      MOV         R5,R4 ; EPNum
 00000038  4800      LDR         R0,=TxDataBank ; TxDataBank
 0000003A  5543      STRB        R3,[R0,R5]
  359:     } else {
 0000003C  E001      B           L_42  ; T=0x00000042
 0000003E          L_35:
  360:       return (0);
 0000003E  2000      MOV         R0,#0x0
 00000040  E01A      B           L_37  ; T=0x00000078
  363:   for (n = 0; n < cnt; n++) {
 00000042          L_42:
 00000042  2300      MOV         R3,#0x0
 00000044  ---- Variable 'n' assigned to Register 'R3' ----
 00000044  E009      B           L_40  ; T=0x0000005A
 00000046          L_41:
  364:     pUDP->UDP_FDR[EPNum] = *pData++;
 00000046  1C08      MOV         R0,R1 ; pData
 00000048  3101      ADD         R1,#0x1
 0000004A  7805      LDRB        R5,[R0,#0x0] ; pData
 0000004C  1C26      MOV         R6,R4 ; EPNum
 0000004E  00B6      LSL         R6,R6,#0x2 ; EPNum
 00000050  4800      LDR         R0,=pUDP ; pUDP
 00000052  6800      LDR         R0,[R0,#0x0] ; pUDP
 00000054  1980      ADD         R0,R6
 00000056  6505      STR         R5,[R0,#0x50]
  365:   }
 00000058  3301      ADD         R3,#0x1
 0000005A          L_40:
 0000005A  1C15      MOV         R5,R2 ; cnt
 0000005C  1C18      MOV         R0,R3 ; n
 0000005E  42A8      CMP         R0,R5 ; n
 00000060  D3F1      BCC         L_41  ; T=0x00000046
  366:   pUDP->UDP_CSR[EPNum] |= AT91C_UDP_TXPKTRDY;
 00000062  2310      MOV         R3,#0x10
 00000064  1C21      MOV         R1,R4 ; EPNum
ARM COMPILER V2.53,  usbhw                                                                 31/10/07  09:22:43  PAGE 20  

 00000066  0089      LSL         R1,R1,#0x2 ; EPNum
 00000068  4800      LDR         R0,=pUDP ; pUDP
 0000006A  6800      LDR         R0,[R0,#0x0] ; pUDP
 0000006C  1840      ADD         R0,R1
 0000006E  3030      ADD         R0,#0x30
 00000070  6801      LDR         R1,[R0,#0x0]
 00000072  4319      ORR         R1,R3
 00000074  6001      STR         R1,[R0,#0x0]
  368:   return (cnt);
 00000076  1C10      MOV         R0,R2 ; cnt
 00000078            ; SCOPE-END
  369: }
 00000078          L_37:
 00000078  BC70      POP         {R4-R6}
 0000007A  4770      BX          R14
 0000007C          ENDP ; 'USB_WriteEP?T'


*** CODE SEGMENT '?PR?USB_GetFrame?T?usbhw':
  378: DWORD USB_GetFrame (void) {
 00000000  ---- Variable 'val' assigned to Register 'R1' ----
 00000000            ; SCOPE-START
  380:   while ((pUDP->UDP_NUM & (AT91C_UDP_FRM_OK | AT91C_UDP_FRM_ERR)) == 0);
 00000000          L_43:
 00000000  4800      LDR         R0,=pUDP ; pUDP
 00000002  6800      LDR         R0,[R0,#0x0] ; pUDP
 00000004  6802      LDR         R2,[R0,#0x0]
 00000006  4800      LDR         R3,=0x30000
 00000008  421A      TST         R2,R3
 0000000A  D0F9      BEQ         L_43  ; T=0x00000000
  381:   if (pUDP->UDP_NUM & AT91C_UDP_FRM_OK) {
 0000000C  6802      LDR         R2,[R0,#0x0]
 0000000E  4800      LDR         R3,=0x20000
 00000010  421A      TST         R2,R3
 00000012  D003      BEQ         L_47  ; T=0x0000001C
  382:     val = pUDP->UDP_NUM & AT91C_UDP_FRM_NUM;
 00000014  6801      LDR         R1,[R0,#0x0]
 00000016  4800      LDR         R0,=0x7FF
 00000018  4001      AND         R1,R0
  383:   } else {
 0000001A  E000      B           L_48  ; T=0x0000001E
 0000001C          L_47:
  384:     val = 0xFFFFFFFF;
 0000001C  4800      LDR         R1,=0xFFFFFFFF
  385:   }
 0000001E          L_48:
  386:   return (val);
 0000001E  1C08      MOV         R0,R1 ; val
 00000020            ; SCOPE-END
  387: }
 00000020  4770      BX          R14
 00000022          ENDP ; 'USB_GetFrame?T'


*** CODE SEGMENT '?PR?USB_ISR?A?usbhw':
  392: void USB_ISR (void) __irq {
 00000000  E92D5FFF  STMDB       R13!,{R0-R12,LR}
 00000004  ---- Variable 'isr' assigned to Register 'R4' ----
 00000004            ; SCOPE-START
  395:   while (isr = pUDP->UDP_ISR) {
 00000004  EA0000B8  B           L_50  ; Targ=0x2EC
 00000008          L_52:
  398:     if (isr & AT91C_UDP_ENDBUSRES) {
 00000008  E1A00004  MOV         R0,R4 ; isr
 0000000C  E3100A01  TST         R0,#0x1000 ; isr
 00000010  0A000005  BEQ         L_54  ; Targ=0x2C
  399:       USB_Reset();
 00000014  EBFFFFF9  BL          USB_Reset?A  ; Targ=0x0
  401:       USB_Reset_Event();
 00000018  EBFFFFF8  BL          USB_Reset_Event?A  ; Targ=0x0
ARM COMPILER V2.53,  usbhw                                                                 31/10/07  09:22:43  PAGE 21  

  403:       pUDP->UDP_ICR = AT91C_UDP_ENDBUSRES;
 0000001C  E3A00A01  MOV         R0,#0x1000
 00000020  E5101000  LDR         R1,=pUDP ; pUDP
 00000024  E5911000  LDR         R1,[R1,#0x0] ; pUDP
 00000028  E5810020  STR         R0,[R1,#0x20]
  404:     }
 0000002C          L_54:
  407:     if (isr & AT91C_UDP_RXSUSP) {
 0000002C  E1A00004  MOV         R0,R4 ; isr
 00000030  E3100C01  TST         R0,#0x0100 ; isr
 00000034  0A000005  BEQ         L_55  ; Targ=0x50
  408:       USB_Suspend();
 00000038  EBFFFFF0  BL          USB_Suspend?A  ; Targ=0x0
  410:       USB_Suspend_Event();
 0000003C  EBFFFFEF  BL          USB_Suspend_Event?A  ; Targ=0x0
  412:       pUDP->UDP_ICR = AT91C_UDP_RXSUSP;
 00000040  E3A00C01  MOV         R0,#0x100
 00000044  E5101000  LDR         R1,=pUDP ; pUDP
 00000048  E5911000  LDR         R1,[R1,#0x0] ; pUDP
 0000004C  E5810020  STR         R0,[R1,#0x20]
  413:     }
 00000050          L_55:
  415:     if (isr & AT91C_UDP_RXRSM) {
 00000050  E1A00004  MOV         R0,R4 ; isr
 00000054  E3100C02  TST         R0,#0x0200 ; isr
 00000058  0A000005  BEQ         L_56  ; Targ=0x74
  416:       USB_Resume();
 0000005C  EBFFFFE7  BL          USB_Resume?A  ; Targ=0x0
  418:       USB_Resume_Event();
 00000060  EBFFFFE6  BL          USB_Resume_Event?A  ; Targ=0x0
  420:       pUDP->UDP_ICR = AT91C_UDP_RXRSM;
 00000064  E3A00C02  MOV         R0,#0x200
 00000068  E5101000  LDR         R1,=pUDP ; pUDP
 0000006C  E5911000  LDR         R1,[R1,#0x0] ; pUDP
 00000070  E5810020  STR         R0,[R1,#0x20]
  421:     }
 00000074          L_56:
  424:     if (isr & AT91C_UDP_EXTRSM) {
 00000074  E1A00004  MOV         R0,R4 ; isr
 00000078  E3100B01  TST         R0,#0x0400 ; isr
 0000007C  0A000004  BEQ         L_57  ; Targ=0x94
  425:       USB_WakeUp();
 00000080  EBFFFFDE  BL          USB_WakeUp?A  ; Targ=0x0
  429:       pUDP->UDP_ICR = AT91C_UDP_EXTRSM;
 00000084  E3A00B01  MOV         R0,#0x400
 00000088  E5101000  LDR         R1,=pUDP ; pUDP
 0000008C  E5911000  LDR         R1,[R1,#0x0] ; pUDP
 00000090  E5810020  STR         R0,[R1,#0x20]
  430:     }
 00000094          L_57:
  433:     if (isr & AT91C_UDP_SOFINT) {
 00000094  E1A00004  MOV         R0,R4 ; isr
 00000098  E3100B02  TST         R0,#0x0800 ; isr
 0000009C  0A000003  BEQ         L_63  ; Targ=0xB0
  437:       pUDP->UDP_ICR = AT91C_UDP_SOFINT;
 000000A0  E3A00B02  MOV         R0,#0x800
 000000A4  E5101000  LDR         R1,=pUDP ; pUDP
 000000A8  E5911000  LDR         R1,[R1,#0x0] ; pUDP
 000000AC  E5810020  STR         R0,[R1,#0x20]
  441:     for (n = 0; n < USB_EP_NUM; n++) {
 000000B0          L_63:
 000000B0  E3A05000  MOV         R5,#0x0
 000000B4  ---- Variable 'n' assigned to Register 'R5' ----
 000000B4          L_62:
  442:       if (isr & (1 << n)) {
 000000B4  E1A01005  MOV         R1,R5 ; n
ARM COMPILER V2.53,  usbhw                                                                 31/10/07  09:22:43  PAGE 22  

 000000B8  E3A00001  MOV         R0,#0x1
 000000BC  E1A02000  MOV         R2,R0
 000000C0  E1A02112  MOV         R2,R2,LSL R1
 000000C4  E1A01004  MOV         R1,R4 ; isr
 000000C8  E0011002  AND         R1,R1,R2 ; isr
 000000CC  E3510000  CMP         R1,#0x0000
 000000D0  0A000081  BEQ         L_59  ; Targ=0x2DC
  444:         csr = pUDP->UDP_CSR[n];
 000000D4  E1A02005  MOV         R2,R5 ; n
 000000D8  E1A02102  MOV         R2,R2,LSL #2 ; n
 000000DC  E5101000  LDR         R1,=pUDP ; pUDP
 000000E0  E5911000  LDR         R1,[R1,#0x0] ; pUDP
 000000E4  E0811002  ADD         R1,R1,R2
 000000E8  E5916030  LDR         R6,[R1,#0x30]
 000000EC  ---- Variable 'csr' assigned to Register 'R6' ----
  446:         if (csr & AT91C_UDP_RXSETUP) {
 000000EC  E1A01006  MOV         R1,R6 ; csr
 000000F0  E3110004  TST         R1,#0x0004 ; csr
 000000F4  0A000007  BEQ         L_65  ; Targ=0x118
  447:           if (USB_P_EP[n]) {
 000000F8  E5101000  LDR         R1,=USB_P_EP ; USB_P_EP
 000000FC  E7911002  LDR         R1,[R1,+R2]
 00000100  E3510000  CMP         R1,#0x0000
 00000104  0A000003  BEQ         L_65  ; Targ=0x118
  448:             USB_P_EP[n](USB_EVT_SETUP);
 00000108  E5101000  LDR         R1,=USB_P_EP ; USB_P_EP
 0000010C  E7911002  LDR         R1,[R1,+R2]
 00000110  E1A0E00F  MOV         R14,R15
 00000114  E12FFF11  BX          R1
  452:         }
 00000118          L_65:
  455:         bkm = RX_DATA_BK[RxDataBank[n]];
 00000118  E1A01005  MOV         R1,R5 ; n
 0000011C  E5100000  LDR         R0,=RxDataBank ; RxDataBank
 00000120  E7D00001  LDRB        R0,[R0,+R1]
 00000124  E1A01000  MOV         R1,R0
 00000128  E1A01101  MOV         R1,R1,LSL #2
 0000012C  E5100000  LDR         R0,=RX_DATA_BK ; RX_DATA_BK
 00000130  E7907001  LDR         R7,[R0,+R1]
 00000134  ---- Variable 'bkm' assigned to Register 'R7' ----
  456:         if (csr & bkm) {
 00000134  E1A01007  MOV         R1,R7 ; bkm
 00000138  E1A00006  MOV         R0,R6 ; csr
 0000013C  E0000001  AND         R0,R0,R1 ; csr
 00000140  E3500000  CMP         R0,#0x0000
 00000144  0A000023  BEQ         L_67  ; Targ=0x1D8
  457:           if (USB_P_EP[n]) {
 00000148  E1A02005  MOV         R2,R5 ; n
 0000014C  E1A02102  MOV         R2,R2,LSL #2 ; n
 00000150  E5100000  LDR         R0,=USB_P_EP ; USB_P_EP
 00000154  E7900002  LDR         R0,[R0,+R2]
 00000158  E3500000  CMP         R0,#0x0000
 0000015C  0A000004  BEQ         L_68  ; Targ=0x174
  458:             USB_P_EP[n](USB_EVT_OUT);
 00000160  E3A00002  MOV         R0,#0x2
 00000164  E5101000  LDR         R1,=USB_P_EP ; USB_P_EP
 00000168  E7911002  LDR         R1,[R1,+R2]
 0000016C  E1A0E00F  MOV         R14,R15
 00000170  E12FFF11  BX          R1
  459:           }
 00000174          L_68:
  460:           pUDP->UDP_CSR[n] &= ~bkm;
 00000174  E1A02007  MOV         R2,R7 ; bkm
 00000178  E1E02002  MVN         R2,R2 ; bkm
 0000017C  E1A01005  MOV         R1,R5 ; n
 00000180  E1A01101  MOV         R1,R1,LSL #2 ; n
ARM COMPILER V2.53,  usbhw                                                                 31/10/07  09:22:43  PAGE 23  

 00000184  E5100000  LDR         R0,=pUDP ; pUDP
 00000188  E5900000  LDR         R0,[R0,#0x0] ; pUDP
 0000018C  E0800001  ADD         R0,R0,R1
 00000190  E2800030  ADD         R0,R0,#0x0030
 00000194  E5901000  LDR         R1,[R0,#0x0]
 00000198  E0011002  AND         R1,R1,R2
 0000019C  E5801000  STR         R1,[R0,#0x0]
  461:           if (DualBankEP & (1 << n)) {
 000001A0  E1A00005  MOV         R0,R5 ; n
 000001A4  E3A01001  MOV         R1,#0x1
 000001A8  E1A01011  MOV         R1,R1,LSL R0
 000001AC  E5100000  LDR         R0,=DualBankEP ; DualBankEP
 000001B0  E5D00000  LDRB        R0,[R0,#0x0] ; DualBankEP
 000001B4  E0000001  AND         R0,R0,R1
 000001B8  E3500000  CMP         R0,#0x0000
 000001BC  0A000005  BEQ         L_67  ; Targ=0x1D8
  462:             RxDataBank[n] ^= 1;
 000001C0  E1A01005  MOV         R1,R5 ; n
 000001C4  E5100000  LDR         R0,=RxDataBank ; RxDataBank
 000001C8  E0800001  ADD         R0,R0,R1 ; RxDataBank
 000001CC  E5D01000  LDRB        R1,[R0,#0x0]
 000001D0  E2211001  EOR         R1,R1,#0x0001
 000001D4  E5C01000  STRB        R1,[R0,#0x0]
  464:         }
 000001D8          L_67:
  467:         if (csr & AT91C_UDP_TXCOMP) {
 000001D8  E1A00006  MOV         R0,R6 ; csr
 000001DC  E3100001  TST         R0,#0x0001 ; csr
 000001E0  0A000025  BEQ         L_70  ; Targ=0x27C
  468:           pUDP->UDP_CSR[n] &= ~AT91C_UDP_TXCOMP;
 000001E4  E1A01005  MOV         R1,R5 ; n
 000001E8  E1A01101  MOV         R1,R1,LSL #2 ; n
 000001EC  E5100000  LDR         R0,=pUDP ; pUDP
 000001F0  E5900000  LDR         R0,[R0,#0x0] ; pUDP
 000001F4  E0800001  ADD         R0,R0,R1
 000001F8  E2800030  ADD         R0,R0,#0x0030
 000001FC  E5901000  LDR         R1,[R0,#0x0]
 00000200  E3C11001  BIC         R1,R1,#0x0001
 00000204  E5801000  STR         R1,[R0,#0x0]
  469:           if (TxDataBank[n]) {
 00000208  E1A01005  MOV         R1,R5 ; n
 0000020C  E5100000  LDR         R0,=TxDataBank ; TxDataBank
 00000210  E7D00001  LDRB        R0,[R0,+R1]
 00000214  E3500000  CMP         R0,#0x0000
 00000218  0A00000C  BEQ         L_71  ; Targ=0x250

⌨️ 快捷键说明

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