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

📄 d12setup.s

📁 AVR单片机里的USB通信程序开发源代码,是某人的本科毕业设计,里面附有毕业论文.
💻 S
📖 第 1 页 / 共 2 页
字号:
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
; 
; **函数功能:标准设备请求
; **函数输入参数及说明:无
; 
; **函数返回值:无
; **在本函数以外定义的变量:D12_COMMAND,D12_DATA
; **调用的函数说明:
;   USB_submit();
;   控制端点提交函数
;   
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void set_feature(void)
; {
	.dbline 270
; 	unsigned char j;
; 	switch (XmtBuff.b[0])
	lds R20,_XmtBuff
	clr R21
	cpi R20,0
	cpc R20,R21
	breq L35
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	breq L35
	cpi R20,2
	ldi R30,0
	cpc R21,R30
	breq L39
	rjmp L34
X2:
	.dbline 271
; 	{
	.dbline 273
; 	case 0x00://设置设备唤醒功能
; 		break;
	.dbline 275
; 	case 0x01://设置接口状态
; 		break;
L39:
	.dbline 278
; 	case 0x02://停止端点
; 		//XmtBuff.b[5] D7为方向,D3~0为端点号
; 		j = XmtBuff.b[5];
	lds R20,_XmtBuff+5
	.dbline 279
; 		if(j<0x80)
	cpi R20,128
	brsh L41
	.dbline 280
; 		{
	.dbline 281
; 			j = 0x40+j * 2;
	lsl R20
	subi R20,192	; addi 64
	.dbline 282
; 			D12_COMMAND = j;// 停止OUT端点
	sts 31745,R20
	.dbline 283
; 			cwait;
	nop
	.dbline 284
; 			D12_DATA = 0x01;
	ldi R24,1
	sts 31744,R24
	.dbline 285
; 			csram;
	sts 0xfc01,R22
	.dbline 285
	.dbline 286
; 		}
	rjmp L35
L41:
	.dbline 288
; 		else
; 		{
	.dbline 289
; 			j = j & 0x0f;
	andi R20,15
	.dbline 290
; 			j = 0x41+j*2;
	lsl R20
	subi R20,191	; addi 65
	.dbline 291
; 			D12_COMMAND = j;// 停止IN端点
	sts 31745,R20
	.dbline 292
; 			cwait;
	nop
	.dbline 293
; 			D12_DATA = 0x01;
	ldi R24,1
	sts 31744,R24
	.dbline 294
; 			csram;
	sts 0xfc01,R22
	.dbline 294
	.dbline 295
; 		}
	.dbline 296
; 		break;
L34:
L35:
	.dbline 298
; 	}
; 	XmtBuff.wrLength = 0;
	clr R2
	clr R3
	sts _XmtBuff+64+1,R3
	sts _XmtBuff+64,R2
	.dbline 299
; 	USB_submit();
	rcall _USB_submit
	.dbline -2
	.dbline 300
; }
L33:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbfunc s set_address _set_address fI
;              j -> R20
	.even
_set_address::
	rcall push_gset1
	.dbline -1
	.dbline 325
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
; 
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
; 
; **函数功能:标准设备请求
; **函数输入参数及说明:无
; 
; **函数返回值:无
; **在本函数以外定义的变量:D12_COMMAND,D12_DATA
; **调用的函数说明:
;   USB_submit();
;   控制端点提交函数
;   
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void set_address(void)
; {
	.dbline 327
; 	unsigned char j;
; 	j = 0x80 | XmtBuff.b[2];
	lds R20,_XmtBuff+2
	ori R20,128
	.dbline 328
; 	D12_COMMAND = 0xd0;//设置新地址使能
	ldi R24,208
	sts 31745,R24
	.dbline 329
; 	cwait;
	nop
	.dbline 330
; 	D12_DATA = j;
	sts 31744,R20
	.dbline 331
; 	csram;
	sts 0xfc01,R22
	.dbline 331
	.dbline 332
; 	XmtBuff.wrLength = 0;
	clr R2
	clr R3
	sts _XmtBuff+64+1,R3
	sts _XmtBuff+64,R2
	.dbline 333
; 	USB_submit();
	rcall _USB_submit
	.dbline -2
	.dbline 334
; }
L44:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbfunc s get_descriptor _get_descriptor fI
;              i -> R20,R21
	.even
_get_descriptor::
	rcall push_gset1
	.dbline -1
	.dbline 359
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
; 
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
; 
; **函数功能:标准设备请求
; **函数输入参数及说明:无
; 
; **函数返回值:无
; **在本函数以外定义的变量:D12_COMMAND,D12_DATA
; **调用的函数说明:
;   USB_submit();
;   控制端点提交函数
;   
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void get_descriptor(void)
; {
	.dbline 361
; 	unsigned int i;
; 	XmtBuff.p_p=1;
	ldi R24,1
	sts _XmtBuff+70,R24
	.dbline 362
; 	switch (XmtBuff.b[3])
	lds R20,_XmtBuff+3
	clr R21
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	breq L53
	cpi R20,2
	ldi R30,0
	cpc R21,R30
	breq L56
	cpi R20,3
	ldi R30,0
	cpc R21,R30
	brne X6
	rjmp L66
X6:
	rjmp L49
X3:
	.dbline 363
; 	{
L53:
	.dbline 365
; 		case 0x01: //USB_DEVICE
; 			XmtBuff.pp = device_descriptor;
	ldi R24,<_device_descriptor
	ldi R25,>_device_descriptor
	sts _XmtBuff+66+1,R25
	sts _XmtBuff+66,R24
	.dbline 366
; 			XmtBuff.wrLength = sizeof(device_descriptor);
	ldi R24,18
	ldi R25,0
	sts _XmtBuff+64+1,R25
	sts _XmtBuff+64,R24
	.dbline 367
; 			break;
	rjmp L50
L56:
	.dbline 369
; 		case 0x02:// USB_CONFIGURATION
; 			i = XmtBuff.b[7];
	lds R20,_XmtBuff+7
	clr R21
	.dbline 370
; 			i = ((i<<8) | XmtBuff.b[6]);
	lds R2,_XmtBuff+6
	clr R3
	mov R4,R20
	mov R5,R21
	mov R5,R4
	clr R4
	or R4,R2
	or R5,R3
	mov R20,R4
	mov R21,R5
	.dbline 371
; 			XmtBuff.pp = Configuration_Descriptor;
	ldi R24,<_Configuration_Descriptor
	ldi R25,>_Configuration_Descriptor
	sts _XmtBuff+66+1,R25
	sts _XmtBuff+66,R24
	.dbline 372
; 			XmtBuff.wrLength = *(XmtBuff.pp+2);
	adiw R24,2
	mov R30,R24
	mov R31,R25
	lpm
	mov R2,R0
	clr R3
	sts _XmtBuff+64+1,R3
	sts _XmtBuff+64,R2
	.dbline 373
; 			if(i<16)
	cpi R20,16
	ldi R30,0
	cpc R21,R30
	brsh L50
	.dbline 374
; 				  XmtBuff.wrLength = XmtBuff.b[6];
	lds R2,_XmtBuff+6
	clr R3
	sts _XmtBuff+64+1,R3
	sts _XmtBuff+64,R2
	.dbline 375
; 			break;
	rjmp L50
L66:
	.dbline 377
; 		case 0x03: //USB_STRING
; 			switch(XmtBuff.b[2])
	lds R20,_XmtBuff+2
	clr R21
	cpi R20,0
	cpc R20,R21
	breq L50
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	breq L50
	cpi R20,2
	ldi R30,0
	cpc R21,R30
	breq L50
	rjmp L67
X4:
	.dbline 378
; 			{
	.dbline 382
; 			case 0x00 :
; 				//XmtBuff.wrLength = sizeof(USBStringLanguageDescription);
; 				//?XmtBuff.p = USBStringLanguageDescription;
; 				break;
	.dbline 386
; 			case 0x01 :
; 				//?XmtBuff.wrLength = sizeof(USBStringDescription1);
; 				//?XmtBuff.p = USBStringDescription1;
; 			   break;
	.dbline 390
; 			case 0x02 :
; 				//?XmtBuff.wrLength = sizeof(USBStringDescription2);
; 				//?XmtBuff.p = USBStringDescription2;
; 			   break;
L67:
	.dbline 392
; 			default   :
; 				void_function();
	rcall _void_function
	.dbline 393
; 				return;
	rjmp L47
X5:
	.dbline 395
; 			}
; 			break;
L49:
	.dbline 397
; 		default :
; 			void_function();
	rcall _void_function
	.dbline 398
; 			return;
	rjmp L47
L50:
	.dbline 400
; 	}
; 	USB_submit();
	rcall _USB_submit
	.dbline -2
	.dbline 401
; }
L47:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbfunc s get_configuration _get_configuration fI
	.even
_get_configuration::
	.dbline -1
	.dbline 426
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
; 
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
; 
; **函数功能:标准设备请求
; **函数输入参数及说明:无
; 
; **函数返回值:无
; **在本函数以外定义的变量:D12_COMMAND,D12_DATA
; **调用的函数说明:
;   USB_submit();
;   控制端点提交函数
;   
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void get_configuration(void)
; {
	.dbline 427
; 	XmtBuff.b[0] = 1;//返回是否被配置(非 0 为配置)
	ldi R24,1
	sts _XmtBuff,R24
	.dbline 428
; 	XmtBuff.wrLength = 16;
	ldi R24,16
	ldi R25,0
	sts _XmtBuff+64+1,R25
	sts _XmtBuff+64,R24
	.dbline 429
; 	XmtBuff.p_p=0;
	clr R2
	sts _XmtBuff+70,R2
	.dbline 430
; 	XmtBuff.p = XmtBuff.b;
	ldi R24,<_XmtBuff
	ldi R25,>_XmtBuff
	sts _XmtBuff+68+1,R25
	sts _XmtBuff+68,R24
	.dbline 431
; 	USB_submit();
	rcall _USB_submit
	.dbline -2
	.dbline 432
; }
L74:
	.dbline 0 ; func end
	ret
	.dbfunc s set_configuration _set_configuration fI
;              j -> R20
	.even
_set_configuration::
	rcall push_gset1
	.dbline -1
	.dbline 457
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
; 
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
; 
; **函数功能:标准设备请求
; **函数输入参数及说明:无
; 
; **函数返回值:无
; **在本函数以外定义的变量:D12_COMMAND,D12_DATA
; **调用的函数说明:
;   USB_submit();
;   控制端点提交函数
;   
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void set_configuration(void)
; {
	.dbline 459
; 	unsigned char j;
; 	if (XmtBuff.b[0] == 0x00)
	lds R2,_XmtBuff
	tst R2
	brne L79
	.dbline 460
; 	{
	.dbline 461
; 		XmtBuff.wrLength = 0;
	clr R2
	clr R3
	sts _XmtBuff+64+1,R3
	sts _XmtBuff+64,R2
	.dbline 462
; 		USB_submit();
	rcall _USB_submit
	.dbline 463
; 		j = XmtBuff.b[2];
	lds R20,_XmtBuff+2
	.dbline 464
; 		D12_COMMAND = 0xd8;
	ldi R24,216
	sts 31745,R24
	.dbline 465
; 		if(j == 0x00)
	tst R20
	brne L83
	.dbline 466
; 		{
	.dbline 467
; 			D12_DATA = 0x00;  // 停止普通/同步端点
	clr R2
	sts 31744,R2
	.dbline 468
	rjmp L84
L83:
	.dbline 468
; 		}else if(j == 0x01)
	cpi R20,1
	brne L85
	.dbline 469
; 		{
	.dbline 470
; 			D12_DATA = 0x01;  // 使能普通/同步端点
	ldi R24,1
	sts 31744,R24
	.dbline 471
; 			cwait;
	nop
	.dbline 472
; 			D12_COMMAND = 0x03;
	ldi R24,3
	sts 31745,R24
	.dbline 473
; 			cwait;
	nop
	.dbline 474
; 			D12_COMMAND = 0xfa;// 设置 IN 缓冲区有效(满标志)
	ldi R24,250
	sts 31745,R24
	.dbline 475
; 			cwait;
	nop
	.dbline 476
; 			D12_COMMAND = 0x05;
	ldi R24,5
	sts 31745,R24
	.dbline 477
; 			cwait;
	nop
	.dbline 478
; 			D12_COMMAND = 0xfa;// 设置 IN 缓冲区有效(满标志)
	ldi R24,250
	sts 31745,R24
	.dbline 479
; 		}
L85:
L84:
	.dbline 480
; 		csram;
	sts 0xfc01,R22
	.dbline 480
	.dbline 481
;    }
	rjmp L80
L79:
	.dbline 483
	rcall _void_function
L80:
	.dbline -2
	.dbline 484
; 	else
; 		void_function();
; }
L78:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbfunc s get_interface _get_interface fI
	.even
_get_interface::
	.dbline -1
	.dbline 509
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
; 
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
; 
; **函数功能:标准设备请求
; **函数输入参数及说明:无
; 
; **函数返回值:无
; **在本函数以外定义的变量:传输结构体
; **调用的函数说明:
;   USB_submit();
;   控制端点提交函数
;   
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void get_interface(void)
; {
	.dbline 510
; 	XmtBuff.b[0] = 0;
	clr R2
	sts _XmtBuff,R2
	.dbline 511
; 	XmtBuff.wrLength = 1;
	ldi R24,1
	ldi R25,0
	sts _XmtBuff+64+1,R25
	sts _XmtBuff+64,R24
	.dbline 512
; 	XmtBuff.p_p=0;
	sts _XmtBuff+70,R2
	.dbline 513
; 	XmtBuff.p = XmtBuff.b;
	ldi R24,<_XmtBuff
	ldi R25,>_XmtBuff
	sts _XmtBuff+68+1,R25
	sts _XmtBuff+68,R24
	.dbline 514
; 	USB_submit();
	rcall _USB_submit
	.dbline -2
	.dbline 515
; }
L87:
	.dbline 0 ; func end
	ret
	.dbfunc s set_interface _set_interface fI
	.even
_set_interface::
	.dbline -1
	.dbline 540
; /************************************************************
; **工程名称:U盘固件程序开发
; **编译器类型及版本:ICCAVR 6.26C
; **日期:2004.4.30
; **创建人:陈驰
; **所属单位:湖南大学计算机与通信学院
; 
; **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
; **时钟频率:8MHZ
; 
; **函数功能:标准设备请求
; **函数输入参数及说明:无
; 
; **函数返回值:无
; **在本函数以外定义的变量:传输结构体
; **调用的函数说明:
;   USB_submit();
;   控制端点提交函数
;   
; **修改人:陈驰
; **修改日期:2004.4.30
; **修改说明:创建
; *************************************************************/
; void set_interface(void)
; {
	.dbline 541
; 	XmtBuff.wrLength = 0;
	clr R2
	clr R3
	sts _XmtBuff+64+1,R3
	sts _XmtBuff+64,R2
	.dbline 542
; 	USB_submit();
	rcall _USB_submit
	.dbline -2
	.dbline 543
; }
L91:
	.dbline 0 ; func end
	ret
	.area bss(ram, con, rel)
	.dbfile G:\source\D12Setup.c
_XmtBuff::
	.blkb 71
	.dbsym s XmtBuff _XmtBuff X
	.area func_lit
PL_set_interface:	.word `_set_interface
PL_get_interface:	.word `_get_interface
PL_set_configuration:	.word `_set_configuration
PL_get_configuration:	.word `_get_configuration
PL_get_descriptor:	.word `_get_descriptor
PL_set_address:	.word `_set_address
PL_set_feature:	.word `_set_feature
PL_void_function:	.word `_void_function
PL_clear_feature:	.word `_clear_feature
PL_get_status:	.word `_get_status

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -