📄 d12setup.lis
字号:
.module D12Setup.c
.area data(ram, con, rel)
0000 _StandardDeviceRequest::
0000 .blkw 1
.area idata
0000 1200 .word PL_get_status
.area data(ram, con, rel)
0002 .blkw 1
.area idata
0002 1000 .word PL_clear_feature
.area data(ram, con, rel)
0004 .blkw 1
.area idata
0004 0E00 .word PL_void_function
.area data(ram, con, rel)
0006 .blkw 1
.area idata
0006 0C00 .word PL_set_feature
.area data(ram, con, rel)
0008 .blkw 1
.area idata
0008 0E00 .word PL_void_function
.area data(ram, con, rel)
000A .blkw 1
.area idata
000A 0A00 .word PL_set_address
.area data(ram, con, rel)
000C .blkw 1
.area idata
000C 0800 .word PL_get_descriptor
.area data(ram, con, rel)
000E .blkw 1
.area idata
000E 0E00 .word PL_void_function
.area data(ram, con, rel)
0010 .blkw 1
.area idata
0010 0600 .word PL_get_configuration
.area data(ram, con, rel)
0012 .blkw 1
.area idata
0012 0400 .word PL_set_configuration
.area data(ram, con, rel)
0014 .blkw 1
.area idata
0014 0200 .word PL_get_interface
.area data(ram, con, rel)
0016 .blkw 1
.area idata
0016 0000 .word PL_set_interface
.area data(ram, con, rel)
0018 .blkw 1
.area idata
0018 0E00 .word PL_void_function
.area data(ram, con, rel)
001A .dbfile G:\source/d12setup.h
001A .dbsym s StandardDeviceRequest _StandardDeviceRequest A[26:13]pfI
.area lit(rom, con, rel)
0000 _device_descriptor::
0000 1201 .byte 18,1
0002 0001 .byte 0,1
0004 0000 .byte 0,0
0006 0040 .byte 0,64
0008 7104 .byte 'q,4
000A 9008 .byte 144,8
000C 0001 .byte 0,1
000E 0000 .byte 0,0
0010 0001 .byte 0,1
0012 .dbsym s device_descriptor _device_descriptor A[18:18]c
0012 _Configuration_Descriptor::
0012 0902 .byte 9,2
0014 2000 .byte 32,0
0016 0101 .byte 1,1
0018 0080 .byte 0,128
001A 32 .byte 50
001B .dbsym s Configuration_Descriptor _Configuration_Descriptor A[9:9]c
001B _Interface_Descriptor::
001B 0904 .byte 9,4
001D 0000 .byte 0,0
001F 0208 .byte 2,8
0021 0650 .byte 6,'P
0023 00 .byte 0
0024 .dbsym s Interface_Descriptor _Interface_Descriptor A[9:9]c
0024 _Bulk_in_Descriptor::
0024 0705 .byte 7,5
0026 8202 .byte 130,2
0028 4000 .byte 64,0
002A 00 .byte 0
002B .dbsym s Bulk_in_Descriptor _Bulk_in_Descriptor A[7:7]c
002B _Bulk_out_Descriptor::
002B 0705 .byte 7,5
002D 0202 .byte 2,2
002F 4000 .byte 64,0
0031 00 .byte 0
0032 .dbsym s Bulk_out_Descriptor _Bulk_out_Descriptor A[7:7]c
.area text(rom, con, rel)
0000 .dbfile G:\source/d12setup.h
0000 .dbfile G:\source\D12Setup.c
0000 .dbfunc s Setup_control _Setup_control fI
; p -> R10,R11
; j -> R20
; i -> R22
.even
0000 _Setup_control::
0000 00D0 rcall push_gset3
0002 .dbline -1
0002 .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)
; {
0002 .dbline 53
; unsigned char i,j,*p;
; D12_COMMAND = 0x00;//选择端点(指针指向0位置)
0002 2224 clr R2
0004 2092017C sts 31745,R2
0008 .dbline 54
; cwait;
0008 0000 nop
000A .dbline 55
; D12_COMMAND = 0xf0;//读标准控制码
000A 80EF ldi R24,240
000C 8093017C sts 31745,R24
0010 .dbline 56
; cwait1;
0010 0000 nop
0012 .dbline 56
0012 0000 nop
0014 .dbline 64
; /****************************
; 缓冲区数据结构:
; 字节1:保留,可为任意值
; 字节2:数据字节的数目/长度
; 字节3:数据字节1
; 字节4:数据字节2
; *****************************/
; i = D12_DATA;//字节1
0014 6091007C lds R22,31744
0018 .dbline 65
; cwait1;
0018 0000 nop
001A .dbline 65
001A 0000 nop
001C .dbline 66
; i = D12_DATA;//字节2
001C 6091007C lds R22,31744
0020 .dbline 67
; cwait1;
0020 0000 nop
0022 .dbline 67
0022 0000 nop
0024 .dbline 68
; j = D12_DATA;//数据字节
0024 4091007C lds R20,31744
0028 .dbline 69
; csram;
0028 609301FC sts 0xfc01,R22
002C .dbline 69
002C .dbline 70
; p = XmtBuff.b;//P指针指向传输缓冲区
002C 80E0 ldi R24,<_XmtBuff
002E 90E0 ldi R25,>_XmtBuff
0030 A82E mov R10,R24
0032 B92E mov R11,R25
0034 .dbline 71
; *(p++) = j;
0034 2A2C mov R2,R10
0036 3B2C mov R3,R11
0038 822D mov R24,R2
003A 932D mov R25,R3
003C 0196 adiw R24,1
003E A82E mov R10,R24
0040 B92E mov R11,R25
0042 E22D mov R30,R2
0044 F32D mov R31,R3
0046 4083 std z+0,R20
0048 .dbline 72
; for(i=0;i<7;i++)
0048 6627 clr R22
004A 06C0 rjmp L6
004C L3:
004C .dbline 73
004C .dbline 74
004C 4091007C lds R20,31744
0050 .dbline 75
0050 609301FC sts 0xfc01,R22
0054 .dbline 75
0054 .dbline 76
0054 4193 st Z+,R20
0056 .dbline 77
0056 L4:
0056 .dbline 72
0056 6395 inc R22
0058 L6:
0058 .dbline 72
0058 6730 cpi R22,7
005A C0F3 brlo L3
005C .dbline 78
; {
; j = D12_DATA;//数据字节
; csram;
; asm("st Z+,%j");
; }
; D12_COMMAND = 0x01;// 选择端点(指针指向0位置)
005C 81E0 ldi R24,1
005E 8093017C sts 31745,R24
0062 .dbline 79
; cwait;
0062 0000 nop
0064 .dbline 80
; D12_COMMAND = 0xf1;//应答SETUP包
0064 81EF ldi R24,241
0066 8093017C sts 31745,R24
006A .dbline 81
; csram;
006A 609301FC sts 0xfc01,R22
006E .dbline 81
006E .dbline 82
; i = XmtBuff.b[1];
006E 60910100 lds R22,_XmtBuff+1
0072 .dbline 83
; if (i <= 0x0B)//标准请求跳转表
0072 8BE0 ldi R24,11
0074 8617 cp R24,R22
0076 70F0 brlo L8
0078 .dbline 84
; {
0078 .dbline 85
; (*StandardDeviceRequest[i])();
0078 80E0 ldi R24,<_StandardDeviceRequest
007A 90E0 ldi R25,>_StandardDeviceRequest
007C E62F mov R30,R22
007E FF27 clr R31
0080 EE0F lsl R30
0082 FF1F rol R31
0084 E80F add R30,R24
0086 F91F adc R31,R25
0088 A081 ldd R26,z+0
008A B181 ldd R27,z+1
008C EA2F mov R30,R26
008E FB2F mov R31,R27
0090 00D0 rcall xicall
0092 .dbline 86
; }
0092 1BC0 rjmp L9
0094 L8:
0094 .dbline 87
; else{
0094 .dbline 88
; D12_COMMAND = 0x01;//选择端点(指针指向0位置)
0094 81E0 ldi R24,1
0096 8093017C sts 31745,R24
009A .dbline 89
; cwait;
009A 0000 nop
009C .dbline 90
; D12_COMMAND = 0xf0;// 写缓冲区
009C 80EF ldi R24,240
009E 8093017C sts 31745,R24
00A2 .dbline 91
; cwait;
00A2 0000 nop
00A4 .dbline 99
; /****************************
; 缓冲区数据结构:
; 字节1:保留,可为任意值
; 字节2:数据字节的数目/长度
; 字节3:数据字节1
; 字节4:数据字节2
; *****************************/
; D12_DATA = 0x00;//字节1
00A4 2224 clr R2
00A6 2092007C sts 31744,R2
00AA .dbline 100
; cwait;
00AA 0000 nop
00AC .dbline 101
; D12_DATA = 0x01;//字节2
00AC 81E0 ldi R24,1
00AE 8093007C sts 31744,R24
00B2 .dbline 102
; csram;
00B2 609301FC sts 0xfc01,R22
00B6 .dbline 102
00B6 .dbline 103
; D12_DATA = 0x00;//数据字节
00B6 2224 clr R2
00B8 2092007C sts 31744,R2
00BC .dbline 104
; csram;
00BC 609301FC sts 0xfc01,R22
00C0 .dbline 104
00C0 .dbline 105
; D12_COMMAND = 0xfa;//设置 IN 缓冲区有效(满标志)
00C0 8AEF ldi R24,250
00C2 8093017C sts 31745,R24
00C6 .dbline 106
; csram;
00C6 609301FC sts 0xfc01,R22
00CA .dbline 106
00CA .dbline 107
; }
00CA L9:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -