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

📄 avr_usb.lst

📁 D12固件程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
    015C E082      LDI	R24,2
    015D 93800063  STS	0x63,R24
(0087) 					Pixel_Count=0x00;
    015F 2422      CLR	R2
    0160 2433      CLR	R3
    0161 92300065  STS	0x65,R3
    0163 92200064  STS	0x64,R2
(0088) 					for(i=0;i<60;i++)
    0165 2700      CLR	R16
    0166 C004      RJMP	0x016B
(0089) 					{
(0090) 						D12_DATA=0x00;
    0167 2422      CLR	R2
    0168 92207F00  STS	0x7F00,R2
    016A 9503      INC	R16
    016B 330C      CPI	R16,0x3C
    016C F3D0      BCS	0x0167
(0091) 					}
(0092) 					break;
    016D C01E      RJMP	0x018C
    016E 9503      INC	R16
    016F 3400      CPI	R16,0x40
    0170 F2D0      BCS	0x014B
(0093) 				}
(0094) 			}					
(0095) 		}
    0171 C01A      RJMP	0x018C
(0096) 		else if (Fifo2_Flag==0x02)
    0172 91800063  LDS	R24,0x63
    0174 3082      CPI	R24,2
    0175 F4B1      BNE	0x018C
(0097) 		{
(0098) 			for(i=0;i<64;i++)
    0176 2700      CLR	R16
    0177 C004      RJMP	0x017C
(0099) 			{
(0100) 				D12_DATA=0x00;	
    0178 2422      CLR	R2
    0179 92207F00  STS	0x7F00,R2
    017B 9503      INC	R16
    017C 3400      CPI	R16,0x40
    017D F3D0      BCS	0x0178
(0101) 			}			
(0102) 		}				
(0103) 	}
    017E C00D      RJMP	0x018C
(0104) 	else//
(0105) 	{	
(0106) 		Fifo1_Flag=0x00;
    017F 2422      CLR	R2
    0180 92200062  STS	0x62,R2
(0107) 		Fifo2_Flag=0x00;	
    0182 92200063  STS	0x63,R2
(0108) 		for(i=0;i<64;i++)
    0184 2700      CLR	R16
    0185 C004      RJMP	0x018A
(0109) 		{
(0110) 			D12_DATA=0x00;	
    0186 2422      CLR	R2
    0187 92207F00  STS	0x7F00,R2
    0189 9503      INC	R16
    018A 3400      CPI	R16,0x40
    018B F3D0      BCS	0x0186
(0111) 		}		
(0112) 	}
(0113) 	
(0114) 	D12_COMMAND = 0xfa;		// 设置 IN 缓冲区有效(满标志)
    018C EF8A      LDI	R24,0xFA
    018D 93807F01  STS	0x7F01,R24
(0115) 	
(0116) 	
(0117) }
    018F 9508      RET
(0118) 
(0119) /** /
(0120) 读取FLASH ID
(0121) 返回0xec 0x75
(0122) /**/
(0123) void flashID(void)
(0124) {
(0125) 	char i;
(0126) 	fCOMMAND = 0x90;
_flashID:
  i                    --> R16
    0190 E980      LDI	R24,0x90
    0191 9380A000  STS	0xA000,R24
(0127) 	fADD = 0x00;
    0193 2422      CLR	R2
    0194 92209000  STS	0x9000,R2
(0128) 	i = fDATA;
    0196 91008000  LDS	R16,0x8000
(0129) 	XmtBuff.msg[0] = i;
    0198 930000AA  STS	0xAA,R16
(0130) 	i = fDATA;
    019A 91008000  LDS	R16,0x8000
(0131) 	XmtBuff.msg[1] = i;
    019C 930000AB  STS	0xAB,R16
(0132) 	XmtBuff.msgL = 2;
    019E E082      LDI	R24,2
    019F 938000BA  STS	0xBA,R24
(0133) 	csram;
    01A1 9360FC01  STS	0xFC01,R22
(0134) }
    01A3 9508      RET
_Setup_control:
  p                    --> R10
  j                    --> R22
  i                    --> R20
    01A4 D353      RCALL	push_gset3
FILE: G:\Backup\6月1日flag置(认为接近最终)\ilx511_usb\D12_setup.c
(0001) #include "io8515v.h"
(0002) #include "d12head.h"
(0003) #include "d12setup.h"
(0004) 
(0005) TRANSMIT_STRUCT XmtBuff;
(0006) ///int bconfig;
(0007) 
(0008) void Setup_control(void)
(0009) {
(0010) 	char i,j,*p;
(0011) 	D12_COMMAND = 0x00;// 选择端点0(指针指向0位置)
    01A5 2422      CLR	R2
    01A6 92207F01  STS	0x7F01,R2
(0012) 	cwait;
    01A8 0000      NOP
(0013) 	D12_COMMAND = 0xf0;// 读标准控制码
    01A9 EF80      LDI	R24,0xF0
    01AA 93807F01  STS	0x7F01,R24
(0014) 	cwait1;
    01AC 0000      NOP
    01AD 0000      NOP
(0015) 	i = D12_DATA;
    01AE 91407F00  LDS	R20,0x7F00
(0016) 	cwait1;
    01B0 0000      NOP
    01B1 0000      NOP
(0017) 	i = D12_DATA;//长度
    01B2 91407F00  LDS	R20,0x7F00
(0018) 	cwait1;
    01B4 0000      NOP
    01B5 0000      NOP
(0019) 	j = D12_DATA;
    01B6 91607F00  LDS	R22,0x7F00
(0020) 	csram;
    01B8 9360FC01  STS	0xFC01,R22
(0021) 	p = XmtBuff.b;
    01BA E9EA      LDI	R30,0x9A
    01BB E0F0      LDI	R31,0
(0022) 	*(p++) = j;
    01BC 9361      ST	R22,Z+
    01BD 015F      MOVW	R10,R30
(0023) 	for(i=0;i<7;i++)
    01BE 2744      CLR	R20
    01BF C006      RJMP	0x01C6
(0024) 	{
(0025) 	   j = D12_DATA;
    01C0 91607F00  LDS	R22,0x7F00
(0026) 	   csram;
    01C2 9360FC01  STS	0xFC01,R22
(0027) 	   asm("st Z+,%j");
    01C4 9361      ST	R22,Z+
    01C5 9543      INC	R20
    01C6 3047      CPI	R20,7
    01C7 F3C0      BCS	0x01C0
(0028) 	}
(0029) 	D12_COMMAND = 0x01;// 选择端点 1(指针指向0位置)
    01C8 E081      LDI	R24,1
    01C9 93807F01  STS	0x7F01,R24
(0030) 	cwait;
    01CB 0000      NOP
(0031) 	D12_COMMAND = 0xf1;// 应答SETUP包,使能(清 OUT 缓冲区、使能 IN 缓冲区)命令
    01CC EF81      LDI	R24,0xF1
    01CD 93807F01  STS	0x7F01,R24
(0032) 	csram;
    01CF 9360FC01  STS	0xFC01,R22
(0033) 	i = XmtBuff.b[1];
    01D1 9140009B  LDS	R20,_XmtBuff+1
(0034) 	if(XmtBuff.b[0] & 0x40)//厂商请求跳转表
    01D3 9020009A  LDS	R2,_XmtBuff
    01D5 FE26      SBRS	R2,6
    01D6 C001      RJMP	0x01D8
(0035) 	{
(0036) 	   //if (i <= 0x0f)
(0037) 	   {
(0038) 		   //(*VendorDeviceRequest[i])();
(0039) 	   }
(0040) 	}
    01D7 C00E      RJMP	0x01E6
(0041) 	else
(0042) 	{
(0043) 	   if (i <= 0x0B)//标准请求跳转表
    01D8 E08B      LDI	R24,0xB
    01D9 1784      CP	R24,R20
    01DA F058      BCS	0x01E6
(0044) 	   {
(0045) 		   (*StandardDeviceRequest[i])();
    01DB E082      LDI	R24,2
    01DC 9F84      MUL	R24,R20
    01DD 01F0      MOVW	R30,R0
    01DE E686      LDI	R24,0x66
    01DF E090      LDI	R25,0
    01E0 0FE8      ADD	R30,R24
    01E1 1FF9      ADC	R31,R25
    01E2 81A0      LDD	R26,Z+0
    01E3 81B1      LDD	R27,Z+1
    01E4 01FD      MOVW	R30,R26
    01E5 D315      RCALL	xicall
(0046) 	  }
(0047) 	}
(0048) 	D12_COMMAND = 0x00;// 选择端点0(指针指向0位置)
    01E6 2422      CLR	R2
    01E7 92207F01  STS	0x7F01,R2
(0049) 	cwait;
    01E9 0000      NOP
(0050) 	D12_COMMAND = 0xf1;// 应答SETUP包,使能(清 OUT 缓冲区、使能 IN 缓冲区)命令
    01EA EF81      LDI	R24,0xF1
    01EB 93807F01  STS	0x7F01,R24
(0051) 	cwait;
    01ED 0000      NOP
(0052) 	D12_COMMAND = 0xf2;// 清 OUT 缓冲区
    01EE EF82      LDI	R24,0xF2
    01EF 93807F01  STS	0x7F01,R24
(0053) }
    01F1 D2EA      RCALL	pop_gset3
    01F2 9508      RET
(0054) 
(0055) void void_function(void)
(0056) {
(0057) 	D12_COMMAND = 0x40;// 0 端点停止(用于发送Stall包)
_void_function:
    01F3 E480      LDI	R24,0x40
    01F4 93807F01  STS	0x7F01,R24
(0058) 	cwait;
    01F6 0000      NOP
(0059) 	D12_DATA = 0x01;
    01F7 E081      LDI	R24,1
    01F8 93807F00  STS	0x7F00,R24
(0060) 	cwait;
    01FA 0000      NOP
(0061) 	D12_COMMAND = 0x41;// 1 端点停止(用于发送Stall包)
    01FB E481      LDI	R24,0x41
    01FC 93807F01  STS	0x7F01,R24
(0062) 	cwait;
    01FE 0000      NOP
(0063) 	D12_DATA = 0x01;
    01FF E081      LDI	R24,1
    0200 93807F00  STS	0x7F00,R24
(0064) 	cwait;
    0202 0000      NOP
(0065) 	D12_COMMAND = 0xf1;// 应答SETUP包,使能(清 OUT 缓冲区、使能 IN 缓冲区)命令
    0203 EF81      LDI	R24,0xF1
    0204 93807F01  STS	0x7F01,R24
(0066) 	csram;
    0206 9360FC01  STS	0xFC01,R22
(0067) }
    0208 9508      RET
_get_status:
    0209 D2D4      RCALL	push_gset1
(0068) 
(0069) void get_status(void)
(0070) {
(0071) 	XmtBuff.b[1] = 0x00;
    020A 2422      CLR	R2
    020B 9220009B  STS	_XmtBuff+1,R2
(0072) 	switch (XmtBuff.b[0])
    020D 9140009A  LDS	R20,_XmtBuff
    020F 2755      CLR	R21
    0210 3840      CPI	R20,0x80
    0211 E0E0      LDI	R30,0
    0212 075E      CPC	R21,R30
    0213 F049      BEQ	0x021D
    0214 3841      CPI	R20,0x81
    0215 E0E0      LDI	R30,0
    0216 075E      CPC	R21,R30
    0217 F049      BEQ	0x0221
    0218 3842      CPI	R20,0x82
    0219 E0E0      LDI	R30,0
    021A 075E      CPC	R21,R30
    021B F049      BEQ	0x0225
    021C C00B      RJMP	0x0228
(0073) 	{
(0074) 	case 0x80://返回设备状态
(0075) 			  //发送两个字节数据:第一字节D1为1支持远程唤醒,D0为0是总线供电,其它位为0;第二字节为0。
(0076) 		XmtBuff.b[0] = 0x03;
    021D E083      LDI	R24,3
    021E 9380009A  STS	_XmtBuff,R24
(0077) 		break;
    0220 C007      RJMP	0x0228
(0078) 	case 0x81://返回接口状态
(0079) 		//发送两个字节数据:第一字节为0;第二字节为0。
(0080) 		//XmtBuff.b[5] 为接口号
(0081) 		XmtBuff.b[0] = 0x00;
    0221 2422      CLR	R2
    0222 9220009A  STS	_XmtBuff,R2
(0082) 		break;
    0224 C003      RJMP	0x0228
(0083) 	case 0x82://返回端点状态
(0084) 		//发送两个字节数据:第一字节D0为1端点处于暂停,否则D0为0,其它位为0;第二字节为0。
(0085) 		//XmtBuff.b[5] D7为方向,D3~0为端点号
(0086) 		XmtBuff.b[0] = 0x00;
    0225 2422      CLR	R2
    0226 9220009A  STS	_XmtBuff,R2
(0087) 		break;
(0088) 	}
(0089) 	XmtBuff.p_p=0;
    0228 2422      CLR	R2
    0229 922000C1  STS	0xC1,R2
(0090) 	XmtBuff.wrLength = 2;
    022B E082      LDI	R24,2
    022C 938000BC  STS	0xBC,R24
(0091) 	XmtBuff.p = XmtBuff.b;
    022E E98A      LDI	R24,0x9A
    022F E090      LDI	R25,0
    0230 939000C0  STS	0xC0,R25
    0232 938000BF  STS	0xBF,R24
(0092) 	USB_submit();
    0234 D123      RCALL	_USB_submit
(0093) }
    0235 D2AB      RCALL	pop_gset1
    0236 9508      RET
_clear_feature:
  j                    --> R20
    0237 D2A6      RCALL	push_gset1
(0094) 
(0095) void clear_feature(void)
(0096) {
(0097) char j;
(0098) 	switch (XmtBuff.b[0])
    0238 9140009A  LDS	R20,_XmtBuff
    023A 2755      CLR	R21
    023B 3040      CPI	R20,0
    023C 0745      CPC	R20,R21
    023D F129      BEQ	0x0263
    023E 3041      CPI	R20,1
    023F E0E0      LDI	R30,0
    0240 075E      CPC	R21,R30
    0241 F109      BEQ	0x0263
    0242 3042      CPI	R20,2
    0243 E0E0      LDI	R30,0
    0244 075E      CPC	R21,R30
    0245 F009      BEQ	0x0247
    0246 C01C      RJMP	0x0263
(0099) 	{
(0100) 	case 0x00://清设备唤醒功能
(0101) 		break;
(0102) 	case 0x01://清接口状态
(0103) 		break;
(0104) 	case 0x02://启用端点
(0105) 		//XmtBuff.b[5] D7为方向,D3~0为端点号
(0106) 		j = XmtBuff.b[5];
    0247 9140009F  LDS	R20,0x9F
(0107) 		if(j<0x80)
    0249 3840      CPI	R20,0x80
    024A F460      BCC	0x0257
(0108) 		{
(0109) 			j = 0x40+j*2;
    024B E082      LDI	R24,2
    024C 9F84      MUL	R24,R20
    024D 2D40      MOV	R20,R0
    024E 5C40      SUBI	R20,0xC0
(0110) 			D12_COMMAND = j;// 启用OUT端点
    024F 93407F01  STS	0x7F01,R20
(0111) 			D12_DATA = 0x00;
    0251 2422      CLR	R2
    0252 92207F00  STS	0x7F00,R2
(0112) 			csram;
    0254 9360FC01  STS	0xFC01,R22
(0113) 		}
    0256 C00C      RJMP	0x0263
(0114) 		else
(0115) 		{
(0116) 			j = (j & 0x0f);
    0257 704F      ANDI	R20,0xF
(0117) 			D12_COMMAND = 0x41+j*2;// 启用IN端点
    0258 E082      LDI	R24,2
    0259 9F84      MUL	R24,R20
    025A 2D80      MOV	R24,R0
    025B 5B8F      SUBI	R24,0xBF
    025C 93807F01  STS	0x7F01,R24
(0118) 			D12_DATA = 0x00;
    025E 2422      CLR	R2
    025F 92207F00  STS	0x7F00,R2
(0119) 			csram;
    0261 9360FC01  STS	0xFC01,R22
(0120) 		}
(0121) 		break;
(0122) 	}
(0123) 	XmtBuff.wrLength = 0;
    0263 2422      CLR	R2
    0264 922000BC  STS	0xBC,R2
(0124) 	USB_submit();
    0266 D0F1      RCALL	_USB_submit
(0125) }
    0267 D279      RCALL	pop_gset1
    0268 9508      RET
_set_feature:
  j                    --> R20
    0269 D274      RCALL	push_gset1
(0126) 
(0127) void set_feature(void)
(0128) {
(0129) char j;
(0130) 	switch (XmtBuff.b[0])
    026A 9140009A  LDS	R20,_XmtBuff
    026C 2755      CLR	R21
    026D 3040      CPI	R20,0
    026E 0745      CPC	R20,R21
    026F F139      BEQ	0x0297
    0270 3041      CPI	R20,1
    0271 E0E0      LDI	R30,0
    0272 075E      CPC	R21,R30
    0273 F119      BEQ	0x0297
    0274 3042      CPI	R20,2
    0275 E0E0      LDI	R30,0
    0276 075E      CPC	R21,R30
    0277 F009      BEQ	0x0279
    0278 C01E      RJMP	0x0297
(0131) 	{
(0132) 	case 0x00://设置设备唤醒功能
(0133) 		break;
(0134) 	case 0x01://设置接口状态
(0135) 		break;
(0136) 	case 0x02://停止端点
(0137) 		//XmtBuff.b[5] D7为方向,D3~0为端点号
(0138) 		j = XmtBuff.b[5];
    0279 9140009F  LDS	R20,0x9F
(0139) 		if(j<0x80)
    027B 3840      CPI	R20,0x80
    027C F468      BCC	0x028A
(0140) 		{
(0141) 			j = 0x40+j * 2;
    027D E082      LDI	R24,2
    027E 9F84      MUL	R24,R20
    027F 2D40      MOV	R20,R0
    0280 5C40      SUBI	R20,0xC0
(0142) 			D12_COMMAND = j;// 停止OUT端点
    0281 93407F01  STS	0x7F01,R20
(0143) 			cwait;
    0283 0000      NOP
(0144) 			D12_DATA = 0x01;
    0284 E081      LDI	R24,1
    0285 93807F00  STS	0x7F00,R24

⌨️ 快捷键说明

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