📄 isr.lis
字号:
.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 + -