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

📄 avr_usb_disk.lst

📁 USB通信程序开发(附源码 精品)包括详细论文说明
💻 LST
📖 第 1 页 / 共 5 页
字号:
    04ED C011      RJMP	0x04FF
(0249) 		{
(0250) 			k = *(XmtBuff.pp+i);
    04EE 90300158  LDS	R3,0x158
    04F0 90200157  LDS	R2,0x157
    04F2 2E44      MOV	R4,R20
    04F3 2455      CLR	R5
    04F4 0C42      ADD	R4,R2
    04F5 1C53      ADC	R5,R3
    04F6 2DE4      MOV	R30,R4
    04F7 2DF5      MOV	R31,R5
    04F8 95C8      LPM
    04F9 2D20      MOV	R18,R0
(0251) 			D12_DATA = k;//写数据字节
    04FA 93207C00  STS	R18,0x7C00
(0252) 			csram;
    04FC 9360FC01  STS	R22,0xFC01
(0253) 		}
    04FE 9543      INC	R20
    04FF 1740      CP	R20,R16
    0500 F368      BCS	0x04EE
(0254) 		XmtBuff.pp += j;
    0501 90300158  LDS	R3,0x158
    0503 90200157  LDS	R2,0x157
    0505 2E40      MOV	R4,R16
    0506 2455      CLR	R5
    0507 0C42      ADD	R4,R2
    0508 1C53      ADC	R5,R3
    0509 92500158  STS	R5,0x158
    050B 92400157  STS	R4,0x157
(0255) 	}else
    050D C01E      RJMP	0x052C
(0256) 	{
(0257) 	 	for(i=0;i<j;i++)
    050E 2744      CLR	R20
    050F C00E      RJMP	0x051E
(0258) 		{
(0259) 			k = *(XmtBuff.p+i);
    0510 9030015A  LDS	R3,0x15A
    0512 90200159  LDS	R2,0x159
    0514 2FE4      MOV	R30,R20
    0515 27FF      CLR	R31
    0516 0DE2      ADD	R30,R2
    0517 1DF3      ADC	R31,R3
    0518 8120      LDD	R18,0+Z
(0260) 			D12_DATA = k;//写数据字节
    0519 93207C00  STS	R18,0x7C00
(0261) 			csram;
    051B 9360FC01  STS	R22,0xFC01
(0262) 		}
    051D 9543      INC	R20
    051E 1740      CP	R20,R16
    051F F380      BCS	0x0510
(0263) 		XmtBuff.p += j;
    0520 9030015A  LDS	R3,0x15A
    0522 90200159  LDS	R2,0x159
    0524 2E40      MOV	R4,R16
    0525 2455      CLR	R5
    0526 0C42      ADD	R4,R2
    0527 1C53      ADC	R5,R3
    0528 9250015A  STS	R5,0x15A
    052A 92400159  STS	R4,0x159
(0264) 	}
(0265) 	XmtBuff.wrLength -= j;
    052C 2E20      MOV	R2,R16
    052D 2433      CLR	R3
    052E 90500156  LDS	R5,0x156
    0530 90400155  LDS	R4,0x155
    0532 1842      SUB	R4,R2
    0533 0853      SBC	R5,R3
    0534 92500156  STS	R5,0x156
    0536 92400155  STS	R4,0x155
(0266) 	D12_COMMAND = 0xfa;// 设置 IN 缓冲区有效(满标志)
    0538 EF8A      LDI	R24,0xFA
    0539 93807C01  STS	R24,0x7C01
(0267) 	csram;
    053B 9360FC01  STS	R22,0xFC01
(0268) }
    053D D595      RCALL	pop_gset1
    053E 9508      RET
_Setup_control:
  p                    --> R10
  j                    --> R20
  i                    --> R22
    053F D5AA      RCALL	push_gset3
FILE: G:\source\D12Setup.c
(0000) /*++
(0001) 
(0002) Module Name:
(0003) 
(0004)          D12Setup.c
(0005) 
(0006) Abstract:
(0007) 
(0008)          Header file related to D12 module
(0009) 
(0010) Environment:
(0011) 
(0012)         ICCAVR 6.29
(0013) 
(0014) Revision History:
(0015) 
(0016)         04/23/2004      chenchi   created
(0017) 
(0018) --*/
(0019) /******************************************************************/
(0020) #include "io8515v.h"
(0021) #include "d12.h"
(0022) #include "d12setup.h"
(0023) 
(0024) TRANSMIT_STRUCT XmtBuff;//定义传输结构体变量
(0025) 
(0026) /************************************************************
(0027) **工程名称:U盘固件程序开发
(0028) **编译器类型及版本:ICCAVR 6.26C
(0029) **日期:2004.4.30
(0030) **创建人:陈驰
(0031) **所属单位:湖南大学计算机与通信学院
(0032) 
(0033) **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
(0034) **时钟频率:8MHZ
(0035) 
(0036) **函数功能:完成设备枚举
(0037) **函数输入参数及说明:无
(0038) 
(0039) **函数返回值:无
(0040) **在本函数以外定义的变量:D12_COMMAND,D12_DATA
(0041) **调用的函数说明:
(0042)   (*StandardDeviceRequest[i])();
(0043)   标准设备请求函数
(0044)   
(0045) **修改人:陈驰
(0046) **修改日期:2004.4.30
(0047) **修改说明:创建
(0048) *************************************************************/
(0049) void Setup_control(void)
(0050) {
(0051) 	unsigned char i,j,*p;
(0052) 	D12_COMMAND = 0x00;//选择端点(指针指向0位置)
    0540 2422      CLR	R2
    0541 92207C01  STS	R2,0x7C01
(0053) 	cwait;
    0543 0000      NOP
(0054) 	D12_COMMAND = 0xf0;//读标准控制码
    0544 EF80      LDI	R24,0xF0
    0545 93807C01  STS	R24,0x7C01
(0055) 	cwait1;
    0547 0000      NOP
    0548 0000      NOP
(0056) 	/****************************
(0057) 	  缓冲区数据结构:
(0058) 	  字节1:保留,可为任意值
(0059) 	  字节2:数据字节的数目/长度
(0060) 	  字节3:数据字节1
(0061) 	  字节4:数据字节2
(0062) 	*****************************/
(0063) 	i = D12_DATA;//字节1
    0549 91607C00  LDS	R22,0x7C00
(0064) 	cwait1;
    054B 0000      NOP
    054C 0000      NOP
(0065) 	i = D12_DATA;//字节2
    054D 91607C00  LDS	R22,0x7C00
(0066) 	cwait1;
    054F 0000      NOP
    0550 0000      NOP
(0067) 	j = D12_DATA;//数据字节
    0551 91407C00  LDS	R20,0x7C00
(0068) 	csram;
    0553 9360FC01  STS	R22,0xFC01
(0069) 	p = XmtBuff.b;//P指针指向传输缓冲区
    0555 E185      LDI	R24,0x15
    0556 E091      LDI	R25,1
    0557 2EA8      MOV	R10,R24
    0558 2EB9      MOV	R11,R25
(0070) 	*(p++) = j;
    0559 2C2A      MOV	R2,R10
    055A 2C3B      MOV	R3,R11
    055B 2D82      MOV	R24,R2
    055C 2D93      MOV	R25,R3
    055D 9601      ADIW	R24,1
    055E 2EA8      MOV	R10,R24
    055F 2EB9      MOV	R11,R25
    0560 2DE2      MOV	R30,R2
    0561 2DF3      MOV	R31,R3
    0562 8340      STD	R20,0+Z
(0071) 	for(i=0;i<7;i++)
    0563 2766      CLR	R22
    0564 C006      RJMP	0x056B
(0072) 	{
(0073) 	   j = D12_DATA;//数据字节
    0565 91407C00  LDS	R20,0x7C00
(0074) 	   csram;
    0567 9360FC01  STS	R22,0xFC01
(0075) 	   asm("st Z+,%j");
    0569 9341      ST	R20,Z+
(0076) 	}
    056A 9563      INC	R22
    056B 3067      CPI	R22,7
    056C F3C0      BCS	0x0565
(0077) 	D12_COMMAND = 0x01;// 选择端点(指针指向0位置)
    056D E081      LDI	R24,1
    056E 93807C01  STS	R24,0x7C01
(0078) 	cwait;
    0570 0000      NOP
(0079) 	D12_COMMAND = 0xf1;//应答SETUP包
    0571 EF81      LDI	R24,0xF1
    0572 93807C01  STS	R24,0x7C01
(0080) 	csram;
    0574 9360FC01  STS	R22,0xFC01
(0081) 	i = XmtBuff.b[1];
    0576 91600116  LDS	R22,_XmtBuff+1
(0082) 	if (i <= 0x0B)//标准请求跳转表
    0578 E08B      LDI	R24,0xB
    0579 1786      CP	R24,R22
    057A F070      BCS	0x0589
(0083) 	{
(0084) 		(*StandardDeviceRequest[i])();
    057B E686      LDI	R24,0x66
    057C E090      LDI	R25,0
    057D 2FE6      MOV	R30,R22
    057E 27FF      CLR	R31
    057F 0FEE      LSL	R30
    0580 1FFF      ROL	R31
    0581 0FE8      ADD	R30,R24
    0582 1FF9      ADC	R31,R25
    0583 81A0      LDD	R26,0+Z
    0584 81B1      LDD	R27,1+Z
    0585 2FEA      MOV	R30,R26
    0586 2FFB      MOV	R31,R27
    0587 D7A7      RCALL	xicall
(0085) 	}
    0588 C01B      RJMP	0x05A4
(0086) 	else{
(0087) 		D12_COMMAND = 0x01;//选择端点(指针指向0位置)
    0589 E081      LDI	R24,1
    058A 93807C01  STS	R24,0x7C01
(0088) 		cwait;
    058C 0000      NOP
(0089) 		D12_COMMAND = 0xf0;// 写缓冲区
    058D EF80      LDI	R24,0xF0
    058E 93807C01  STS	R24,0x7C01
(0090) 		cwait;
    0590 0000      NOP
(0091) 		/****************************
(0092) 	  	  缓冲区数据结构:
(0093) 	  	  字节1:保留,可为任意值
(0094) 	  	  字节2:数据字节的数目/长度
(0095) 	  	  字节3:数据字节1
(0096) 	  	  字节4:数据字节2
(0097) 		*****************************/
(0098) 		D12_DATA = 0x00;//字节1
    0591 2422      CLR	R2
    0592 92207C00  STS	R2,0x7C00
(0099) 		cwait;
    0594 0000      NOP
(0100) 		D12_DATA = 0x01;//字节2
    0595 E081      LDI	R24,1
    0596 93807C00  STS	R24,0x7C00
(0101) 		csram;
    0598 9360FC01  STS	R22,0xFC01
(0102) 		D12_DATA = 0x00;//数据字节
    059A 2422      CLR	R2
    059B 92207C00  STS	R2,0x7C00
(0103) 		csram;
    059D 9360FC01  STS	R22,0xFC01
(0104) 		D12_COMMAND = 0xfa;//设置 IN 缓冲区有效(满标志)
    059F EF8A      LDI	R24,0xFA
    05A0 93807C01  STS	R24,0x7C01
(0105) 		csram;
    05A2 9360FC01  STS	R22,0xFC01
(0106) 	}
(0107) 	D12_COMMAND = 0x00;//选择端点(指针指向0位置)
    05A4 2422      CLR	R2
    05A5 92207C01  STS	R2,0x7C01
(0108) 	cwait;
    05A7 0000      NOP
(0109) 	D12_COMMAND = 0xf1;//应答SETUP包
    05A8 EF81      LDI	R24,0xF1
    05A9 93807C01  STS	R24,0x7C01
(0110) 	cwait;
    05AB 0000      NOP
(0111) 	D12_COMMAND = 0xf2;//清端点缓冲区
    05AC EF82      LDI	R24,0xF2
    05AD 93807C01  STS	R24,0x7C01
(0112) }
    05AF D545      RCALL	pop_gset3
    05B0 9508      RET
(0113) /************************************************************
(0114) **工程名称:U盘固件程序开发
(0115) **编译器类型及版本:ICCAVR 6.26C
(0116) **日期:2004.4.30
(0117) **创建人:陈驰
(0118) **所属单位:湖南大学计算机与通信学院
(0119) 
(0120) **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
(0121) **时钟频率:8MHZ
(0122) 
(0123) **函数功能:停止控制端点.应答枚举请求
(0124) **函数输入参数及说明:无
(0125) 
(0126) **函数返回值:无
(0127) **在本函数以外定义的变量:D12_COMMAND,D12_DATA
(0128) **调用的函数说明:无
(0129)   
(0130) **修改人:陈驰
(0131) **修改日期:2004.4.30
(0132) **修改说明:创建
(0133) *************************************************************/
(0134) void void_function(void)
(0135) {
(0136) 	D12_COMMAND = 0x40;//0端点停止(用于发送Stall包)
_void_function:
    05B1 E480      LDI	R24,0x40
    05B2 93807C01  STS	R24,0x7C01
(0137) 	cwait;
    05B4 0000      NOP
(0138) 	D12_DATA = 0x01;
    05B5 E081      LDI	R24,1
    05B6 93807C00  STS	R24,0x7C00
(0139) 	cwait;
    05B8 0000      NOP
(0140) 	D12_COMMAND = 0x41;//1端点停止(用于发送Stall包)
    05B9 E481      LDI	R24,0x41
    05BA 93807C01  STS	R24,0x7C01
(0141) 	cwait;
    05BC 0000      NOP
(0142) 	D12_DATA = 0x01;
    05BD E081      LDI	R24,1
    05BE 93807C00  STS	R24,0x7C00
(0143) 	cwait;
    05C0 0000      NOP
(0144) 	D12_COMMAND = 0xf1;//应答SETUP包
    05C1 EF81      LDI	R24,0xF1
    05C2 93807C01  STS	R24,0x7C01
(0145) 	csram;
    05C4 9360FC01  STS	R22,0xFC01
(0146) }
    05C6 9508      RET
_get_status:
    05C7 D508      RCALL	push_gset1
(0147) /************************************************************
(0148) **工程名称:U盘固件程序开发
(0149) **编译器类型及版本:ICCAVR 6.26C
(0150) **日期:2004.4.30
(0151) **创建人:陈驰
(0152) **所属单位:湖南大学计算机与通信学院
(0153) 
(0154) **芯片类型:AT90S8515,PDIUSUD12,K9F5608U0A-YCB0
(0155) **时钟频率:8MHZ
(0156) 
(0157) **函数功能:标准设备请求
(0158) **函数输入参数及说明:无
(0159) 
(0160) **函数返回值:无
(0161) **在本函数以外定义的变量:D12_COMMAND,D12_DATA
(0162) **调用的函数说明:
(0163)   USB_submit();
(0164)   控制端点提交函数
(0165)   
(0166) **修改人:陈驰
(0167) **修改日期:2004.4.30
(0168) **修改说明:创建
(0169) *************************************************************/
(0170) void get_status(void)
(0171) {
(0172) 	XmtBuff.b[1] = 0x00;
    05C8 2422      CLR	R2
    05C9 92200116  STS	R2,_XmtBuff+1
(0173) 	switch (XmtBuff.b[0])
    05CB 91400115  LDS	R20,_XmtBuff
    05CD 2755      CLR	R21
    05CE 3840      CPI	R20,0x80
    05CF E0E0      LDI	R30,0
    05D0 075E      CPC	R21,R30
    05D1 F081      BEQ	0x05E2
    05D2 3841      CPI	R20,0x81
    05D3 E0E0      LDI	R30,0
    05D4 075E      CPC	R21,R30
    05D5 F029      BEQ	0x05DB
    05D6 3842      CPI	R20,0x82
    05D7 E0E0      LDI	R30,0
    05D8 075E      CPC	R21,R30
    05D9 F029      BEQ	0x05DF
    05DA C007      RJMP	0x05E2
(0174) 	{
(0175) 	case 0x80:
(0176) 		break;
(0177) 	case 0x81:
(0178) 		XmtBuff.b[0] = 0x00;
    05DB 2422      CLR	R2
    05DC 92200115  STS	R2,_XmtBuff
(0179) 		break;
    05DE C003      RJMP	0x05E2
(0180) 	case 0x82:
(0181) 		XmtBuff.b[0] = 0x00;
    05DF 2422      CLR	R2
    05E0 92200115  STS	R2,_XmtBuff
(0182) 		break;
(0183) 	}
(0184) 	XmtBuff.p_p=0;
    05E2 2422      CLR	R2
    05E3 9220015B  STS	R2,0x15B
(0185) 	XmtBuff.wrLength = 2;
    05E5 E082      LDI	R24,2
    05E6 

⌨️ 快捷键说明

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