📄 d12-avr.s
字号:
.module D12-AVR.c
.area data(ram, con, rel)
_q::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile G:\Backup\6月1日flag置(认为接近最终)\ilx511_usb\D12-AVR.c
.dbsym e q _q I
.area text(rom, con, rel)
.dbfile G:\Backup\6月1日flag置(认为接近最终)\ilx511_usb\D12-AVR.c
.dbfunc e D12_int _D12_int fV
; k -> <dead>
; c -> <dead>
; j -> R22
; i -> R20
.even
_D12_int::
rcall push_gset2
.dbline -1
.dbline 9
; #include "io8515v.h"
; #include "d12head.h"
;
; unsigned int Rshu[3];
; int q=0;
; //#define D12_suspend (PINB & 0x01)
;
; void D12_int(void)
; {
.dbline 10
; unsigned char i=0,j,c,*k;//三个变量,一个指针
clr R20
.dbline 12
;
; SREG = 0x00;//全局中断使能
clr R2
out 0x3f,R2
.dbline 14
;
; D12_COMMAND = 0xf4; // 读中断寄存器
ldi R24,244
sts 32513,R24
.dbline 15
; cwait1;
nop
.dbline 15
nop
.dbline 16
; i=D12_DATA;
lds R20,32512
.dbline 17
; csram;
sts 0xfc01,R22
.dbline 17
.dbline 18
; if(i & 0x01) //ENDP0_OUT
sbrs R20,0
rjmp L8
.dbline 19
; {
.dbline 20
; D12_COMMAND = 0x40; //读 OUT 最后状态
ldi R24,64
sts 32513,R24
.dbline 21
; cwait1;
nop
.dbline 21
nop
.dbline 22
; i= D12_DATA;
lds R20,32512
.dbline 23
; csram;
sts 0xfc01,R22
.dbline 23
.dbline 24
; if (i & 0x20) //收到 SETUP 包
sbrs R20,5
rjmp L9
.dbline 25
; {
.dbline 26
; Setup_control();
rcall _Setup_control
.dbline 27
; }
.dbline 28
; }
rjmp L9
L8:
.dbline 29
; else if(i & 0x02) //ENDP0_IN
sbrs R20,1
rjmp L12
.dbline 30
; {
.dbline 31
; D12_COMMAND = 0x41;//读 in 最后状态
ldi R24,65
sts 32513,R24
.dbline 32
; cwait1;
nop
.dbline 32
nop
.dbline 33
; i = D12_DATA;
lds R20,32512
.dbline 34
; csram;
sts 0xfc01,R22
.dbline 34
.dbline 35
; USB_submit();
rcall _USB_submit
.dbline 36
; }
rjmp L13
L12:
.dbline 37
; else if(i & 0x04)//ENDP1_OUT
sbrs R20,2
rjmp L14
.dbline 38
; {
.dbline 39
; D12_COMMAND = 0x42;//读 out 最后状态
ldi R24,66
sts 32513,R24
.dbline 40
; cwait;
nop
.dbline 41
; i = D12_DATA;
lds R20,32512
.dbline 42
; csram;
sts 0xfc01,R22
.dbline 42
.dbline 43
; ReadEndpoint1(3,Rshu);
ldi R18,<_Rshu
ldi R19,>_Rshu
ldi R16,3
ldi R17,0
rcall _ReadEndpoint1
.dbline 45
;
; }
rjmp L15
L14:
.dbline 46
; else if(i & 0x08)//ENDP1_IN
sbrs R20,3
rjmp L16
.dbline 47
; {
.dbline 48
; D12_COMMAND = 0x43;//读 in 最后状态
ldi R24,67
sts 32513,R24
.dbline 49
; cwait1;
nop
.dbline 49
nop
.dbline 50
; i = D12_DATA;
lds R20,32512
.dbline 51
; cwait1;
nop
.dbline 51
nop
.dbline 52
; csram;
sts 0xfc01,R22
.dbline 52
.dbline 53
; D12_COMMAND = 3;// 选择 IN 端点(指针指向0位置)
ldi R24,3
sts 32513,R24
.dbline 54
; cwait;
nop
.dbline 55
; D12_COMMAND = 0xf0;// 写缓冲区
ldi R24,240
sts 32513,R24
.dbline 56
; cwait;
nop
.dbline 57
; D12_DATA = 0;
clr R2
sts 32512,R2
.dbline 58
; csram;
sts 0xfc01,R22
.dbline 58
.dbline 61
; // WriteEndpoint1();
;
; }
rjmp L17
L16:
.dbline 62
; else if(i & 0x10)//ENDP2_out 对应管道2
sbrs R20,4
rjmp L18
.dbline 63
; {
.dbline 64
; D12_COMMAND = 0x44;//读 in 最后状态
ldi R24,68
sts 32513,R24
.dbline 65
; cwait1;
nop
.dbline 65
nop
.dbline 66
; i = D12_DATA;
lds R20,32512
.dbline 67
; cwait1;
nop
.dbline 67
nop
.dbline 68
; D12_COMMAND = 4;// 选择 IN 端点(指针指向0位置)
ldi R24,4
sts 32513,R24
.dbline 69
; cwait;
nop
.dbline 70
; D12_COMMAND = 0xf0;// 读缓冲区
ldi R24,240
sts 32513,R24
.dbline 71
; cwait1;
nop
.dbline 71
nop
.dbline 72
; j=D12_DATA;
lds R22,32512
.dbline 73
; cwait1;
nop
.dbline 73
nop
.dbline 74
; j=D12_DATA; //数据字节的长度
lds R22,32512
.dbline 75
; csram;
sts 0xfc01,R22
.dbline 75
.dbline 77
; // flashWrite(j);
; }
rjmp L19
L18:
.dbline 78
; else if(i & 0x20)//ENDP2_IN 对应管道3
sbrs R20,5
rjmp L20
.dbline 79
; {
.dbline 80
; D12_COMMAND = 0x45;//读 in 最后状态
ldi R24,69
sts 32513,R24
.dbline 81
; cwait1;
nop
.dbline 81
nop
.dbline 82
; i = D12_DATA;
lds R20,32512
.dbline 83
; cwait1;
nop
.dbline 83
nop
.dbline 84
; D12_COMMAND = 5;// 选择 IN 端点(指针指向0位置)
ldi R24,5
sts 32513,R24
.dbline 85
; cwait;
nop
.dbline 86
; D12_COMMAND = 0xf0;// 写缓冲区
ldi R24,240
sts 32513,R24
.dbline 87
; cwait;
nop
.dbline 88
; D12_DATA = 0;
clr R2
sts 32512,R2
.dbline 89
; csram;
sts 0xfc01,R22
.dbline 89
.dbline 90
; flashRead();
rcall _flashRead
.dbline 91
; }
rjmp L21
L20:
.dbline 92
; else if(i & 0x80)//D12_INT_SUSPENDCHANGE D12挂起
sbrs R20,7
rjmp L22
.dbline 93
; {
.dbline 95
; //if(D12_suspend)
; {
.dbline 101
; /** /
; D12_suspend = 0;//处理挂起事务
; D12_COMMAND = 0xf6;//发送恢复命令
; D12_suspend = 1;//复位51输入引脚
; /**/
; }
.dbline 102
; }
rjmp L23
L22:
.dbline 103
; else if(i & 0x40)//D12_INT_BUSRESET 总线复位
sbrs R20,6
rjmp L24
.dbline 104
; {
.dbline 105
; bus_reset();
rcall _bus_reset
.dbline 106
; }
rjmp L25
L24:
.dbline 108
; else
; {
.dbline 109
; i=D12_DATA; //D12_INT_EOT DMA操作已结束
lds R20,32512
.dbline 110
; if(i & 0x01)
sbrs R20,0
rjmp L26
.dbline 111
; {
.dbline 112
; dma_eot();
rcall _dma_eot
.dbline 113
; }
L26:
.dbline 114
; }
L25:
L23:
L21:
L19:
L17:
L15:
L13:
L9:
.dbline 116
;
; SREG = 0x80;//全局中断使能
ldi R24,128
out 0x3f,R24
.dbline -2
.dbline 117
; }
L7:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l k 1 pc
.dbsym l c 1 c
.dbsym r j 22 c
.dbsym r i 20 c
.dbend
.dbfunc e bus_reset _bus_reset fV
.even
_bus_reset::
.dbline -1
.dbline 120
;
; void bus_reset(void)
; {
.dbline -2
.dbline 121
; }
L28:
.dbline 0 ; func end
ret
.dbend
.dbfunc e dma_eot _dma_eot fV
.even
_dma_eot::
.dbline -1
.dbline 124
;
; void dma_eot(void)
; {
.dbline -2
.dbline 125
; }
L29:
.dbline 0 ; func end
ret
.dbend
.dbfunc e ReadEndpoint1 _ReadEndpoint1 fV
; n -> R20,R21
; j -> R20,R21
; i -> R22,R23
; buf -> R10,R11
; len -> R22,R23
.even
_ReadEndpoint1::
rcall push_gset3
movw R10,R18
movw R22,R16
.dbline -1
.dbline 128
;
; void ReadEndpoint1(unsigned int len,unsigned int * buf)
; {
.dbline 130
; unsigned int i,j,n;
; D12_COMMAND=2;
ldi R24,2
sts 32513,R24
.dbline 131
; D12_COMMAND=0xf0;
ldi R24,240
sts 32513,R24
.dbline 132
; j= D12_DATA;
lds R20,32512
clr R21
.dbline 133
; j = D12_DATA;
lds R20,32512
clr R21
.dbline 134
; if(j>len)
cp R22,R20
cpc R23,R21
brsh L31
.dbline 135
; j=len;
movw R20,R22
L31:
.dbline 136
; for(i=0; i<j; i++)
clr R22
clr R23
rjmp L36
L33:
.dbline 137
ldi R16,2
ldi R17,0
movw R18,R22
rcall empy16s
movw R30,R16
add R30,R10
adc R31,R11
lds R2,32512
clr R3
std z+1,R3
std z+0,R2
L34:
.dbline 136
subi R22,255 ; offset = 1
sbci R23,255
L36:
.dbline 136
cp R22,R20
cpc R23,R21
brlo L33
.dbline 138
; *(buf+i) = D12_DATA;
; if(Rshu[0]==0xa1 && Rshu[1]==0xa2 && Rshu[2]==0xa3)
lds R24,_Rshu
lds R25,_Rshu+1
cpi R24,161
ldi R30,0
cpc R25,R30
brne L37
lds R24,_Rshu+2
lds R25,_Rshu+2+1
cpi R24,162
ldi R30,0
cpc R25,R30
brne L37
lds R24,_Rshu+4
lds R25,_Rshu+4+1
cpi R24,163
ldi R30,0
cpc R25,R30
brne L37
.dbline 139
; {
.dbline 141
;
; adrstart=0xcc;
ldi R24,204
sts 65360,R24
.dbline 142
; }
rjmp L38
L37:
.dbline 143
; else if(Rshu[0]==0xb1 && Rshu[1]==0xb2 && Rshu[2]==0xb3)
lds R24,_Rshu
lds R25,_Rshu+1
cpi R24,177
ldi R30,0
cpc R25,R30
brne L41
lds R24,_Rshu+2
lds R25,_Rshu+2+1
cpi R24,178
ldi R30,0
cpc R25,R30
brne L41
lds R24,_Rshu+4
lds R25,_Rshu+4+1
cpi R24,179
ldi R30,0
cpc R25,R30
brne L41
.dbline 144
; {
.dbline 145
; adrstop=0xee;
ldi R24,238
sts 65349,R24
.dbline 146
; Fifo1_Flag=0x00;
clr R2
sts _Fifo1_Flag,R2
.dbline 147
; Fifo2_Flag=0x00;
sts _Fifo2_Flag,R2
.dbline 149
; //DDRD=0xfb;
; PORTD=0xdd;
ldi R24,221
out 0x12,R24
.dbline 150
; for(n=0;n<6;n++)
clr R20
clr R21
rjmp L48
L45:
.dbline 151
nop
L46:
.dbline 150
subi R20,255 ; offset = 1
sbci R21,255
L48:
.dbline 150
cpi R20,6
ldi R30,0
cpc R21,R30
brlo L45
.dbline 151
; cwait1;
nop
.dbline 152
; PORTD=0xdf;
ldi R24,223
out 0x12,R24
.dbline 154
;
; }
rjmp L42
L41:
.dbline 156
; else
; {
.dbline 157
; D12_COMMAND=0xf2;
ldi R24,242
sts 32513,R24
.dbline 158
; }
L42:
L38:
.dbline 160
;
; D12_COMMAND=0xf2;
ldi R24,242
sts 32513,R24
.dbline -2
.dbline 162
;
; }
L30:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r n 20 i
.dbsym r j 20 i
.dbsym r i 22 i
.dbsym r buf 10 pi
.dbsym r len 22 i
.dbend
.area bss(ram, con, rel)
.dbfile G:\Backup\6月1日flag置(认为接近最终)\ilx511_usb\D12-AVR.c
_Rshu::
.blkb 6
.dbsym e Rshu _Rshu A[6:3]i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -