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

📄 avr_usb.lst

📁 D12固件程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
(0145) 			csram;
    0287 9360FC01  STS	0xFC01,R22
(0146) 		}
    0289 C00D      RJMP	0x0297
(0147) 		else
(0148) 		{
(0149) 			j = j & 0x0f;
    028A 704F      ANDI	R20,0xF
(0150) 			j = 0x41+j*2;
    028B E082      LDI	R24,2
    028C 9F84      MUL	R24,R20
    028D 2D40      MOV	R20,R0
    028E 5B4F      SUBI	R20,0xBF
(0151) 			D12_COMMAND = j;// 停止IN端点
    028F 93407F01  STS	0x7F01,R20
(0152) 			cwait;
    0291 0000      NOP
(0153) 			D12_DATA = 0x01;
    0292 E081      LDI	R24,1
    0293 93807F00  STS	0x7F00,R24
(0154) 			csram;
    0295 9360FC01  STS	0xFC01,R22
(0155) 		}
(0156) 		break;
(0157) 	}
(0158) 	XmtBuff.wrLength = 0;
    0297 2422      CLR	R2
    0298 922000BC  STS	0xBC,R2
(0159) 	USB_submit();
    029A D0BD      RCALL	_USB_submit
(0160) }
    029B D245      RCALL	pop_gset1
    029C 9508      RET
_set_address:
  j                    --> R20
    029D D240      RCALL	push_gset1
(0161) void set_address(void)
(0162) {
(0163) char j;
(0164) 	j = 0x80 | XmtBuff.b[2];
    029E 9140009C  LDS	R20,_XmtBuff+2
    02A0 6840      ORI	R20,0x80
(0165) 	D12_COMMAND = 0xd0;//设置新地址使能
    02A1 ED80      LDI	R24,0xD0
    02A2 93807F01  STS	0x7F01,R24
(0166) 	cwait;
    02A4 0000      NOP
(0167) 	D12_DATA = j;
    02A5 93407F00  STS	0x7F00,R20
(0168) 	csram;
    02A7 9360FC01  STS	0xFC01,R22
(0169) 	XmtBuff.wrLength = 0;
    02A9 2422      CLR	R2
    02AA 922000BC  STS	0xBC,R2
(0170) 	USB_submit();
    02AC D0AB      RCALL	_USB_submit
(0171) }
    02AD D233      RCALL	pop_gset1
    02AE 9508      RET
_get_descriptor:
  i                    --> R20
    02AF D22E      RCALL	push_gset1
(0172) 
(0173) void get_descriptor(void)
(0174) {
(0175) 	unsigned int i;
(0176) 	XmtBuff.p_p=1;
    02B0 E081      LDI	R24,1
    02B1 938000C1  STS	0xC1,R24
(0177) 	switch (XmtBuff.b[3])
    02B3 9140009D  LDS	R20,_XmtBuff+3
    02B5 2755      CLR	R21
    02B6 3041      CPI	R20,1
    02B7 E0E0      LDI	R30,0
    02B8 075E      CPC	R21,R30
    02B9 F049      BEQ	0x02C3
    02BA 3042      CPI	R20,2
    02BB E0E0      LDI	R30,0
    02BC 075E      CPC	R21,R30
    02BD F079      BEQ	0x02CD
    02BE 3043      CPI	R20,3
    02BF E0E0      LDI	R30,0
    02C0 075E      CPC	R21,R30
    02C1 F121      BEQ	0x02E6
    02C2 C034      RJMP	0x02F7
(0178) 	{
(0179) 		case 0x01: //USB_DEVICE
(0180) 			XmtBuff.pp = device_descriptor;
    02C3 E28E      LDI	R24,0x2E
    02C4 E090      LDI	R25,0
    02C5 939000BE  STS	0xBE,R25
    02C7 938000BD  STS	0xBD,R24
(0181) 			XmtBuff.wrLength = sizeof(device_descriptor);
    02C9 E182      LDI	R24,0x12
    02CA 938000BC  STS	0xBC,R24
(0182) 			break;
    02CC C02C      RJMP	0x02F9
(0183) 		case 0x02:// USB_CONFIGURATION
(0184) 			i = XmtBuff.b[7];
    02CD 914000A1  LDS	R20,0xA1
    02CF 2755      CLR	R21
(0185) 			i = ((i<<8) | XmtBuff.b[6]);
    02D0 902000A0  LDS	R2,0xA0
    02D2 2F54      MOV	R21,R20
    02D3 2D42      MOV	R20,R2
(0186) 			XmtBuff.pp = Configuration_Descriptor;
    02D4 E480      LDI	R24,0x40
    02D5 E090      LDI	R25,0
    02D6 939000BE  STS	0xBE,R25
    02D8 938000BD  STS	0xBD,R24
(0187) 			XmtBuff.wrLength = *(XmtBuff.pp+2);
    02DA 01FC      MOVW	R30,R24
    02DB 9632      ADIW	R30,2
    02DC 91E4      LPM	R30,0(Z)
    02DD 93E000BC  STS	0xBC,R30
(0188) 			if(i<16)
    02DF 3140      CPI	R20,0x10
    02E0 E0E0      LDI	R30,0
    02E1 075E      CPC	R21,R30
    02E2 F4B0      BCC	0x02F9
(0189) 				  XmtBuff.wrLength = XmtBuff.b[6];
    02E3 922000BC  STS	0xBC,R2
(0190) 			break;
    02E5 C013      RJMP	0x02F9
(0191) 		case 0x03: //USB_STRING
(0192) 			switch(XmtBuff.b[2])
    02E6 9140009C  LDS	R20,_XmtBuff+2
    02E8 2755      CLR	R21
    02E9 3040      CPI	R20,0
    02EA 0745      CPC	R20,R21
    02EB F069      BEQ	0x02F9
    02EC 3041      CPI	R20,1
    02ED E0E0      LDI	R30,0
    02EE 075E      CPC	R21,R30
    02EF F049      BEQ	0x02F9
    02F0 3042      CPI	R20,2
    02F1 E0E0      LDI	R30,0
    02F2 075E      CPC	R21,R30
    02F3 F029      BEQ	0x02F9
    02F4 C000      RJMP	0x02F5
(0193) 			{
(0194) 			case 0x00 :
(0195) 				//?XmtBuff.wrLength = sizeof(USBStringLanguageDescription);
(0196) 				//?XmtBuff.p = USBStringLanguageDescription;
(0197) 				break;
(0198) 			case 0x01 :
(0199) 				//?XmtBuff.wrLength = sizeof(USBStringDescription1);
(0200) 				//?XmtBuff.p = USBStringDescription1;
(0201) 			   break;
(0202) 			case 0x02 :
(0203) 				//?XmtBuff.wrLength = sizeof(USBStringDescription2);
(0204) 				//?XmtBuff.p = USBStringDescription2;
(0205) 			   break;
(0206) 			default   :
(0207) 				void_function();
    02F5 DEFD      RCALL	_void_function
(0208) 				return;
    02F6 C003      RJMP	0x02FA
(0209) 			}
(0210) 			break;
(0211) 		default :
(0212) 			void_function();
    02F7 DEFB      RCALL	_void_function
(0213) 			return;
    02F8 C001      RJMP	0x02FA
(0214) 	}
(0215) 	USB_submit();
    02F9 D05E      RCALL	_USB_submit
(0216) }
    02FA D1E6      RCALL	pop_gset1
    02FB 9508      RET
(0217) 
(0218) void get_configuration(void)
(0219) {
(0220) 	XmtBuff.b[0] = 1;//返回是否被配置(非 0 为配置)
_get_configuration:
    02FC E081      LDI	R24,1
    02FD 9380009A  STS	_XmtBuff,R24
(0221) 	XmtBuff.wrLength = 16;
    02FF E180      LDI	R24,0x10
    0300 938000BC  STS	0xBC,R24
(0222) 	XmtBuff.p_p=0;
    0302 2422      CLR	R2
    0303 922000C1  STS	0xC1,R2
(0223) 	XmtBuff.p = XmtBuff.b;
    0305 E98A      LDI	R24,0x9A
    0306 E090      LDI	R25,0
    0307 939000C0  STS	0xC0,R25
    0309 938000BF  STS	0xBF,R24
(0224) 	USB_submit();
(0225) 	///D12_COMMAND = 0x05;
(0226) 	///cwait;
(0227) 	///D12_COMMAND = 0xfa;// 设置 IN 缓冲区有效(满标志)
(0228) }
    030B C04C      RJMP	_USB_submit
_set_configuration:
  j                    --> R20
  u                    --> R20
    030C D1D1      RCALL	push_gset1
(0229) 
(0230) void set_configuration(void)
(0231) {
(0232) char j;
(0233) int u;
(0234) 	if (XmtBuff.b[0] == 0x00)
    030D 9020009A  LDS	R2,_XmtBuff
    030F 2022      TST	R2
    0310 F589      BNE	0x0342
(0235) 	{
(0236) 		XmtBuff.wrLength = 0;
    0311 2422      CLR	R2
    0312 922000BC  STS	0xBC,R2
(0237) 		USB_submit();
    0314 D043      RCALL	_USB_submit
(0238) 		j = XmtBuff.b[2];
    0315 9140009C  LDS	R20,_XmtBuff+2
(0239) 		D12_COMMAND = 0xd8;
    0317 ED88      LDI	R24,0xD8
    0318 93807F01  STS	0x7F01,R24
(0240) 		if(j == 0x00)
    031A 2344      TST	R20
    031B F421      BNE	0x0320
(0241) 		{
(0242) 			D12_DATA = 0x00;  // 停止普通/同步端点
    031C 2422      CLR	R2
    031D 92207F00  STS	0x7F00,R2
(0243) 		}else if(j == 0x01)
    031F C01F      RJMP	0x033F
    0320 3041      CPI	R20,1
    0321 F4E9      BNE	0x033F
(0244) 		{
(0245) 			D12_DATA = 0x01;  // 使能普通/同步端点
    0322 E081      LDI	R24,1
    0323 93807F00  STS	0x7F00,R24
(0246) 			cwait;
    0325 0000      NOP
(0247) ///			bconfig=1;
(0248) 			
(0249) 			    D12_COMMAND=0x05;
    0326 E085      LDI	R24,5
    0327 93807F01  STS	0x7F01,R24
(0250) 				D12_COMMAND=0xf0;
    0329 EF80      LDI	R24,0xF0
    032A 93807F01  STS	0x7F01,R24
(0251) 				D12_DATA=0;
    032C 2422      CLR	R2
    032D 92207F00  STS	0x7F00,R2
(0252) 				D12_DATA=64;
    032F E480      LDI	R24,0x40
    0330 93807F00  STS	0x7F00,R24
(0253) 				for( u=0;u<64;u++)
    0332 2744      CLR	R20
    0333 2755      CLR	R21
(0254) 					D12_DATA=u;
    0334 93407F00  STS	0x7F00,R20
    0336 5F4F      SUBI	R20,0xFF
    0337 4F5F      SBCI	R21,0xFF
    0338 3440      CPI	R20,0x40
    0339 E0E0      LDI	R30,0
    033A 075E      CPC	R21,R30
    033B F3C4      BLT	0x0334
(0255) 				D12_COMMAND=0xfa;
    033C EF8A      LDI	R24,0xFA
    033D 93807F01  STS	0x7F01,R24
(0256) 			//D12_COMMAND = 0x05;
(0257) 			//cwait;
(0258) 			//D12_COMMAND = 0xfa;// 设置 IN 缓冲区有效(满标志)
(0259) 			
(0260) 		}
(0261) 		csram;
    033F 9360FC01  STS	0xFC01,R22
(0262)    }
    0341 C001      RJMP	0x0343
(0263) 	else
(0264) 		void_function();
    0342 DEB0      RCALL	_void_function
(0265) }
    0343 D19D      RCALL	pop_gset1
    0344 9508      RET
(0266) 
(0267) void get_interface(void)
(0268) {
(0269) 	XmtBuff.b[0] = 0;
_get_interface:
    0345 2422      CLR	R2
    0346 9220009A  STS	_XmtBuff,R2
(0270) 	XmtBuff.wrLength = 1;
    0348 E081      LDI	R24,1
    0349 938000BC  STS	0xBC,R24
(0271) 	XmtBuff.p_p=0;
    034B 922000C1  STS	0xC1,R2
(0272) 	XmtBuff.p = XmtBuff.b;
    034D E98A      LDI	R24,0x9A
    034E E090      LDI	R25,0
    034F 939000C0  STS	0xC0,R25
    0351 938000BF  STS	0xBF,R24
(0273) 	USB_submit();
(0274) }
    0353 C004      RJMP	_USB_submit
(0275) 
(0276) void set_interface(void)
(0277) {
(0278) 	XmtBuff.wrLength = 0;
_set_interface:
    0354 2422      CLR	R2
    0355 922000BC  STS	0xBC,R2
(0279) 	USB_submit();
(0280) }
    0357 C000      RJMP	_USB_submit
    0358 D185      RCALL	push_gset1
(0281) 
(0282) void USB_submit(void)
(0283) {
(0284) char i,j,k;
(0285) 	if(16>XmtBuff.wrLength)
    0359 902000BC  LDS	R2,0xBC
    035B E180      LDI	R24,0x10
    035C 1628      CP	R2,R24
    035D F410      BCC	0x0360
(0286) 	{
(0287) 		j = XmtBuff.wrLength;
    035E 2D02      MOV	R16,R2
(0288) 	}else
    035F C001      RJMP	0x0361
(0289) 	{
(0290) 		j = 16;
    0360 E100      LDI	R16,0x10
(0291) 	}
(0292) 	D12_COMMAND = 1;// 选择 IN 端点(指针指向0位置)
    0361 E081      LDI	R24,1
    0362 93807F01  STS	0x7F01,R24
(0293) 	cwait;
    0364 0000      NOP
(0294) 	D12_COMMAND = 0xf0;// 写缓冲区
    0365 EF80      LDI	R24,0xF0
    0366 93807F01  STS	0x7F01,R24
(0295) 	cwait;
    0368 0000      NOP
(0296) 	D12_DATA = 0x00;
    0369 2422      CLR	R2
    036A 92207F00  STS	0x7F00,R2
(0297) 	cwait;
    036C 0000      NOP
(0298) 	D12_DATA = j;
    036D 93007F00  STS	0x7F00,R16
(0299) 	csram;
    036F 9360FC01  STS	0xFC01,R22
(0300) 	if(XmtBuff.p_p)
    0371 902000C1  LDS	R2,0xC1
    0373 2022      TST	R2
    0374 F0F9      BEQ	0x0394
(0301) 	{
(0302) 		for(i=0;i<j ;i++)
    0375 2744      CLR	R20
    0376 C00E      RJMP	0x0385
(0303) 		{
(0304) 			 k = *(XmtBuff.pp+i);
    0377 902000BD  LDS	R2,0xBD
    0379 903000BE  LDS	R3,0xBE
    037B 2FE4      MOV	R30,R20
    037C 27FF      CLR	R31
    037D 0DE2      ADD	R30,R2
    037E 1DF3      ADC	R31,R3
    037F 9124      LPM	R18,0(Z)
(0305) 			 D12_DATA = k;
    0380 93207F00  STS	0x7F00,R18
(0306) 			 csram;
    0382 9360FC01  STS	0xFC01,R22
    0384 9543      INC	R20
    0385 1740      CP	R20,R16
    0386 F380      BCS	0x0377
(0307) 		}
(0308) 		XmtBuff.pp += j;
    0387 902000BD  LDS	R2,0xBD
    0389 903000BE  LDS	R3,0xBE
    038B 2E40      MOV	R4,R16
    038C 2455      CLR	R5
    038D 0C42      ADD	R4,R2
    038E 1C53      ADC	R5,R3
    038F 925000BE  STS	0xBE,R5
    0391 924000BD  STS	0xBD,R4
(0309) 	}else
    0393 C012      RJMP	0x03A6
(0310) 	{
(0311) 	 	for(i=0;i<j;i++)
    0394 2744      CLR	R20
    0395 C00E      RJMP	0x03A4
(0312) 		{
(0313) 			k = *(XmtBuff.p++);
    0396 91E000BF  LDS	R30,0xBF
    0398 91F000C0  LDS	R31,0xC0
    039A 9121      LD	R18,Z+
    039B 93F000C0  STS	0xC0,R31
    039D 93E000BF  STS	0xBF,R30
(0314) 			D12_DATA = k;
    039F 93207F00  STS	0x7F00,R18
(0315) 			csram;
    03A1 9360FC01  STS	0xFC01,R22
    03A3 9543      INC	R20
    03A4 1740      CP	R20,R16
    03A5 F380      BCS	0x0396
(0316) 		}
(0317) 	}
(0318) 	XmtBuff.wrLength -= j;
    03A6 902000BC  LDS	R2,0xBC
    03A8 1A20      SUB	R2,R16
    03A9 922000BC  STS	0xBC,R2
(0319) 	D12_COMMAND = 0xfa;// 设置 IN 缓冲区有效(满标志)
    03AB EF8A      LDI	R24,0xFA
    03AC 93807F01  STS	0x7F01,R24
(0320) 	csram;
    03AE 9360FC01  STS	0xFC01,R22
(0321) }
    03B0 D130      RCALL	pop_gset1
    03B1 9508      RET
_D12_int:
  k                    --> Y+1
  c                    --> Y+1
  j                    --> R22
  i                    --> R20
    03B2 D142      RCALL	push_gset2
FILE: G:\Backup\6月1日flag置(认为接近最终)\ilx511_usb\D12-AVR.c
(0001) #include "io8515v.h"
(0002) #include "d12head.h"
(0003) 
(0004) unsigned int Rshu[3];
(0005) int q=0;
(0006) //#define D12_suspend (PINB & 0x01)
(0007) 
(0008) void D12_int(void)
(0009) {
(0010) 	unsigned char i=0,j,c,*k;//三个变量,一个指针
    03B3 2744      CLR	R20
(0011) 	
(0012) 	SREG = 0x00;//全局中断使能
    03B4 2422      CLR	R2
    03B5 BE2F      OUT	0x3F,R2
(0013) 	
(0014) 	D12_COMMAND = 0xf4; // 读中断寄存器
    03B6 EF84      LDI	R24,0xF4
    03B7 93807F01  STS	0x7F01,R24
(0015) 	cwait1;

⌨️ 快捷键说明

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