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

📄 avr_usb.lst

📁 D12固件程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
    03B9 0000      NOP
    03BA 0000      NOP
(0016) 	i=D12_DATA;
    03BB 91407F00  LDS	R20,0x7F00
(0017) 	csram;
    03BD 9360FC01  STS	0xFC01,R22
(0018) 	if(i & 0x01)	//ENDP0_OUT
    03BF FF40      SBRS	R20,0
    03C0 C00D      RJMP	0x03CE
(0019) 	{
(0020) 		D12_COMMAND = 0x40; //读 OUT 最后状态
    03C1 E480      LDI	R24,0x40
    03C2 93807F01  STS	0x7F01,R24
(0021) 		cwait1;
    03C4 0000      NOP
    03C5 0000      NOP
(0022) 		i= D12_DATA;
    03C6 91407F00  LDS	R20,0x7F00
(0023) 		csram;
    03C8 9360FC01  STS	0xFC01,R22
(0024) 		if (i & 0x20) //收到 SETUP 包
    03CA FF45      SBRS	R20,5
    03CB C07D      RJMP	0x0449
(0025) 		{
(0026) 			Setup_control();
    03CC DDD7      RCALL	_Setup_control
(0027) 		}
(0028) 	}
    03CD C07B      RJMP	0x0449
(0029) 	else if(i & 0x02) //ENDP0_IN
    03CE FF41      SBRS	R20,1
    03CF C00B      RJMP	0x03DB
(0030) 	{	
(0031) 		D12_COMMAND = 0x41;//读 in 最后状态
    03D0 E481      LDI	R24,0x41
    03D1 93807F01  STS	0x7F01,R24
(0032) 		cwait1;
    03D3 0000      NOP
    03D4 0000      NOP
(0033) 		i = D12_DATA;
    03D5 91407F00  LDS	R20,0x7F00
(0034) 		csram;
    03D7 9360FC01  STS	0xFC01,R22
(0035) 		USB_submit();
    03D9 DF7E      RCALL	_USB_submit
(0036) 	}
    03DA C06E      RJMP	0x0449
(0037) 	else if(i & 0x04)//ENDP1_OUT
    03DB FF42      SBRS	R20,2
    03DC C00E      RJMP	0x03EB
(0038) 	{	
(0039) 		D12_COMMAND = 0x42;//读 out 最后状态
    03DD E482      LDI	R24,0x42
    03DE 93807F01  STS	0x7F01,R24
(0040) 		cwait;
    03E0 0000      NOP
(0041) 		i = D12_DATA;
    03E1 91407F00  LDS	R20,0x7F00
(0042) 		csram;
    03E3 9360FC01  STS	0xFC01,R22
(0043) 	    ReadEndpoint1(3,Rshu);
    03E5 EC22      LDI	R18,0xC2
    03E6 E030      LDI	R19,0
    03E7 E003      LDI	R16,3
    03E8 E010      LDI	R17,0
    03E9 D065      RCALL	_ReadEndpoint1
(0044) 		
(0045) 	}
    03EA C05E      RJMP	0x0449
(0046) 	else if(i & 0x08)//ENDP1_IN
    03EB FF43      SBRS	R20,3
    03EC C019      RJMP	0x0406
(0047) 	{
(0048) 		D12_COMMAND = 0x43;//读 in 最后状态
    03ED E483      LDI	R24,0x43
    03EE 93807F01  STS	0x7F01,R24
(0049) 		cwait1;
    03F0 0000      NOP
    03F1 0000      NOP
(0050) 		i = D12_DATA;
    03F2 91407F00  LDS	R20,0x7F00
(0051) 		cwait1;
    03F4 0000      NOP
    03F5 0000      NOP
(0052) 		csram;
    03F6 9360FC01  STS	0xFC01,R22
(0053) 		D12_COMMAND = 3;// 选择 IN 端点(指针指向0位置)
    03F8 E083      LDI	R24,3
    03F9 93807F01  STS	0x7F01,R24
(0054) 		cwait;
    03FB 0000      NOP
(0055) 		D12_COMMAND = 0xf0;// 写缓冲区
    03FC EF80      LDI	R24,0xF0
    03FD 93807F01  STS	0x7F01,R24
(0056) 		cwait;
    03FF 0000      NOP
(0057) 		D12_DATA = 0;
    0400 2422      CLR	R2
    0401 92207F00  STS	0x7F00,R2
(0058) 		csram;
    0403 9360FC01  STS	0xFC01,R22
(0059) //		WriteEndpoint1();
(0060) 	
(0061) 	}
    0405 C043      RJMP	0x0449
(0062) 	else if(i & 0x10)//ENDP2_out  对应管道2
    0406 FF44      SBRS	R20,4
    0407 C01B      RJMP	0x0423
(0063) 	{
(0064) 		D12_COMMAND = 0x44;//读 in 最后状态
    0408 E484      LDI	R24,0x44
    0409 93807F01  STS	0x7F01,R24
(0065) 		cwait1;
    040B 0000      NOP
    040C 0000      NOP
(0066) 		i = D12_DATA;
    040D 91407F00  LDS	R20,0x7F00
(0067) 		cwait1;
    040F 0000      NOP
    0410 0000      NOP
(0068) 		D12_COMMAND = 4;// 选择 IN 端点(指针指向0位置)
    0411 E084      LDI	R24,4
    0412 93807F01  STS	0x7F01,R24
(0069) 		cwait;
    0414 0000      NOP
(0070) 		D12_COMMAND = 0xf0;// 读缓冲区
    0415 EF80      LDI	R24,0xF0
    0416 93807F01  STS	0x7F01,R24
(0071) 		cwait1;
    0418 0000      NOP
    0419 0000      NOP
(0072) 		j=D12_DATA;
    041A 91607F00  LDS	R22,0x7F00
(0073) 		cwait1;
    041C 0000      NOP
    041D 0000      NOP
(0074) 		j=D12_DATA;  //数据字节的长度
    041E 91607F00  LDS	R22,0x7F00
(0075) 		csram;
    0420 9360FC01  STS	0xFC01,R22
(0076) //		flashWrite(j);
(0077) 	}
    0422 C026      RJMP	0x0449
(0078) 	else if(i & 0x20)//ENDP2_IN   对应管道3
    0423 FF45      SBRS	R20,5
    0424 C018      RJMP	0x043D
(0079) 	{
(0080) 		D12_COMMAND = 0x45;//读 in 最后状态
    0425 E485      LDI	R24,0x45
    0426 93807F01  STS	0x7F01,R24
(0081) 		cwait1;
    0428 0000      NOP
    0429 0000      NOP
(0082) 		i = D12_DATA;
    042A 91407F00  LDS	R20,0x7F00
(0083) 		cwait1;
    042C 0000      NOP
    042D 0000      NOP
(0084) 		D12_COMMAND = 5;// 选择 IN 端点(指针指向0位置)
    042E E085      LDI	R24,5
    042F 93807F01  STS	0x7F01,R24
(0085) 		cwait;
    0431 0000      NOP
(0086) 		D12_COMMAND = 0xf0;// 写缓冲区
    0432 EF80      LDI	R24,0xF0
    0433 93807F01  STS	0x7F01,R24
(0087) 		cwait;
    0435 0000      NOP
(0088) 		D12_DATA = 0;
    0436 2422      CLR	R2
    0437 92207F00  STS	0x7F00,R2
(0089) 		csram;
    0439 9360FC01  STS	0xFC01,R22
(0090) 		flashRead();
    043B DC6A      RCALL	_flashRead
(0091) 	}
    043C C00C      RJMP	0x0449
(0092) 	else if(i & 0x80)//D12_INT_SUSPENDCHANGE D12挂起
    043D FF47      SBRS	R20,7
    043E C001      RJMP	0x0440
(0093) 	{
(0094) 		//if(D12_suspend)
(0095) 		{
(0096) 			  /** /
(0097) 			  D12_suspend = 0;//处理挂起事务
(0098) 			  D12_COMMAND = 0xf6;//发送恢复命令
(0099) 			  D12_suspend = 1;//复位51输入引脚
(0100) 			  /**/
(0101) 		}
(0102) 	}
    043F C009      RJMP	0x0449
(0103) 	else if(i & 0x40)//D12_INT_BUSRESET 总线复位
    0440 FF46      SBRS	R20,6
    0441 C002      RJMP	0x0444
(0104) 	{
(0105) 		bus_reset();
    0442 D00A      RCALL	_bus_reset
(0106) 	}
    0443 C005      RJMP	0x0449
(0107) 	else
(0108) 	{
(0109) 		i=D12_DATA; //D12_INT_EOT DMA操作已结束
    0444 91407F00  LDS	R20,0x7F00
(0110) 		if(i & 0x01)
    0446 FF40      SBRS	R20,0
    0447 C001      RJMP	0x0449
(0111) 		{
(0112) 			dma_eot();
    0448 D005      RCALL	_dma_eot
(0113) 		}
(0114) 	}
(0115) 	
(0116) 	SREG = 0x80;//全局中断使能
    0449 E880      LDI	R24,0x80
    044A BF8F      OUT	0x3F,R24
(0117) }
    044B D08E      RCALL	pop_gset2
    044C 9508      RET
(0118) 
(0119) void bus_reset(void)
(0120) {
(0121) }
_bus_reset:
    044D 9508      RET
(0122) 
(0123) void dma_eot(void)
(0124) {
(0125) }
_dma_eot:
    044E 9508      RET
_ReadEndpoint1:
  n                    --> R20
  j                    --> R20
  i                    --> R22
  buf                  --> R10
  len                  --> R22
    044F D0A8      RCALL	push_gset3
    0450 0159      MOVW	R10,R18
    0451 01B8      MOVW	R22,R16
(0126) 
(0127) void ReadEndpoint1(unsigned int len,unsigned int * buf)
(0128) {
(0129)     unsigned int i,j,n;
(0130) 	D12_COMMAND=2;
    0452 E082      LDI	R24,2
    0453 93807F01  STS	0x7F01,R24
(0131) 	D12_COMMAND=0xf0;
    0455 EF80      LDI	R24,0xF0
    0456 93807F01  STS	0x7F01,R24
(0132) 	j= D12_DATA;								
    0458 91407F00  LDS	R20,0x7F00
    045A 2755      CLR	R21
(0133) 	j = D12_DATA;								
    045B 91407F00  LDS	R20,0x7F00
    045D 2755      CLR	R21
(0134) 	if(j>len)
    045E 1764      CP	R22,R20
    045F 0775      CPC	R23,R21
    0460 F408      BCC	0x0462
(0135) 	 j=len;							
    0461 01AB      MOVW	R20,R22
(0136) 	for(i=0; i<j; i++)
    0462 2766      CLR	R22
    0463 2777      CLR	R23
    0464 C00E      RJMP	0x0473
(0137) 		*(buf+i) = D12_DATA;
    0465 E002      LDI	R16,2
    0466 E010      LDI	R17,0
    0467 019B      MOVW	R18,R22
    0468 D061      RCALL	empy16s
    0469 01F8      MOVW	R30,R16
    046A 0DEA      ADD	R30,R10
    046B 1DFB      ADC	R31,R11
    046C 90207F00  LDS	R2,0x7F00
    046E 2433      CLR	R3
    046F 8231      STD	Z+1,R3
    0470 8220      STD	Z+0,R2
    0471 5F6F      SUBI	R22,0xFF
    0472 4F7F      SBCI	R23,0xFF
    0473 1764      CP	R22,R20
    0474 0775      CPC	R23,R21
    0475 F378      BCS	0x0465
(0138) 		if(Rshu[0]==0xa1 && Rshu[1]==0xa2 && Rshu[2]==0xa3)
    0476 918000C2  LDS	R24,_Rshu
    0478 919000C3  LDS	R25,_Rshu+1
    047A 3A81      CPI	R24,0xA1
    047B E0E0      LDI	R30,0
    047C 079E      CPC	R25,R30
    047D F4A1      BNE	0x0492
    047E 918000C4  LDS	R24,_Rshu+2
    0480 919000C5  LDS	R25,_Rshu+3
    0482 3A82      CPI	R24,0xA2
    0483 E0E0      LDI	R30,0
    0484 079E      CPC	R25,R30
    0485 F461      BNE	0x0492
    0486 918000C6  LDS	R24,0xC6
    0488 919000C7  LDS	R25,0xC7
    048A 3A83      CPI	R24,0xA3
    048B E0E0      LDI	R30,0
    048C 079E      CPC	R25,R30
    048D F421      BNE	0x0492
(0139) 		{
(0140) 		
(0141) 		adrstart=0xcc;
    048E EC8C      LDI	R24,0xCC
    048F 9380FF50  STS	0xFF50,R24
(0142) 		}
    0491 C033      RJMP	0x04C5
(0143) 		else if(Rshu[0]==0xb1 && Rshu[1]==0xb2 && Rshu[2]==0xb3)	
    0492 918000C2  LDS	R24,_Rshu
    0494 919000C3  LDS	R25,_Rshu+1
    0496 3B81      CPI	R24,0xB1
    0497 E0E0      LDI	R30,0
    0498 079E      CPC	R25,R30
    0499 F541      BNE	0x04C2
    049A 918000C4  LDS	R24,_Rshu+2
    049C 919000C5  LDS	R25,_Rshu+3
    049E 3B82      CPI	R24,0xB2
    049F E0E0      LDI	R30,0
    04A0 079E      CPC	R25,R30
    04A1 F501      BNE	0x04C2
    04A2 918000C6  LDS	R24,0xC6
    04A4 919000C7  LDS	R25,0xC7
    04A6 3B83      CPI	R24,0xB3
    04A7 E0E0      LDI	R30,0
    04A8 079E      CPC	R25,R30
    04A9 F4C1      BNE	0x04C2
(0144) 		{
(0145) 		adrstop=0xee;
    04AA EE8E      LDI	R24,0xEE
    04AB 9380FF45  STS	0xFF45,R24
(0146) 		Fifo1_Flag=0x00;
    04AD 2422      CLR	R2
    04AE 92200062  STS	0x62,R2
(0147) 		Fifo2_Flag=0x00;
    04B0 92200063  STS	0x63,R2
(0148) 		//DDRD=0xfb;
(0149) 		PORTD=0xdd;
    04B2 ED8D      LDI	R24,0xDD
    04B3 BB82      OUT	0x12,R24
(0150) 		for(n=0;n<6;n++)
    04B4 2744      CLR	R20
    04B5 2755      CLR	R21
    04B6 C003      RJMP	0x04BA
(0151) 		cwait1;
    04B7 0000      NOP
    04B8 5F4F      SUBI	R20,0xFF
    04B9 4F5F      SBCI	R21,0xFF
    04BA 3046      CPI	R20,6
    04BB E0E0      LDI	R30,0
    04BC 075E      CPC	R21,R30
    04BD F3C8      BCS	0x04B7
    04BE 0000      NOP
(0152) 		PORTD=0xdf;
    04BF ED8F      LDI	R24,0xDF
    04C0 BB82      OUT	0x12,R24
(0153) 		
(0154) 		}
    04C1 C003      RJMP	0x04C5
(0155) 		else
(0156) 		{
(0157) 		D12_COMMAND=0xf2;
    04C2 EF82      LDI	R24,0xF2
    04C3 93807F01  STS	0x7F01,R24
(0158) 		}	
(0159) 	
(0160) 	D12_COMMAND=0xf2;
    04C5 EF82      LDI	R24,0xF2
    04C6 93807F01  STS	0x7F01,R24
(0161) 	
(0162) }	
FILE: <library>
    04C8 D013      RCALL	pop_gset3
    04C9 9508      RET
empy16s:
    04CA 920A      ST	R0,-Y
    04CB 921A      ST	R1,-Y
    04CC 938A      ST	R24,-Y
    04CD 939A      ST	R25,-Y
    04CE 9F02      MUL	R16,R18
    04CF 01C0      MOVW	R24,R0
    04D0 9F12      MUL	R17,R18
    04D1 0D90      ADD	R25,R0
    04D2 9F03      MUL	R16,R19
    04D3 0D90      ADD	R25,R0
    04D4 018C      MOVW	R16,R24
    04D5 9199      LD	R25,Y+
    04D6 9189      LD	R24,Y+
    04D7 9019      LD	R1,Y+
    04D8 9009      LD	R0,Y+
    04D9 9508      RET
pop_gset2:
    04DA E0E2      LDI	R30,2
    04DB C006      RJMP	pop
pop_gset3:
    04DC E0E4      LDI	R30,4
    04DD C004      RJMP	pop
push_gset1:
    04DE 935A      ST	R21,-Y
    04DF 934A      ST	R20,-Y
    04E0 9508      RET
pop_gset1:
    04E1 E0E1      LDI	R30,1
pop:
    04E2 9149      LD	R20,Y+
    04E3 9159      LD	R21,Y+
    04E4 FDE0      SBRC	R30,0
    04E5 9508      RET
    04E6 9169      LD	R22,Y+
    04E7 9179      LD	R23,Y+
    04E8 FDE1      SBRC	R30,1
    04E9 9508      RET
    04EA 90A9      LD	R10,Y+
    04EB 90B9      LD	R11,Y+
    04EC FDE2      SBRC	R30,2
    04ED 9508      RET
    04EE 90C9      LD	R12,Y+
    04EF 90D9      LD	R13,Y+
    04F0 FDE3      SBRC	R30,3
    04F1 9508      RET
    04F2 90E9      LD	R14,Y+
    04F3 90F9      LD	R15,Y+
    04F4 9508      RET
push_gset2:
    04F5 937A      ST	R23,-Y
    04F6 936A      ST	R22,-Y
    04F7 CFE6      RJMP	push_gset1
push_gset3:
    04F8 92BA      ST	R11,-Y
    04F9 92AA      ST	R10,-Y
    04FA CFFA      RJMP	push_gset2
xicall:
    04FB 920A      ST	R0,-Y
    04FC 95C8      LPM
    04FD 920A      ST	R0,-Y
    04FE 9631      ADIW	R30,1
    04FF 95C8      LPM
    0500 2DF0      MOV	R31,R0
    0501 91E9      LD	R30,Y+
    0502 9009      LD	R0,Y+
    0503 9409      IJMP

⌨️ 快捷键说明

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