📄 d12ci.s
字号:
.module D12CI.C
.area text(rom, con, rel)
.dbfile D:\AvrUSB\D12CI.C
.dbfunc e D12_SetEndpointEnable _D12_SetEndpointEnable fV
; bEnable -> R16
.even
_D12_SetEndpointEnable::
.dbline -1
.dbline 11
; #include <macros.h>
; #include "D12CI.h"
; #include "MAIN.h"
;
; #define cwait asm("nop")
; #define cwait1 asm("nop");asm("nop")
;
; extern EPPFLAGS bEPPflags;
;
; void D12_SetEndpointEnable(unsigned char bEnable)
; {
.dbline 12
; D12_COMMAND=0xD8;
ldi R24,216
sts 31745,R24
.dbline 13
; if(bEnable)
tst R16
breq L2
.dbline 14
; D12_DATA=1;
ldi R24,1
sts 31744,R24
xjmp L3
L2:
.dbline 16
clr R2
sts 31744,R2
L3:
.dbline -2
.dbline 17
; else
; D12_DATA=0;
; }
L1:
.dbline 0 ; func end
ret
.dbsym r bEnable 16 c
.dbend
.dbfunc e D12_SetAddressEnable _D12_SetAddressEnable fV
; bEnable -> R18
; bAddress -> R16
.even
_D12_SetAddressEnable::
.dbline -1
.dbline 19
; void D12_SetAddressEnable(unsigned char bAddress, unsigned char bEnable)
; {
.dbline 20
; D12_COMMAND=0xD0;
ldi R24,208
sts 31745,R24
.dbline 21
; if(bEnable)
tst R18
breq L5
.dbline 22
; bAddress|=0x80;
ori R16,128
L5:
.dbline 23
; D12_DATA=bAddress;
sts 31744,R16
.dbline -2
.dbline 24
; }
L4:
.dbline 0 ; func end
ret
.dbsym r bEnable 18 c
.dbsym r bAddress 16 c
.dbend
.dbfunc e D12_SetMode _D12_SetMode fV
; bClkDiv -> R18
; bConfig -> R16
.even
_D12_SetMode::
.dbline -1
.dbline 26
; void D12_SetMode(unsigned char bConfig, unsigned char bClkDiv)
; {
.dbline 27
; D12_COMMAND=0xF3;
ldi R24,243
sts 31745,R24
.dbline 28
; D12_DATA=bConfig;
sts 31744,R16
.dbline 29
; cwait1;
nop
.dbline 29
nop
.dbline 30
; D12_DATA=bClkDiv;
sts 31744,R18
.dbline -2
.dbline 31
; }
L7:
.dbline 0 ; func end
ret
.dbsym r bClkDiv 18 c
.dbsym r bConfig 16 c
.dbend
.dbfunc e D12_SetDMA _D12_SetDMA fV
; bMode -> R16
.even
_D12_SetDMA::
.dbline -1
.dbline 33
; void D12_SetDMA(unsigned char bMode)
; {
.dbline 34
; D12_COMMAND=0xFB;
ldi R24,251
sts 31745,R24
.dbline 35
; cwait;
nop
.dbline 36
; D12_DATA=bMode;
sts 31744,R16
.dbline -2
.dbline 37
; }
L8:
.dbline 0 ; func end
ret
.dbsym r bMode 16 c
.dbend
.dbfunc e D12_ReadInterruptRegister _D12_ReadInterruptRegister fc
; j -> R18
; bl -> R16
.even
_D12_ReadInterruptRegister::
.dbline -1
.dbline 39
; unsigned char D12_ReadInterruptRegister(void)
; {
.dbline 42
; unsigned char bl;
; unsigned char j;
; j=0;
clr R18
.dbline 43
; D12_COMMAND=0xF4;
ldi R24,244
sts 31745,R24
.dbline 44
; cwait;
nop
.dbline 45
; bl=D12_DATA;
lds R16,31744
.dbline 46
; cwait1;
nop
.dbline 46
nop
.dbline 47
; j=D12_DATA;
lds R18,31744
.dbline 48
; return bl;
.dbline -2
L9:
.dbline 0 ; func end
ret
.dbsym r j 18 c
.dbsym r bl 16 c
.dbend
.dbfunc e D12_SelectEndpoint _D12_SelectEndpoint fc
; c -> R20
; bEndp -> R16
.even
_D12_SelectEndpoint::
xcall push_gset1
.dbline -1
.dbline 51
; }
; unsigned char D12_SelectEndpoint(unsigned char bEndp)
; {
.dbline 53
; unsigned char c;
; D12_COMMAND=bEndp;
sts 31745,R16
.dbline 54
; cwait;
nop
.dbline 55
; c=D12_DATA;
lds R20,31744
.dbline 56
; return c;
mov R16,R20
.dbline -2
L10:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r c 20 c
.dbsym r bEndp 16 c
.dbend
.dbfunc e D12_ReadLastTransactionStatus _D12_ReadLastTransactionStatus fc
; bEndp -> R16
.even
_D12_ReadLastTransactionStatus::
.dbline -1
.dbline 59
; }
; unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp)
; {
.dbline 60
; D12_COMMAND=0x40+bEndp;
mov R24,R16
subi R24,192 ; addi 64
sts 31745,R24
.dbline 61
; cwait;
nop
.dbline 62
; return D12_DATA;
lds R16,31744
.dbline -2
L11:
.dbline 0 ; func end
ret
.dbsym r bEndp 16 c
.dbend
.dbfunc e D12_ReadEndpointStatus _D12_ReadEndpointStatus fc
; bEndp -> R16
.even
_D12_ReadEndpointStatus::
.dbline -1
.dbline 65
; }
; unsigned char D12_ReadEndpointStatus(unsigned char bEndp)
; {
.dbline 66
; D12_COMMAND=0x80+bEndp;
mov R24,R16
subi R24,128 ; addi 128
sts 31745,R24
.dbline 67
; cwait;
nop
.dbline 68
; return D12_DATA;
lds R16,31744
.dbline -2
L12:
.dbline 0 ; func end
ret
.dbsym r bEndp 16 c
.dbend
.dbfunc e D12_SetEndpointStatus _D12_SetEndpointStatus fV
; c -> <dead>
; bStalled -> R18
; bEndp -> R16
.even
_D12_SetEndpointStatus::
.dbline -1
.dbline 71
; }
; void D12_SetEndpointStatus(unsigned char bEndp, unsigned char bStalled)
; {
.dbline 73
; unsigned char c;
; D12_COMMAND=0x40+bEndp;
mov R24,R16
subi R24,192 ; addi 64
sts 31745,R24
.dbline 74
; cwait;
nop
.dbline 75
; D12_DATA=bStalled;
sts 31744,R18
.dbline -2
.dbline 76
; }
L13:
.dbline 0 ; func end
ret
.dbsym l c 1 c
.dbsym r bStalled 18 c
.dbsym r bEndp 16 c
.dbend
.dbfunc e D12_ReadEndpoint _D12_ReadEndpoint fc
; j -> R20
; i -> R22
; buf -> R10,R11
; len -> R18
; endp -> R16
.even
_D12_ReadEndpoint::
xcall push_gset3
ldd R10,y+6
ldd R11,y+7
.dbline -1
.dbline 79
; unsigned char D12_ReadEndpoint(unsigned char endp, unsigned char len,
; unsigned char * buf)
; {
.dbline 81
; unsigned char i,j;
; D12_COMMAND=endp;
sts 31745,R16
.dbline 82
; cwait;
nop
.dbline 83
; if((D12_DATA&D12_FULLEMPTY)==0)
lds R2,31744
sbrc R2,0
rjmp L15
.dbline 84
; return 0;
clr R16
xjmp L14
L15:
.dbline 85
; D12_COMMAND=(0x80+endp);
mov R24,R16
subi R24,128 ; addi 128
sts 31745,R24
.dbline 86
; cwait;
nop
.dbline 87
; i=D12_DATA;
lds R22,31744
.dbline 88
; i=i&0x60;
andi R22,96
.dbline 89
; if(endp==2)
cpi R16,2
brne L17
.dbline 90
; {
.dbline 91
; if(i==0x60)
cpi R22,96
brne L19
.dbline 92
; bEPPflags.bits.ep1buf_full=1;
lds R24,_bEPPflags
lds R25,_bEPPflags+1
ori R25,4
sts _bEPPflags+1,R25
sts _bEPPflags,R24
xjmp L20
L19:
.dbline 94
; else
; bEPPflags.bits.ep1buf_full=0;
lds R24,_bEPPflags
lds R25,_bEPPflags+1
andi R25,251
sts _bEPPflags+1,R25
sts _bEPPflags,R24
L20:
.dbline 95
; }
L17:
.dbline 96
; if(endp==4)
cpi R16,4
brne L21
.dbline 97
; {
.dbline 98
; if(i==0x60)
cpi R22,96
brne L23
.dbline 99
; bEPPflags.bits.mainbuf_full=1;
lds R24,_bEPPflags
lds R25,_bEPPflags+1
ori R25,128
sts _bEPPflags+1,R25
sts _bEPPflags,R24
xjmp L24
L23:
.dbline 101
; else
; bEPPflags.bits.mainbuf_full=0;
lds R24,_bEPPflags
lds R25,_bEPPflags+1
andi R25,127
sts _bEPPflags+1,R25
sts _bEPPflags,R24
L24:
.dbline 102
; }
L21:
.dbline 103
; D12_COMMAND=0xF0;
ldi R24,240
sts 31745,R24
.dbline 104
; cwait;
nop
.dbline 105
; j=D12_DATA;
lds R20,31744
.dbline 106
; cwait1;
nop
.dbline 106
nop
.dbline 107
; j=D12_DATA;
lds R20,31744
.dbline 108
; if(j>len)j=len;
cp R18,R20
brsh L25
.dbline 108
mov R20,R18
L25:
.dbline 109
; for(i=0;i<j;i++)
clr R22
xjmp L30
L27:
.dbline 110
.dbline 111
mov R30,R22
clr R31
add R30,R10
adc R31,R11
lds R2,31744
std z+0,R2
.dbline 112
nop
.dbline 112
nop
.dbline 113
L28:
.dbline 109
inc R22
L30:
.dbline 109
cp R22,R20
brlo L27
.dbline 114
; {
; *(buf+i)=D12_DATA;
; cwait1;
; }
; D12_COMMAND=0xF2;
ldi R24,242
sts 31745,R24
.dbline 115
; cwait;
nop
.dbline 116
; return j;
mov R16,R20
.dbline -2
L14:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r j 20 c
.dbsym r i 22 c
.dbsym r buf 10 pc
.dbsym r len 18 c
.dbsym r endp 16 c
.dbend
.dbfunc e D12_WriteEndpoint _D12_WriteEndpoint fc
; i -> R20
; buf -> R22,R23
; len -> R18
; endp -> R16
.even
_D12_WriteEndpoint::
xcall push_gset2
ldd R22,y+4
ldd R23,y+5
.dbline -1
.dbline 120
; }
; unsigned char D12_WriteEndpoint(unsigned char endp, unsigned char len,
; unsigned char * buf)
; {
.dbline 122
; unsigned char i;
; D12_COMMAND=endp;
sts 31745,R16
.dbline 123
; D12_DATA;
.dbline 124
; D12_COMMAND=0xF0;
ldi R24,240
sts 31745,R24
.dbline 125
; cwait;
nop
.dbline 126
; D12_DATA=0;
clr R2
sts 31744,R2
.dbline 127
; cwait1;
nop
.dbline 127
nop
.dbline 128
; D12_DATA=len;
sts 31744,R18
.dbline 129
; for(i=0;i<len;i++)
clr R20
xjmp L35
L32:
.dbline 130
.dbline 131
mov R30,R20
clr R31
add R30,R22
adc R31,R23
ldd R2,z+0
sts 31744,R2
.dbline 132
nop
.dbline 132
nop
.dbline 133
L33:
.dbline 129
inc R20
L35:
.dbline 129
cp R20,R18
brlo L32
.dbline 134
; {
; D12_DATA=*(buf+i);
; cwait1;
; }
; D12_COMMAND=0xFA;
ldi R24,250
sts 31745,R24
.dbline 135
; cwait;
nop
.dbline 136
; return len;
mov R16,R18
.dbline -2
L31:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r buf 22 pc
.dbsym r len 18 c
.dbsym r endp 16 c
.dbend
.dbfunc e D12_CWriteEndpoint _D12_CWriteEndpoint fc
; i -> R20
; buf -> R22,R23
; len -> R18
; endp -> R16
.even
_D12_CWriteEndpoint::
xcall push_gset2
ldd R22,y+4
ldd R23,y+5
.dbline -1
.dbline 140
; }
; unsigned char D12_CWriteEndpoint(unsigned char endp, unsigned char len,
; const unsigned char * buf)
; {
.dbline 142
; unsigned char i;
; D12_COMMAND=endp;
sts 31745,R16
.dbline 143
; cwait;
nop
.dbline 144
; D12_DATA;
.dbline 145
; cwait;
nop
.dbline 146
; D12_COMMAND=0xF0;
ldi R24,240
sts 31745,R24
.dbline 147
; cwait;
nop
.dbline 148
; D12_DATA=0;
clr R2
sts 31744,R2
.dbline 149
; cwait1;
nop
.dbline 149
nop
.dbline 150
; D12_DATA=len;
sts 31744,R18
.dbline 151
; for(i=0;i<len;i++)
clr R20
xjmp L40
L37:
.dbline 152
.dbline 153
mov R30,R20
clr R31
add R30,R22
adc R31,R23
lpm R30,Z
sts 31744,R30
.dbline 154
nop
.dbline 154
nop
.dbline 155
L38:
.dbline 151
inc R20
L40:
.dbline 151
cp R20,R18
brlo L37
.dbline 156
; {
; D12_DATA=*(buf+i);
; cwait1;
; }
; D12_COMMAND=0xFA;
ldi R24,250
sts 31745,R24
.dbline 157
; return len;
mov R16,R18
.dbline -2
L36:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r buf 22 pkc
.dbsym r len 18 c
.dbsym r endp 16 c
.dbend
.dbfunc e D12_AcknowledgeEndpoint _D12_AcknowledgeEndpoint fV
; endp -> R16
.even
_D12_AcknowledgeEndpoint::
.dbline -1
.dbline 160
.dbline 161
sts 31745,R16
.dbline 162
nop
.dbline 163
ldi R24,241
sts 31745,R24
.dbline 164
tst R16
brne L42
.dbline 165
ldi R24,242
sts 31745,R24
L42:
.dbline -2
.dbline 166
; }
; void D12_AcknowledgeEndpoint(unsigned char endp)
; {
; D12_COMMAND=endp;
; cwait;
; D12_COMMAND=0xF1;
; if(endp==0)
; D12_COMMAND=0xF2;
; }
L41:
.dbline 0 ; func end
ret
.dbsym r endp 16 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -