📄 d12setup.s
字号:
.module D12Setup.c
.area data(ram, con, rel)
_StandardDeviceRequest::
.blkw 1
.area idata
.word PL_get_status
.area data(ram, con, rel)
.blkw 1
.area idata
.word PL_clear_feature
.area data(ram, con, rel)
.blkw 1
.area idata
.word PL_void_function
.area data(ram, con, rel)
.blkw 1
.area idata
.word PL_set_feature
.area data(ram, con, rel)
.blkw 1
.area idata
.word PL_void_function
.area data(ram, con, rel)
.blkw 1
.area idata
.word PL_set_address
.area data(ram, con, rel)
.blkw 1
.area idata
.word PL_get_descriptor
.area data(ram, con, rel)
.blkw 1
.area idata
.word PL_void_function
.area data(ram, con, rel)
.blkw 1
.area idata
.word PL_get_configuration
.area data(ram, con, rel)
.blkw 1
.area idata
.word PL_set_configuration
.area data(ram, con, rel)
.blkw 1
.area idata
.word PL_get_interface
.area data(ram, con, rel)
.blkw 1
.area idata
.word PL_set_interface
.area data(ram, con, rel)
.blkw 1
.area idata
.word PL_void_function
.area data(ram, con, rel)
.dbfile G:\source/d12setup.h
.dbsym s StandardDeviceRequest _StandardDeviceRequest A[26:13]pfI
.area lit(rom, con, rel)
_device_descriptor::
.byte 18,1
.byte 0,1
.byte 0,0
.byte 0,64
.byte 'q,4
.byte 144,8
.byte 0,1
.byte 0,0
.byte 0,1
.dbsym s device_descriptor _device_descriptor A[18:18]c
_Configuration_Descriptor::
.byte 9,2
.byte 32,0
.byte 1,1
.byte 0,128
.byte 50
.dbsym s Configuration_Descriptor _Configuration_Descriptor A[9:9]c
_Interface_Descriptor::
.byte 9,4
.byte 0,0
.byte 2,8
.byte 6,'P
.byte 0
.dbsym s Interface_Descriptor _Interface_Descriptor A[9:9]c
_Bulk_in_Descriptor::
.byte 7,5
.byte 130,2
.byte 64,0
.byte 0
.dbsym s Bulk_in_Descriptor _Bulk_in_Descriptor A[7:7]c
_Bulk_out_Descriptor::
.byte 7,5
.byte 2,2
.byte 64,0
.byte 0
.dbsym s Bulk_out_Descriptor _Bulk_out_Descriptor A[7:7]c
.area text(rom, con, rel)
.dbfile G:\source/d12setup.h
.dbfile G:\source\D12Setup.c
.dbfunc s Setup_control _Setup_control fI
; p -> R10,R11
; j -> R20
; i -> R22
.even
_Setup_control::
rcall push_gset3
.dbline -1
.dbline 51
; /*++
;
; Module Name:
;
; D12Setup.c
;
; Abstract:
;
; Header file related to D12 module
;
; Environment:
;
; ICCAVR 6.29
;
; Revision History:
;
; 04/23/2004 chenchi created
;
; --*/
; /******************************************************************/
; #include "io8515v.h"
; #include "d12.h"
; #include "d12setup.h"
;
; TRANSMIT_STRUCT XmtBuff;//定义传输结构体变量
;
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
;
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
;
; **函数功能:完成设备枚举
; **函数输入参数及说明:无
;
; **函数返回值:无
; **在本函数以外定义的变量:D12_COMMAND,D12_DATA
; **调用的函数说明:
; (*StandardDeviceRequest[i])();
; 标准设备请求函数
;
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void Setup_control(void)
; {
.dbline 53
; unsigned char i,j,*p;
; D12_COMMAND = 0x00;//选择端点(指针指向0位置)
clr R2
sts 31745,R2
.dbline 54
; cwait;
nop
.dbline 55
; D12_COMMAND = 0xf0;//读标准控制码
ldi R24,240
sts 31745,R24
.dbline 56
; cwait1;
nop
.dbline 56
nop
.dbline 64
; /****************************
; 缓冲区数据结构:
; 字节1:保留,可为任意值
; 字节2:数据字节的数目/长度
; 字节3:数据字节1
; 字节4:数据字节2
; *****************************/
; i = D12_DATA;//字节1
lds R22,31744
.dbline 65
; cwait1;
nop
.dbline 65
nop
.dbline 66
; i = D12_DATA;//字节2
lds R22,31744
.dbline 67
; cwait1;
nop
.dbline 67
nop
.dbline 68
; j = D12_DATA;//数据字节
lds R20,31744
.dbline 69
; csram;
sts 0xfc01,R22
.dbline 69
.dbline 70
; p = XmtBuff.b;//P指针指向传输缓冲区
ldi R24,<_XmtBuff
ldi R25,>_XmtBuff
mov R10,R24
mov R11,R25
.dbline 71
; *(p++) = j;
mov R2,R10
mov R3,R11
mov R24,R2
mov R25,R3
adiw R24,1
mov R10,R24
mov R11,R25
mov R30,R2
mov R31,R3
std z+0,R20
.dbline 72
; for(i=0;i<7;i++)
clr R22
rjmp L6
L3:
.dbline 73
.dbline 74
lds R20,31744
.dbline 75
sts 0xfc01,R22
.dbline 75
.dbline 76
st Z+,R20
.dbline 77
L4:
.dbline 72
inc R22
L6:
.dbline 72
cpi R22,7
brlo L3
.dbline 78
; {
; j = D12_DATA;//数据字节
; csram;
; asm("st Z+,%j");
; }
; D12_COMMAND = 0x01;// 选择端点(指针指向0位置)
ldi R24,1
sts 31745,R24
.dbline 79
; cwait;
nop
.dbline 80
; D12_COMMAND = 0xf1;//应答SETUP包
ldi R24,241
sts 31745,R24
.dbline 81
; csram;
sts 0xfc01,R22
.dbline 81
.dbline 82
; i = XmtBuff.b[1];
lds R22,_XmtBuff+1
.dbline 83
; if (i <= 0x0B)//标准请求跳转表
ldi R24,11
cp R24,R22
brlo L8
.dbline 84
; {
.dbline 85
; (*StandardDeviceRequest[i])();
ldi R24,<_StandardDeviceRequest
ldi R25,>_StandardDeviceRequest
mov R30,R22
clr R31
lsl R30
rol R31
add R30,R24
adc R31,R25
ldd R26,z+0
ldd R27,z+1
mov R30,R26
mov R31,R27
rcall xicall
.dbline 86
; }
rjmp L9
L8:
.dbline 87
; else{
.dbline 88
; D12_COMMAND = 0x01;//选择端点(指针指向0位置)
ldi R24,1
sts 31745,R24
.dbline 89
; cwait;
nop
.dbline 90
; D12_COMMAND = 0xf0;// 写缓冲区
ldi R24,240
sts 31745,R24
.dbline 91
; cwait;
nop
.dbline 99
; /****************************
; 缓冲区数据结构:
; 字节1:保留,可为任意值
; 字节2:数据字节的数目/长度
; 字节3:数据字节1
; 字节4:数据字节2
; *****************************/
; D12_DATA = 0x00;//字节1
clr R2
sts 31744,R2
.dbline 100
; cwait;
nop
.dbline 101
; D12_DATA = 0x01;//字节2
ldi R24,1
sts 31744,R24
.dbline 102
; csram;
sts 0xfc01,R22
.dbline 102
.dbline 103
; D12_DATA = 0x00;//数据字节
clr R2
sts 31744,R2
.dbline 104
; csram;
sts 0xfc01,R22
.dbline 104
.dbline 105
; D12_COMMAND = 0xfa;//设置 IN 缓冲区有效(满标志)
ldi R24,250
sts 31745,R24
.dbline 106
; csram;
sts 0xfc01,R22
.dbline 106
.dbline 107
; }
L9:
.dbline 108
; D12_COMMAND = 0x00;//选择端点(指针指向0位置)
clr R2
sts 31745,R2
.dbline 109
; cwait;
nop
.dbline 110
; D12_COMMAND = 0xf1;//应答SETUP包
ldi R24,241
sts 31745,R24
.dbline 111
; cwait;
nop
.dbline 112
; D12_COMMAND = 0xf2;//清端点缓冲区
ldi R24,242
sts 31745,R24
.dbline -2
.dbline 113
; }
L2:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r p 10 pc
.dbsym r j 20 c
.dbsym r i 22 c
.dbfunc s void_function _void_function fI
.even
_void_function::
.dbline -1
.dbline 136
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
;
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
;
; **函数功能:停止控制端点.应答枚举请求
; **函数输入参数及说明:无
;
; **函数返回值:无
; **在本函数以外定义的变量:D12_COMMAND,D12_DATA
; **调用的函数说明:无
;
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void void_function(void)
; {
.dbline 137
; D12_COMMAND = 0x40;//0端点停止(用于发送Stall包)
ldi R24,64
sts 31745,R24
.dbline 138
; cwait;
nop
.dbline 139
; D12_DATA = 0x01;
ldi R24,1
sts 31744,R24
.dbline 140
; cwait;
nop
.dbline 141
; D12_COMMAND = 0x41;//1端点停止(用于发送Stall包)
ldi R24,65
sts 31745,R24
.dbline 142
; cwait;
nop
.dbline 143
; D12_DATA = 0x01;
ldi R24,1
sts 31744,R24
.dbline 144
; cwait;
nop
.dbline 145
; D12_COMMAND = 0xf1;//应答SETUP包
ldi R24,241
sts 31745,R24
.dbline 146
; csram;
sts 0xfc01,R22
.dbline 146
.dbline -2
.dbline 147
; }
L10:
.dbline 0 ; func end
ret
.dbfunc s get_status _get_status fI
.even
_get_status::
rcall push_gset1
.dbline -1
.dbline 172
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
;
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
;
; **函数功能:标准设备请求
; **函数输入参数及说明:无
;
; **函数返回值:无
; **在本函数以外定义的变量:D12_COMMAND,D12_DATA
; **调用的函数说明:
; USB_submit();
; 控制端点提交函数
;
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void get_status(void)
; {
.dbline 173
; XmtBuff.b[1] = 0x00;
clr R2
sts _XmtBuff+1,R2
.dbline 174
; switch (XmtBuff.b[0])
lds R20,_XmtBuff
clr R21
cpi R20,128
ldi R30,0
cpc R21,R30
breq L14
cpi R20,129
ldi R30,0
cpc R21,R30
breq L17
cpi R20,130
ldi R30,0
cpc R21,R30
breq L18
rjmp L13
X0:
.dbline 175
; {
.dbline 177
; case 0x80:
; break;
L17:
.dbline 179
; case 0x81:
; XmtBuff.b[0] = 0x00;
clr R2
sts _XmtBuff,R2
.dbline 180
; break;
rjmp L14
L18:
.dbline 182
; case 0x82:
; XmtBuff.b[0] = 0x00;
clr R2
sts _XmtBuff,R2
.dbline 183
; break;
L13:
L14:
.dbline 185
; }
; XmtBuff.p_p=0;
clr R2
sts _XmtBuff+70,R2
.dbline 186
; XmtBuff.wrLength = 2;
ldi R24,2
ldi R25,0
sts _XmtBuff+64+1,R25
sts _XmtBuff+64,R24
.dbline 187
; XmtBuff.p = XmtBuff.b;
ldi R24,<_XmtBuff
ldi R25,>_XmtBuff
sts _XmtBuff+68+1,R25
sts _XmtBuff+68,R24
.dbline 188
; USB_submit();
rcall _USB_submit
.dbline -2
.dbline 189
; }
L11:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbfunc s clear_feature _clear_feature fI
; j -> R20
.even
_clear_feature::
rcall push_gset1
.dbline -1
.dbline 214
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
;
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
;
; **函数功能:标准设备请求
; **函数输入参数及说明:无
;
; **函数返回值:无
; **在本函数以外定义的变量:D12_COMMAND,D12_DATA
; **调用的函数说明:
; USB_submit();
; 控制端点提交函数
;
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void clear_feature(void)
; {
.dbline 216
; unsigned char j;
; switch (XmtBuff.b[0])
lds R20,_XmtBuff
clr R21
cpi R20,0
cpc R20,R21
breq L24
cpi R20,1
ldi R30,0
cpc R21,R30
breq L24
cpi R20,2
ldi R30,0
cpc R21,R30
breq L28
rjmp L23
X1:
.dbline 217
; {
.dbline 219
; case 0x00://清设备唤醒功能
; break;
.dbline 221
; case 0x01://清接口状态
; break;
L28:
.dbline 224
; case 0x02://启用端点
; //XmtBuff.b[5] D7为方向,D3~0为端点号
; j = XmtBuff.b[5];
lds R20,_XmtBuff+5
.dbline 225
; if(j<0x80)
cpi R20,128
brsh L30
.dbline 226
; {
.dbline 227
; j = 0x40+j*2;
lsl R20
subi R20,192 ; addi 64
.dbline 228
; D12_COMMAND = j;// 启用OUT端点
sts 31745,R20
.dbline 229
; D12_DATA = 0x00;
clr R2
sts 31744,R2
.dbline 230
; csram;
sts 0xfc01,R22
.dbline 230
.dbline 231
; }
rjmp L24
L30:
.dbline 233
; else
; {
.dbline 234
; j = (j & 0x0f);
andi R20,15
.dbline 235
; D12_COMMAND = 0x41+j*2;// 启用IN端点
mov R24,R20
lsl R24
subi R24,191 ; addi 65
sts 31745,R24
.dbline 236
; D12_DATA = 0x00;
clr R2
sts 31744,R2
.dbline 237
; csram;
sts 0xfc01,R22
.dbline 237
.dbline 238
; }
.dbline 239
; break;
L23:
L24:
.dbline 241
; }
; XmtBuff.wrLength = 0;
clr R2
clr R3
sts _XmtBuff+64+1,R3
sts _XmtBuff+64,R2
.dbline 242
; USB_submit();
rcall _USB_submit
.dbline -2
.dbline 243
; }
L22:
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r j 20 c
.dbfunc s set_feature _set_feature fI
; j -> R20
.even
_set_feature::
rcall push_gset1
.dbline -1
.dbline 268
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -