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

📄 d12_setup.s

📁 D12固件程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module D12_setup.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:\Backup\6月1日flag置(认为接近最终)\ilx511_usb/d12setup.h
	.dbsym e StandardDeviceRequest _StandardDeviceRequest A[26:13]pfV
	.area lit(rom, con, rel)
_device_descriptor::
	.byte 18,1
	.byte 16,1
	.byte 220,0
	.byte 0,16
	.byte 'q,4
	.byte 144,8
	.byte 0,1
	.byte 0,0
	.byte 0,1
	.dbsym e device_descriptor _device_descriptor A[18:18]kc
_Configuration_Descriptor::
	.byte 9,2
	.byte 46,0
	.byte 1,1
	.byte 0,32
	.byte 'd
	.dbsym e Configuration_Descriptor _Configuration_Descriptor A[9:9]kc
_Interface_Descriptor::
	.byte 9,4
	.byte 0,0
	.byte 4,220
	.byte 160,176
	.byte 0
	.dbsym e Interface_Descriptor _Interface_Descriptor A[9:9]kc
_Endpoint1_out_Descriptor::
	.byte 7,5
	.byte 1,3
	.byte 16,0
	.byte 1
	.dbsym e Endpoint1_out_Descriptor _Endpoint1_out_Descriptor A[7:7]kc
_Endpoint1_in_Descriptor::
	.byte 7,5
	.byte 129,3
	.byte 16,0
	.byte 1
	.dbsym e Endpoint1_in_Descriptor _Endpoint1_in_Descriptor A[7:7]kc
_Endpoint2_out_Descriptor::
	.byte 7,5
	.byte 2,2
	.byte 64,0
	.byte 1
	.dbsym e Endpoint2_out_Descriptor _Endpoint2_out_Descriptor A[7:7]kc
_Endpoint2_in_Descriptor::
	.byte 7,5
	.byte 130,2
	.byte 64,0
	.byte 1
	.dbsym e Endpoint2_in_Descriptor _Endpoint2_in_Descriptor A[7:7]kc
	.area text(rom, con, rel)
	.dbfile G:\Backup\6月1日flag置(认为接近最终)\ilx511_usb/d12setup.h
	.dbfile G:\Backup\6月1日flag置(认为接近最终)\ilx511_usb\D12_setup.c
	.dbfunc e Setup_control _Setup_control fV
;              p -> R10,R11
;              j -> R22
;              i -> R20
	.even
_Setup_control::
	rcall push_gset3
	.dbline -1
	.dbline 9
; #include "io8515v.h"
; #include "d12head.h"
; #include "d12setup.h"
; 
; TRANSMIT_STRUCT XmtBuff;
; ///int bconfig;
; 
; void Setup_control(void)
; {
	.dbline 11
; 	char i,j,*p;
; 	D12_COMMAND = 0x00;// 选择端点0(指针指向0位置)
	clr R2
	sts 32513,R2
	.dbline 12
; 	cwait;
	nop
	.dbline 13
; 	D12_COMMAND = 0xf0;// 读标准控制码
	ldi R24,240
	sts 32513,R24
	.dbline 14
; 	cwait1;
	nop
	.dbline 14
	nop
	.dbline 15
; 	i = D12_DATA;
	lds R20,32512
	.dbline 16
; 	cwait1;
	nop
	.dbline 16
	nop
	.dbline 17
; 	i = D12_DATA;//长度
	lds R20,32512
	.dbline 18
; 	cwait1;
	nop
	.dbline 18
	nop
	.dbline 19
; 	j = D12_DATA;
	lds R22,32512
	.dbline 20
; 	csram;
	sts 0xfc01,R22
	.dbline 20
	.dbline 21
; 	p = XmtBuff.b;
	ldi R30,<_XmtBuff
	ldi R31,>_XmtBuff
	.dbline 22
; 	*(p++) = j;
	st Z+,R22
	movw R10,R30
	.dbline 23
; 	for(i=0;i<7;i++)
	clr R20
	rjmp L11
L8:
	.dbline 24
	.dbline 25
	lds R22,32512
	.dbline 26
	sts 0xfc01,R22
	.dbline 26
	.dbline 27
	st Z+,R22
	.dbline 28
L9:
	.dbline 23
	inc R20
L11:
	.dbline 23
	cpi R20,7
	brlo L8
	.dbline 29
; 	{
; 	   j = D12_DATA;
; 	   csram;
; 	   asm("st Z+,%j");
; 	}
; 	D12_COMMAND = 0x01;// 选择端点 1(指针指向0位置)
	ldi R24,1
	sts 32513,R24
	.dbline 30
; 	cwait;
	nop
	.dbline 31
; 	D12_COMMAND = 0xf1;// 应答SETUP包,使能(清 OUT 缓冲区、使能 IN 缓冲区)命令
	ldi R24,241
	sts 32513,R24
	.dbline 32
; 	csram;
	sts 0xfc01,R22
	.dbline 32
	.dbline 33
; 	i = XmtBuff.b[1];
	lds R20,_XmtBuff+1
	.dbline 34
; 	if(XmtBuff.b[0] & 0x40)//厂商请求跳转表
	lds R2,_XmtBuff
	sbrs R2,6
	rjmp L13
	.dbline 35
; 	{
	.dbline 37
; 	   //if (i <= 0x0f)
; 	   {
	.dbline 39
; 		   //(*VendorDeviceRequest[i])();
; 	   }
	.dbline 40
; 	}
	rjmp L14
L13:
	.dbline 42
; 	else
; 	{
	.dbline 43
; 	   if (i <= 0x0B)//标准请求跳转表
	ldi R24,11
	cp R24,R20
	brlo L15
	.dbline 44
; 	   {
	.dbline 45
; 		   (*StandardDeviceRequest[i])();
	ldi R24,2
	mul R24,R20
	movw R30,R0
	ldi R24,<_StandardDeviceRequest
	ldi R25,>_StandardDeviceRequest
	add R30,R24
	adc R31,R25
	ldd R26,z+0
	ldd R27,z+1
	movw R30,R26
	rcall xicall
	.dbline 46
; 	  }
L15:
	.dbline 47
; 	}
L14:
	.dbline 48
; 	D12_COMMAND = 0x00;// 选择端点0(指针指向0位置)
	clr R2
	sts 32513,R2
	.dbline 49
; 	cwait;
	nop
	.dbline 50
; 	D12_COMMAND = 0xf1;// 应答SETUP包,使能(清 OUT 缓冲区、使能 IN 缓冲区)命令
	ldi R24,241
	sts 32513,R24
	.dbline 51
; 	cwait;
	nop
	.dbline 52
; 	D12_COMMAND = 0xf2;// 清 OUT 缓冲区
	ldi R24,242
	sts 32513,R24
	.dbline -2
	.dbline 53
; }
L7:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r p 10 pc
	.dbsym r j 22 c
	.dbsym r i 20 c
	.dbend
	.dbfunc e void_function _void_function fV
	.even
_void_function::
	.dbline -1
	.dbline 56
; 
; void void_function(void)
; {
	.dbline 57
; 	D12_COMMAND = 0x40;// 0 端点停止(用于发送Stall包)
	ldi R24,64
	sts 32513,R24
	.dbline 58
; 	cwait;
	nop
	.dbline 59
; 	D12_DATA = 0x01;
	ldi R24,1
	sts 32512,R24
	.dbline 60
; 	cwait;
	nop
	.dbline 61
; 	D12_COMMAND = 0x41;// 1 端点停止(用于发送Stall包)
	ldi R24,65
	sts 32513,R24
	.dbline 62
; 	cwait;
	nop
	.dbline 63
; 	D12_DATA = 0x01;
	ldi R24,1
	sts 32512,R24
	.dbline 64
; 	cwait;
	nop
	.dbline 65
; 	D12_COMMAND = 0xf1;// 应答SETUP包,使能(清 OUT 缓冲区、使能 IN 缓冲区)命令
	ldi R24,241
	sts 32513,R24
	.dbline 66
; 	csram;
	sts 0xfc01,R22
	.dbline 66
	.dbline -2
	.dbline 67
; }
L17:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e get_status _get_status fV
	.even
_get_status::
	rcall push_gset1
	.dbline -1
	.dbline 70
; 
; void get_status(void)
; {
	.dbline 71
; 	XmtBuff.b[1] = 0x00;
	clr R2
	sts _XmtBuff+1,R2
	.dbline 72
; 	switch (XmtBuff.b[0])
	lds R20,_XmtBuff
	clr R21
	cpi R20,128
	ldi R30,0
	cpc R21,R30
	breq L23
	cpi R20,129
	ldi R30,0
	cpc R21,R30
	breq L24
	cpi R20,130
	ldi R30,0
	cpc R21,R30
	breq L25
	rjmp L20
X0:
	.dbline 73
; 	{
L23:
	.dbline 76
; 	case 0x80://返回设备状态
; 			  //发送两个字节数据:第一字节D1为1支持远程唤醒,D0为0是总线供电,其它位为0;第二字节为0。
; 		XmtBuff.b[0] = 0x03;
	ldi R24,3
	sts _XmtBuff,R24
	.dbline 77
; 		break;
	rjmp L21
L24:
	.dbline 81
; 	case 0x81://返回接口状态
; 		//发送两个字节数据:第一字节为0;第二字节为0。
; 		//XmtBuff.b[5] 为接口号
; 		XmtBuff.b[0] = 0x00;
	clr R2
	sts _XmtBuff,R2
	.dbline 82
; 		break;
	rjmp L21
L25:
	.dbline 86
; 	case 0x82://返回端点状态
; 		//发送两个字节数据:第一字节D0为1端点处于暂停,否则D0为0,其它位为0;第二字节为0。
; 		//XmtBuff.b[5] D7为方向,D3~0为端点号
; 		XmtBuff.b[0] = 0x00;
	clr R2
	sts _XmtBuff,R2
	.dbline 87
; 		break;
L20:
L21:
	.dbline 89
; 	}
; 	XmtBuff.p_p=0;
	clr R2
	sts _XmtBuff+39,R2
	.dbline 90
; 	XmtBuff.wrLength = 2;
	ldi R24,2
	sts _XmtBuff+34,R24
	.dbline 91
; 	XmtBuff.p = XmtBuff.b;
	ldi R24,<_XmtBuff
	ldi R25,>_XmtBuff
	sts _XmtBuff+37+1,R25
	sts _XmtBuff+37,R24
	.dbline 92
; 	USB_submit();
	rcall _USB_submit
	.dbline -2
	.dbline 93
; }
L18:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e clear_feature _clear_feature fV
;              j -> R20
	.even
_clear_feature::
	rcall push_gset1
	.dbline -1
	.dbline 96
; 
; void clear_feature(void)
; {
	.dbline 98
; char j;
; 	switch (XmtBuff.b[0])
	lds R20,_XmtBuff
	clr R21
	cpi R20,0
	cpc R20,R21
	breq L31
X1:
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	breq L31
	cpi R20,2
	ldi R30,0
	cpc R21,R30
	breq L35
	rjmp L30
X2:
	.dbline 99
; 	{
	.dbline 101
; 	case 0x00://清设备唤醒功能
; 		break;
	.dbline 103
; 	case 0x01://清接口状态
; 		break;
L35:
	.dbline 106
; 	case 0x02://启用端点
; 		//XmtBuff.b[5] D7为方向,D3~0为端点号
; 		j = XmtBuff.b[5];
	lds R20,_XmtBuff+5
	.dbline 107
; 		if(j<0x80)
	cpi R20,128
	brsh L37
	.dbline 108
; 		{
	.dbline 109
; 			j = 0x40+j*2;
	ldi R24,2
	mul R24,R20
	mov R20,R0
	subi R20,192    ; addi 64
	.dbline 110
; 			D12_COMMAND = j;// 启用OUT端点
	sts 32513,R20
	.dbline 111
; 			D12_DATA = 0x00;
	clr R2
	sts 32512,R2
	.dbline 112
; 			csram;
	sts 0xfc01,R22
	.dbline 112
	.dbline 113
; 		}
	rjmp L31
L37:
	.dbline 115
; 		else
; 		{
	.dbline 116
; 			j = (j & 0x0f);
	andi R20,15
	.dbline 117
; 			D12_COMMAND = 0x41+j*2;// 启用IN端点
	ldi R24,2
	mul R24,R20
	mov R24,R0
	subi R24,191    ; addi 65
	sts 32513,R24
	.dbline 118
; 			D12_DATA = 0x00;
	clr R2
	sts 32512,R2
	.dbline 119
; 			csram;
	sts 0xfc01,R22
	.dbline 119
	.dbline 120
; 		}
	.dbline 121
; 		break;
L30:
L31:
	.dbline 123
; 	}
; 	XmtBuff.wrLength = 0;
	clr R2
	sts _XmtBuff+34,R2
	.dbline 124
; 	USB_submit();
	rcall _USB_submit
	.dbline -2
	.dbline 125
; }
L29:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbend
	.dbfunc e set_feature _set_feature fV
;              j -> R20
	.even
_set_feature::
	rcall push_gset1
	.dbline -1
	.dbline 128
; 
; void set_feature(void)
; {
	.dbline 130
; char j;
; 	switch (XmtBuff.b[0])
	lds R20,_XmtBuff
	clr R21
	cpi R20,0
	cpc R20,R21
	breq L42
X3:
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	breq L42
	cpi R20,2
	ldi R30,0
	cpc R21,R30
	breq L46
	rjmp L41
X4:
	.dbline 131
; 	{
	.dbline 133
; 	case 0x00://设置设备唤醒功能
; 		break;
	.dbline 135
; 	case 0x01://设置接口状态
; 		break;
L46:
	.dbline 138
; 	case 0x02://停止端点
; 		//XmtBuff.b[5] D7为方向,D3~0为端点号
; 		j = XmtBuff.b[5];
	lds R20,_XmtBuff+5
	.dbline 139
; 		if(j<0x80)
	cpi R20,128
	brsh L48
	.dbline 140
; 		{
	.dbline 141
; 			j = 0x40+j * 2;
	ldi R24,2
	mul R24,R20
	mov R20,R0
	subi R20,192    ; addi 64
	.dbline 142
; 			D12_COMMAND = j;// 停止OUT端点
	sts 32513,R20
	.dbline 143
; 			cwait;
	nop
	.dbline 144
; 			D12_DATA = 0x01;
	ldi R24,1
	sts 32512,R24
	.dbline 145
; 			csram;
	sts 0xfc01,R22
	.dbline 145
	.dbline 146
; 		}
	rjmp L42
L48:
	.dbline 148
; 		else
; 		{
	.dbline 149
; 			j = j & 0x0f;
	andi R20,15
	.dbline 150
; 			j = 0x41+j*2;
	ldi R24,2
	mul R24,R20
	mov R20,R0
	subi R20,191    ; addi 65
	.dbline 151
; 			D12_COMMAND = j;// 停止IN端点
	sts 32513,R20
	.dbline 152
; 			cwait;
	nop
	.dbline 153
; 			D12_DATA = 0x01;
	ldi R24,1
	sts 32512,R24
	.dbline 154
; 			csram;
	sts 0xfc01,R22

⌨️ 快捷键说明

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