⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d12setup.s

📁 AVR单片机里的USB通信程序开发源代码,是某人的本科毕业设计,里面附有毕业论文.
💻 S
📖 第 1 页 / 共 2 页
字号:
	.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 + -