?? 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 + -