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

📄 d12_setup.s

📁 D12固件程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	.dbline 154
	.dbline 155
; 		}
	.dbline 156
; 		break;
L41:
L42:
	.dbline 158
; 	}
; 	XmtBuff.wrLength = 0;
	clr R2
	sts _XmtBuff+34,R2
	.dbline 159
; 	USB_submit();
	rcall _USB_submit
	.dbline -2
	.dbline 160
; }
L40:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbend
	.dbfunc e set_address _set_address fV
;              j -> R20
	.even
_set_address::
	rcall push_gset1
	.dbline -1
	.dbline 162
; void set_address(void)
; {
	.dbline 164
; char j;
; 	j = 0x80 | XmtBuff.b[2];
	lds R20,_XmtBuff+2
	ori R20,128
	.dbline 165
; 	D12_COMMAND = 0xd0;//设置新地址使能
	ldi R24,208
	sts 32513,R24
	.dbline 166
; 	cwait;
	nop
	.dbline 167
; 	D12_DATA = j;
	sts 32512,R20
	.dbline 168
; 	csram;
	sts 0xfc01,R22
	.dbline 168
	.dbline 169
; 	XmtBuff.wrLength = 0;
	clr R2
	sts _XmtBuff+34,R2
	.dbline 170
; 	USB_submit();
	rcall _USB_submit
	.dbline -2
	.dbline 171
; }
L51:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbend
	.dbfunc e get_descriptor _get_descriptor fV
;              i -> R20,R21
	.even
_get_descriptor::
	rcall push_gset1
	.dbline -1
	.dbline 174
; 
; void get_descriptor(void)
; {
	.dbline 176
; 	unsigned int i;
; 	XmtBuff.p_p=1;
	ldi R24,1
	sts _XmtBuff+39,R24
	.dbline 177
; 	switch (XmtBuff.b[3])
	lds R20,_XmtBuff+3
	clr R21
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	breq L60
	cpi R20,2
	ldi R30,0
	cpc R21,R30
	breq L63
	cpi R20,3
	ldi R30,0
	cpc R21,R30
	breq L73
	rjmp L56
X5:
	.dbline 178
; 	{
L60:
	.dbline 180
; 		case 0x01: //USB_DEVICE
; 			XmtBuff.pp = device_descriptor;
	ldi R24,<_device_descriptor
	ldi R25,>_device_descriptor
	sts _XmtBuff+35+1,R25
	sts _XmtBuff+35,R24
	.dbline 181
; 			XmtBuff.wrLength = sizeof(device_descriptor);
	ldi R24,18
	sts _XmtBuff+34,R24
	.dbline 182
; 			break;
	rjmp L57
L63:
	.dbline 184
; 		case 0x02:// USB_CONFIGURATION
; 			i = XmtBuff.b[7];
	lds R20,_XmtBuff+7
	clr R21
	.dbline 185
; 			i = ((i<<8) | XmtBuff.b[6]);
	lds R2,_XmtBuff+6
	mov R21,R20
	mov R20,R2
	.dbline 186
; 			XmtBuff.pp = Configuration_Descriptor;
	ldi R24,<_Configuration_Descriptor
	ldi R25,>_Configuration_Descriptor
	sts _XmtBuff+35+1,R25
	sts _XmtBuff+35,R24
	.dbline 187
; 			XmtBuff.wrLength = *(XmtBuff.pp+2);
	movw R30,R24
	adiw R30,2
	lpm R30,Z
	sts _XmtBuff+34,R30
	.dbline 188
; 			if(i<16)
	cpi R20,16
	ldi R30,0
	cpc R21,R30
	brsh L57
	.dbline 189
; 				  XmtBuff.wrLength = XmtBuff.b[6];
	sts _XmtBuff+34,R2
	.dbline 190
; 			break;
	rjmp L57
L73:
	.dbline 192
; 		case 0x03: //USB_STRING
; 			switch(XmtBuff.b[2])
	lds R20,_XmtBuff+2
	clr R21
	cpi R20,0
	cpc R20,R21
	breq L57
X6:
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	breq L57
	cpi R20,2
	ldi R30,0
	cpc R21,R30
	breq L57
	rjmp L74
X7:
	.dbline 193
; 			{
	.dbline 197
; 			case 0x00 :
; 				//?XmtBuff.wrLength = sizeof(USBStringLanguageDescription);
; 				//?XmtBuff.p = USBStringLanguageDescription;
; 				break;
	.dbline 201
; 			case 0x01 :
; 				//?XmtBuff.wrLength = sizeof(USBStringDescription1);
; 				//?XmtBuff.p = USBStringDescription1;
; 			   break;
	.dbline 205
; 			case 0x02 :
; 				//?XmtBuff.wrLength = sizeof(USBStringDescription2);
; 				//?XmtBuff.p = USBStringDescription2;
; 			   break;
L74:
	.dbline 207
; 			default   :
; 				void_function();
	rcall _void_function
	.dbline 208
; 				return;
	rjmp L54
X8:
	.dbline 210
; 			}
; 			break;
L56:
	.dbline 212
; 		default :
; 			void_function();
	rcall _void_function
	.dbline 213
; 			return;
	rjmp L54
L57:
	.dbline 215
; 	}
; 	USB_submit();
	rcall _USB_submit
	.dbline -2
	.dbline 216
; }
L54:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbend
	.dbfunc e get_configuration _get_configuration fV
	.even
_get_configuration::
	.dbline -1
	.dbline 219
; 
; void get_configuration(void)
; {
	.dbline 220
; 	XmtBuff.b[0] = 1;//返回是否被配置(非 0 为配置)
	ldi R24,1
	sts _XmtBuff,R24
	.dbline 221
; 	XmtBuff.wrLength = 16;
	ldi R24,16
	sts _XmtBuff+34,R24
	.dbline 222
; 	XmtBuff.p_p=0;
	clr R2
	sts _XmtBuff+39,R2
	.dbline 223
; 	XmtBuff.p = XmtBuff.b;
	ldi R24,<_XmtBuff
	ldi R25,>_XmtBuff
	sts _XmtBuff+37+1,R25
	sts _XmtBuff+37,R24
	.dbline 224
; 	USB_submit();
	.dbline -2
	.dbline 228
; 	///D12_COMMAND = 0x05;
; 	///cwait;
; 	///D12_COMMAND = 0xfa;// 设置 IN 缓冲区有效(满标志)
; }
L81:
	.dbline 0 ; func end
	rjmp _USB_submit
	.dbend
	.dbfunc e set_configuration _set_configuration fV
;              j -> R20
;              u -> R20,R21
	.even
_set_configuration::
	rcall push_gset1
	.dbline -1
	.dbline 231
; 
; void set_configuration(void)
; {
	.dbline 234
; char j;
; int u;
; 	if (XmtBuff.b[0] == 0x00)
	lds R2,_XmtBuff
	tst R2
	brne L86
	.dbline 235
; 	{
	.dbline 236
; 		XmtBuff.wrLength = 0;
	clr R2
	sts _XmtBuff+34,R2
	.dbline 237
; 		USB_submit();
	rcall _USB_submit
	.dbline 238
; 		j = XmtBuff.b[2];
	lds R20,_XmtBuff+2
	.dbline 239
; 		D12_COMMAND = 0xd8;
	ldi R24,216
	sts 32513,R24
	.dbline 240
; 		if(j == 0x00)
	tst R20
	brne L90
	.dbline 241
; 		{
	.dbline 242
; 			D12_DATA = 0x00;  // 停止普通/同步端点
	clr R2
	sts 32512,R2
	.dbline 243
	rjmp L91
L90:
	.dbline 243
; 		}else if(j == 0x01)
	cpi R20,1
	brne L92
	.dbline 244
; 		{
	.dbline 245
; 			D12_DATA = 0x01;  // 使能普通/同步端点
	ldi R24,1
	sts 32512,R24
	.dbline 246
; 			cwait;
	nop
	.dbline 249
; ///			bconfig=1;
; 			
; 			    D12_COMMAND=0x05;
	ldi R24,5
	sts 32513,R24
	.dbline 250
; 				D12_COMMAND=0xf0;
	ldi R24,240
	sts 32513,R24
	.dbline 251
; 				D12_DATA=0;
	clr R2
	sts 32512,R2
	.dbline 252
; 				D12_DATA=64;
	ldi R24,64
	sts 32512,R24
	.dbline 253
; 				for( u=0;u<64;u++)
	clr R20
	clr R21
L94:
	.dbline 254
	sts 32512,R20
L95:
	.dbline 253
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 253
	cpi R20,64
	ldi R30,0
	cpc R21,R30
	brlt L94
	.dbline 255
; 					D12_DATA=u;
; 				D12_COMMAND=0xfa;
	ldi R24,250
	sts 32513,R24
	.dbline 260
; 			//D12_COMMAND = 0x05;
; 			//cwait;
; 			//D12_COMMAND = 0xfa;// 设置 IN 缓冲区有效(满标志)
; 			
; 		}
L92:
L91:
	.dbline 261
; 		csram;
	sts 0xfc01,R22
	.dbline 261
	.dbline 262
;    }
	rjmp L87
L86:
	.dbline 264
	rcall _void_function
L87:
	.dbline -2
	.dbline 265
; 	else
; 		void_function();
; }
L85:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbsym r u 20 I
	.dbend
	.dbfunc e get_interface _get_interface fV
	.even
_get_interface::
	.dbline -1
	.dbline 268
; 
; void get_interface(void)
; {
	.dbline 269
; 	XmtBuff.b[0] = 0;
	clr R2
	sts _XmtBuff,R2
	.dbline 270
; 	XmtBuff.wrLength = 1;
	ldi R24,1
	sts _XmtBuff+34,R24
	.dbline 271
; 	XmtBuff.p_p=0;
	sts _XmtBuff+39,R2
	.dbline 272
; 	XmtBuff.p = XmtBuff.b;
	ldi R24,<_XmtBuff
	ldi R25,>_XmtBuff
	sts _XmtBuff+37+1,R25
	sts _XmtBuff+37,R24
	.dbline 273
; 	USB_submit();
	.dbline -2
	.dbline 274
; }
L98:
	.dbline 0 ; func end
	rjmp _USB_submit
	.dbend
	.dbfunc e set_interface _set_interface fV
	.even
_set_interface::
	.dbline -1
	.dbline 277
; 
; void set_interface(void)
; {
	.dbline 278
; 	XmtBuff.wrLength = 0;
	clr R2
	sts _XmtBuff+34,R2
	.dbline 279
; 	USB_submit();
	.dbline -2
	.dbline 280
; }
L102:
	.dbline 0 ; func end
	rjmp _USB_submit
	.dbend
	.dbfunc e USB_submit _USB_submit fV
;              j -> R16
;              k -> R18
;              i -> R20
	.even
_USB_submit::
	rcall push_gset1
	.dbline -1
	.dbline 283
; 
; void USB_submit(void)
; {
	.dbline 285
; char i,j,k;
; 	if(16>XmtBuff.wrLength)
	lds R2,_XmtBuff+34
	ldi R24,16
	cp R2,R24
	brsh L105
	.dbline 286
; 	{
	.dbline 287
; 		j = XmtBuff.wrLength;
	mov R16,R2
	.dbline 288
; 	}else
	rjmp L106
L105:
	.dbline 289
; 	{
	.dbline 290
; 		j = 16;
	ldi R16,16
	.dbline 291
; 	}
L106:
	.dbline 292
; 	D12_COMMAND = 1;// 选择 IN 端点(指针指向0位置)
	ldi R24,1
	sts 32513,R24
	.dbline 293
; 	cwait;
	nop
	.dbline 294
; 	D12_COMMAND = 0xf0;// 写缓冲区
	ldi R24,240
	sts 32513,R24
	.dbline 295
; 	cwait;
	nop
	.dbline 296
; 	D12_DATA = 0x00;
	clr R2
	sts 32512,R2
	.dbline 297
; 	cwait;
	nop
	.dbline 298
; 	D12_DATA = j;
	sts 32512,R16
	.dbline 299
; 	csram;
	sts 0xfc01,R22
	.dbline 299
	.dbline 300
; 	if(XmtBuff.p_p)
	lds R2,_XmtBuff+39
	tst R2
	breq L109
	.dbline 301
; 	{
	.dbline 302
; 		for(i=0;i<j ;i++)
	clr R20
	rjmp L115
L112:
	.dbline 303
	.dbline 304
	lds R2,_XmtBuff+35
	lds R3,_XmtBuff+35+1
	mov R30,R20
	clr R31
	add R30,R2
	adc R31,R3
	lpm R18,Z
	.dbline 305
	sts 32512,R18
	.dbline 306
	sts 0xfc01,R22
	.dbline 306
	.dbline 307
L113:
	.dbline 302
	inc R20
L115:
	.dbline 302
	cp R20,R16
	brlo L112
	.dbline 308
; 		{
; 			 k = *(XmtBuff.pp+i);
; 			 D12_DATA = k;
; 			 csram;
; 		}
; 		XmtBuff.pp += j;
	lds R2,_XmtBuff+35
	lds R3,_XmtBuff+35+1
	mov R4,R16
	clr R5
	add R4,R2
	adc R5,R3
	sts _XmtBuff+35+1,R5
	sts _XmtBuff+35,R4
	.dbline 309
; 	}else
	rjmp L110
L109:
	.dbline 310
; 	{
	.dbline 311
; 	 	for(i=0;i<j;i++)
	clr R20
	rjmp L121
L118:
	.dbline 312
	.dbline 313
	lds R30,_XmtBuff+37
	lds R31,_XmtBuff+37+1
	ld R18,Z+
	sts _XmtBuff+37+1,R31
	sts _XmtBuff+37,R30
	.dbline 314
	sts 32512,R18
	.dbline 315
	sts 0xfc01,R22
	.dbline 315
	.dbline 316
L119:
	.dbline 311
	inc R20
L121:
	.dbline 311
	cp R20,R16
	brlo L118
	.dbline 317
; 		{
; 			k = *(XmtBuff.p++);
; 			D12_DATA = k;
; 			csram;
; 		}
; 	}
L110:
	.dbline 318
; 	XmtBuff.wrLength -= j;
	lds R2,_XmtBuff+34
	sub R2,R16
	sts _XmtBuff+34,R2
	.dbline 319
; 	D12_COMMAND = 0xfa;// 设置 IN 缓冲区有效(满标志)
	ldi R24,250
	sts 32513,R24
	.dbline 320
; 	csram;
	sts 0xfc01,R22
	.dbline 320
	.dbline -2
	.dbline 321
; }
L104:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r j 16 c
	.dbsym r k 18 c
	.dbsym r i 20 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile G:\Backup\6月1日flag置(认为接近最终)\ilx511_usb\D12_setup.c
_XmtBuff::
	.blkb 40
	.dbstruct 0 40 .1
	.dbfield 0 b A[16:16]c
	.dbfield 16 msg A[16:16]c
	.dbfield 32 msgL c
	.dbfield 33 wendu c
	.dbfield 34 wrLength c
	.dbfield 35 pp pkc
	.dbfield 37 p pc
	.dbfield 39 p_p c
	.dbend
	.dbsym e XmtBuff _XmtBuff S[.1]
	.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 + -