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

📄 isr.lis

📁 采用Atmeag162单片机来制作的U盘程序源码
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module ISR.C
                        .area vector(rom, abs)
                        .org 4
 0004 0C940000          jmp _usb_isr
                        .area text(rom, con, rel)
 0000                   .dbfile D:\AvrUSB\ISR.C
 0000                   .dbfunc e usb_isr _usb_isr fV
 0000           ;              x -> R20,R21
                        .even
 0000           _usb_isr::
 0000 0E940000          xcall push_lset
 0004 0E940000          xcall push_gset1
 0008                   .dbline -1
 0008                   .dbline 30
 0008           ; #include <iom162v.h>
 0008           ; #include <macros.h>
 0008           ; #include <stdio.h>
 0008           ; #include <string.h>
 0008           ; 
 0008           ; #include "D12CI.h"
 0008           ; #include "MAIN.h"
 0008           ; #include "USB100.h"
 0008           ; #include "BulkOnly.H"
 0008           ; 
 0008           ; void bus_reset(void);
 0008           ; 
 0008           ; void ep0_txdone(void);
 0008           ; void ep0_rxdone(void);
 0008           ; void ep1_txdone(void);
 0008           ; void ep1_rxdone(void);
 0008           ; void main_txdone(void);
 0008           ; void main_rxdone(void);
 0008           ; 
 0008           ; EPPFLAGS             bEPPflags;
 0008           ; extern CONTROL_XFER  ControlData;
 0008           ; IO_REQUEST           ioRequest;
 0008           ; extern BULK_CONTROL  Bulk_Control_r;
 0008           ; extern BULK_CONTROL  Bulk_Control_w;
 0008           ; extern BULK_STRUCT   Bulk_Block;
 0008           ; extern unsigned char PageBuf[512];
 0008           ; 
 0008           ; #pragma interrupt_handler usb_isr:iv_INT0
 0008           ; void usb_isr(void)
 0008           ; {
 0008                   .dbline 32
 0008           ;   unsigned int x;
 0008           ;   bEPPflags.bits.in_isr=1;
 0008 80910600          lds R24,_bEPPflags
 000C 8061              ori R24,16
 000E 80930600          sts _bEPPflags,R24
 0012                   .dbline 33
 0012           ;   x=D12_ReadInterruptRegister();
 0012 0E940000          xcall _D12_ReadInterruptRegister
 0016 402F              mov R20,R16
 0018 5527              clr R21
 001A                   .dbline 34
 001A           ;   if(x!=0)
 001A 4030              cpi R20,0
 001C 4507              cpc R20,R21
 001E 09F1              breq L2
 0020           X0:
 0020                   .dbline 35
 0020           ;   {
 0020                   .dbline 36
 0020           ;      if(x&D12_INT_BUSRESET)
 0020 46FF              sbrs R20,6
 0022 06C0              rjmp L4
 0024                   .dbline 37
 0024           ;      {
 0024                   .dbline 38
 0024           ;          bus_reset();
 0024 28D0              xcall _bus_reset
 0026                   .dbline 39
 0026           ;          bEPPflags.bits.bus_reset=1;
 0026 80910600          lds R24,_bEPPflags
 002A 8160              ori R24,1
 002C 80930600          sts _bEPPflags,R24
 0030                   .dbline 40
 0030           ;      }
 0030           L4:
 0030                   .dbline 43
 0030           ;      //if(x&D12_INT_EOT)
 0030           ;      //    dma_eot();
 0030           ;      if(x&D12_INT_SUSPENDCHANGE)
 0030 47FF              sbrs R20,7
 0032 05C0              rjmp L6
 0034                   .dbline 44
 0034           ;          bEPPflags.bits.suspend=1;
 0034 80910600          lds R24,_bEPPflags
 0038 8260              ori R24,2
 003A 80930600          sts _bEPPflags,R24
 003E           L6:
 003E                   .dbline 45
 003E           ;      if(x&D12_INT_ENDP0IN)
 003E 41FF              sbrs R20,1
 0040 01C0              rjmp L8
 0042                   .dbline 46
 0042           ;          ep0_txdone();
 0042 D5D0              xcall _ep0_txdone
 0044           L8:
 0044                   .dbline 47
 0044           ;      if(x&D12_INT_ENDP0OUT)
 0044 40FF              sbrs R20,0
 0046 01C0              rjmp L10
 0048                   .dbline 48
 0048           ;          ep0_rxdone();
 0048 17D0              xcall _ep0_rxdone
 004A           L10:
 004A                   .dbline 49
 004A           ;      if(x&D12_INT_ENDP1IN)
 004A 43FF              sbrs R20,3
 004C 01C0              rjmp L12
 004E                   .dbline 50
 004E           ;          ep1_txdone();
 004E 76D1              xcall _ep1_txdone
 0050           L12:
 0050                   .dbline 51
 0050           ;      if(x&D12_INT_ENDP1OUT)
 0050 42FF              sbrs R20,2
 0052 01C0              rjmp L14
 0054                   .dbline 52
 0054           ;          ep1_rxdone();
 0054 76D1              xcall _ep1_rxdone
 0056           L14:
 0056                   .dbline 53
 0056           ;      if(x&D12_INT_ENDP2IN)
 0056 45FF              sbrs R20,5
 0058 01C0              rjmp L16
 005A                   .dbline 54
 005A           ;          main_txdone();
 005A 76D1              xcall _main_txdone
 005C           L16:
 005C                   .dbline 55
 005C           ;      if(x&D12_INT_ENDP2OUT)
 005C 44FF              sbrs R20,4
 005E 01C0              rjmp L18
 0060                   .dbline 57
 0060           ;         //  bEPPflags.bits.main_txdone=1;
 0060           ;          main_rxdone();
 0060 4ED2              xcall _main_rxdone
 0062           L18:
 0062                   .dbline 58
 0062           ;   }
 0062           L2:
 0062                   .dbline 59
 0062           ;   bEPPflags.bits.in_isr=0;
 0062 80910600          lds R24,_bEPPflags
 0066 8F7E              andi R24,239
 0068 80930600          sts _bEPPflags,R24
 006C                   .dbline -2
 006C                   .dbline 60
 006C           ; }
 006C           L1:
 006C 0E940000          xcall pop_gset1
 0070 0E940000          xcall pop_lset
 0074                   .dbline 0 ; func end
 0074 1895              reti
 0076                   .dbsym r x 20 i
 0076                   .dbend
 0076                   .dbfunc e bus_reset _bus_reset fV
                        .even
 0076           _bus_reset::
 0076                   .dbline -1
 0076                   .dbline 62
 0076           ; void bus_reset(void)
 0076           ; {
 0076                   .dbline -2
 0076                   .dbline 63
 0076           ; }
 0076           L20:
 0076                   .dbline 0 ; func end
 0076 0895              ret
 0078                   .dbend
 0078                   .dbfunc e ep0_rxdone _ep0_rxdone fV
 0078           ;              i -> R20
 0078           ;        ep_last -> R20
                        .even
 0078           _ep0_rxdone::
 0078 0E940000          xcall push_gset1
 007C 2297              sbiw R28,2
 007E                   .dbline -1
 007E                   .dbline 65
 007E           ; void ep0_rxdone(void)
 007E           ; {
 007E                   .dbline 67
 007E           ;   unsigned char ep_last,i;
 007E           ;   ep_last=D12_ReadLastTransactionStatus(0);
 007E 0027              clr R16
 0080 0E940000          xcall _D12_ReadLastTransactionStatus
 0084 402F              mov R20,R16
 0086                   .dbline 68
 0086           ;   if(ep_last&D12_SETUPPACKET)
 0086 05FF              sbrs R16,5
 0088 72C0              rjmp L22
 008A                   .dbline 69
 008A           ;   {
 008A                   .dbline 70
 008A           ;     ControlData.wLength=0;
 008A 2224              clr R2
 008C 3324              clr R3
 008E 30920900          sts _ControlData+8+1,R3
 0092 20920800          sts _ControlData+8,R2
 0096                   .dbline 71
 0096           ;     ControlData.wCount=0;
 0096 30920B00          sts _ControlData+10+1,R3
 009A 20920A00          sts _ControlData+10,R2
 009E                   .dbline 72
 009E           ;     if(D12_ReadEndpoint(0,sizeof(ControlData.DeviceRequest),
 009E 80E0              ldi R24,<_ControlData
 00A0 90E0              ldi R25,>_ControlData
 00A2 9983              std y+1,R25
 00A4 8883              std y+0,R24
 00A6 28E0              ldi R18,8
 00A8 0027              clr R16
 00AA 0E940000          xcall _D12_ReadEndpoint
 00AE 0830              cpi R16,8
 00B0 71F0              breq L26
 00B2                   .dbline 74
 00B2           ;            (unsigned char *)(&(ControlData.DeviceRequest)))!=sizeof(DEVICE_REQUEST))
 00B2           ;     {
 00B2                   .dbline 75
 00B2           ;        D12_SetEndpointStatus(0,1);
 00B2 21E0              ldi R18,1
 00B4 0027              clr R16
 00B6 0E940000          xcall _D12_SetEndpointStatus
 00BA                   .dbline 76
 00BA           ;        D12_SetEndpointStatus(1,1);
 00BA 21E0              ldi R18,1
 00BC 01E0              ldi R16,1
 00BE 0E940000          xcall _D12_SetEndpointStatus
 00C2                   .dbline 77
 00C2           ;        bEPPflags.bits.control_state=USB_IDLE;
 00C2 80910600          lds R24,_bEPPflags
 00C6 8F79              andi R24,159
 00C8 80930600          sts _bEPPflags,R24
 00CC                   .dbline 78
 00CC           ;        return;
 00CC 8CC0              xjmp L21
 00CE           L26:
 00CE                   .dbline 80
 00CE           ;     }
 00CE           ;     D12_AcknowledgeEndpoint(0);
 00CE 0027              clr R16
 00D0 0E940000          xcall _D12_AcknowledgeEndpoint
 00D4                   .dbline 81
 00D4           ;     D12_AcknowledgeEndpoint(1);
 00D4 01E0              ldi R16,1
 00D6 0E940000          xcall _D12_AcknowledgeEndpoint
 00DA                   .dbline 82
 00DA           ;     ControlData.wLength=ControlData.DeviceRequest.wLength;
 00DA 20900600          lds R2,_ControlData+6
 00DE 30900700          lds R3,_ControlData+6+1
 00E2 30920900          sts _ControlData+8+1,R3
 00E6 20920800          sts _ControlData+8,R2
 00EA                   .dbline 83
 00EA           ;     ControlData.wCount=0;
 00EA 2224              clr R2
 00EC 3324              clr R3
 00EE 30920B00          sts _ControlData+10+1,R3
 00F2 20920A00          sts _ControlData+10,R2
 00F6                   .dbline 84
 00F6           ;     if(ControlData.DeviceRequest.bmRequestType&(unsigned char)USB_ENDPOINT_DIRECTION_MASK)
 00F6 20900000          lds R2,_ControlData
 00FA 27FE              sbrs R2,7
 00FC 09C0              rjmp L31
 00FE                   .dbline 85
 00FE           ;     {
 00FE                   .dbline 86
 00FE           ;        bEPPflags.bits.setup_packet=1;
 00FE 80910600          lds R24,_bEPPflags
 0102 8460              ori R24,4
 0104 80930600          sts _bEPPflags,R24
 0108                   .dbline 87
 0108           ;        bEPPflags.bits.control_state=USB_IDLE;
 0108 8F79              andi R24,159
 010A 80930600          sts _bEPPflags,R24
 010E                   .dbline 88
 010E           ;     }
 010E 6BC0              xjmp L23
 0110           L31:
 0110                   .dbline 90
 0110           ;     else
 0110           ;     {
 0110                   .dbline 91
 0110           ;       if(ControlData.DeviceRequest.wLength==0)
 0110 20900600          lds R2,_ControlData+6
 0114 30900700          lds R3,_ControlData+6+1
 0118 2220              tst R2
 011A 59F4              brne L33
 011C 3320              tst R3
 011E 49F4              brne L33
 0120           X1:
 0120                   .dbline 92
 0120           ;       {
 0120                   .dbline 93
 0120           ;         bEPPflags.bits.setup_packet=1;
 0120 80910600          lds R24,_bEPPflags
 0124 8460              ori R24,4
 0126 80930600          sts _bEPPflags,R24
 012A                   .dbline 94
 012A           ;         bEPPflags.bits.control_state=USB_IDLE;
 012A 8F79              andi R24,159
 012C 80930600          sts _bEPPflags,R24

⌨️ 快捷键说明

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