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

📄 protodma.lst

📁 AVR单片机控制的PDIUSBD12原程序
💻 LST
字号:
   1               		.file	"protodma.c"
   2               		.arch atmega16
   3               	__SREG__ = 0x3f
   4               	__SP_H__ = 0x3e
   5               	__SP_L__ = 0x3d
   6               	__tmp_reg__ = 0
   7               	__zero_reg__ = 1
   8               		.global __do_copy_data
   9               		.global __do_clear_bss
  11               		.text
  12               	.Ltext0:
 106               	.global	VendorDeviceRequest
 107               		.data
 110               	VendorDeviceRequest:
 111 0000 0000      		.word	pm(reserved)
 112 0002 0000      		.word	pm(reserved)
 113 0004 0000      		.word	pm(reserved)
 114 0006 0000      		.word	pm(reserved)
 115 0008 0000      		.word	pm(reserved)
 116 000a 0000      		.word	pm(reserved)
 117 000c 0000      		.word	pm(reserved)
 118 000e 0000      		.word	pm(reserved)
 119 0010 0000      		.word	pm(reserved)
 120 0012 0000      		.word	pm(reserved)
 121 0014 0000      		.word	pm(reserved)
 122 0016 0000      		.word	pm(reserved)
 123 0018 0000      		.word	pm(read_write_register)
 124 001a 0000      		.word	pm(reserved)
 125 001c 0000      		.word	pm(reserved)
 126 001e 0000      		.word	pm(reserved)
 127               		.text
 129               	.global	get_firmware_version
 131               	get_firmware_version:
   1:protodma.c    **** //********************************
   2:protodma.c    **** //厂商请求处理protodma.c
   3:protodma.c    **** //编译环境WinAVRGCC
   4:protodma.c    **** //2007-01-11
   5:protodma.c    **** //Hjxiang
   6:protodma.c    **** //********************************
   7:protodma.c    **** //标准C头文件
   8:protodma.c    **** #include <stdint.h>
   9:protodma.c    **** #include <stdlib.h>
  10:protodma.c    **** //AVR头文件
  11:protodma.c    **** #include <avr/io.h>
  12:protodma.c    **** #include <avr/signal.h>
  13:protodma.c    **** #include <avr/delay.h>
  14:protodma.c    **** //自定义头文件
  15:protodma.c    **** #include "usb.h"
  16:protodma.c    **** #include "protodma.h"
  17:protodma.c    **** 
  18:protodma.c    **** //获取固件版本号
  19:protodma.c    **** void get_firmware_version(void)
  20:protodma.c    **** {
 133               	.LM1:
 134               	/* prologue: frame size=1 */
 135 0000 CF93      		push r28
 136 0002 DF93      		push r29
 137 0004 CDB7      		in r28,__SP_L__
 138 0006 DEB7      		in r29,__SP_H__
 139 0008 2197      		sbiw r28,1
 140 000a 0FB6      		in __tmp_reg__,__SREG__
 141 000c F894      		cli
 142 000e DEBF      		out __SP_H__,r29
 143 0010 0FBE      		out __SREG__,__tmp_reg__
 144 0012 CDBF      		out __SP_L__,r28
 145               	/* prologue end (size=10) */
  21:protodma.c    **** 	unsigned char i;
  22:protodma.c    **** 	i=0x30;												//固件版本号
 147               	.LM2:
 148 0014 80E3      		ldi r24,lo8(48)
 149 0016 8983      		std Y+1,r24
  23:protodma.c    **** 	D12_WriteEndpoint(1,1,(unsigned char *) &i);		//发送数据
 151               	.LM3:
 152 0018 AE01      		movw r20,r28
 153 001a 4F5F      		subi r20,lo8(-(1))
 154 001c 5F4F      		sbci r21,hi8(-(1))
 155 001e 61E0      		ldi r22,lo8(1)
 156 0020 70E0      		ldi r23,hi8(1)
 157 0022 CB01      		movw r24,r22
 158 0024 0E94 0000 		call D12_WriteEndpoint
 159               	/* epilogue: frame size=1 */
 160 0028 2196      		adiw r28,1
 161 002a 0FB6      		in __tmp_reg__,__SREG__
 162 002c F894      		cli
 163 002e DEBF      		out __SP_H__,r29
 164 0030 0FBE      		out __SREG__,__tmp_reg__
 165 0032 CDBF      		out __SP_L__,r28
 166 0034 DF91      		pop r29
 167 0036 CF91      		pop r28
 168 0038 0895      		ret
 169               	/* epilogue end (size=9) */
 170               	/* function get_firmware_version size 29 (10) */
 175               	.Lscope0:
 177               	.global	ger_buffer_size
 179               	ger_buffer_size:
  24:protodma.c    **** }
  25:protodma.c    **** //获取端点2缓存区大小
  26:protodma.c    **** void ger_buffer_size(void)
  27:protodma.c    **** {
 181               	.LM4:
 182               	/* prologue: frame size=4 */
 183 003a CF93      		push r28
 184 003c DF93      		push r29
 185 003e CDB7      		in r28,__SP_L__
 186 0040 DEB7      		in r29,__SP_H__
 187 0042 2497      		sbiw r28,4
 188 0044 0FB6      		in __tmp_reg__,__SREG__
 189 0046 F894      		cli
 190 0048 DEBF      		out __SP_H__,r29
 191 004a 0FBE      		out __SREG__,__tmp_reg__
 192 004c CDBF      		out __SP_L__,r28
 193               	/* prologue end (size=10) */
  28:protodma.c    **** 	unsigned char i[4];
  29:protodma.c    **** 	i[0]=EP2_PACKET_SIZE;								//断电2缓冲区大小
 195               	.LM5:
 196 004e 80E4      		ldi r24,lo8(64)
 197 0050 8983      		std Y+1,r24
  30:protodma.c    **** 	i[1]=0;
 199               	.LM6:
 200 0052 FE01      		movw r30,r28
 201 0054 3196      		adiw r30,1
 202 0056 1182      		std Z+1,__zero_reg__
  31:protodma.c    **** 	i[2]=0;
 204               	.LM7:
 205 0058 1B82      		std Y+3,__zero_reg__
  32:protodma.c    **** 	i[3]=0;
 207               	.LM8:
 208 005a 1C82      		std Y+4,__zero_reg__
  33:protodma.c    **** 	D12_WriteEndpoint(1,4,i);							//发送数据
 210               	.LM9:
 211 005c AF01      		movw r20,r30
 212 005e 64E0      		ldi r22,lo8(4)
 213 0060 70E0      		ldi r23,hi8(4)
 214 0062 81E0      		ldi r24,lo8(1)
 215 0064 90E0      		ldi r25,hi8(1)
 216 0066 0E94 0000 		call D12_WriteEndpoint
 217               	/* epilogue: frame size=4 */
 218 006a 2496      		adiw r28,4
 219 006c 0FB6      		in __tmp_reg__,__SREG__
 220 006e F894      		cli
 221 0070 DEBF      		out __SP_H__,r29
 222 0072 0FBE      		out __SREG__,__tmp_reg__
 223 0074 CDBF      		out __SP_L__,r28
 224 0076 DF91      		pop r29
 225 0078 CF91      		pop r28
 226 007a 0895      		ret
 227               	/* epilogue end (size=9) */
 228               	/* function ger_buffer_size size 33 (14) */
 233               	.Lscope1:
 235               	.global	trans_data
 237               	trans_data:
  34:protodma.c    **** }
  35:protodma.c    **** //数据传输操作
  36:protodma.c    **** void trans_data(void)
  37:protodma.c    **** {
 239               	.LM10:
 240               	/* prologue: frame size=0 */
 241               	/* prologue end (size=0) */
  38:protodma.c    **** 	unsigned char len,epstatus;
  39:protodma.c    **** 	if(ControlData.dataBuffer[5] ==0x81)						//从单片机发送数据到主机
 243               	.LM11:
 244 007c 8091 0000 		lds r24,ControlData+19
 245 0080 8138      		cpi r24,lo8(-127)
 246 0082 61F4      		brne .L4
 247               	.LBB2:
  40:protodma.c    **** 	{
  41:protodma.c    **** 		D12_WriteEndpoint(5,ControlData.dataBuffer[3],EpBuf);	//发送数据
 249               	.LM12:
 250 0084 8091 0000 		lds r24,ControlData+17
 251 0088 9927      		clr r25
 252 008a 4091 0000 		lds r20,EpBuf
 253 008e 5091 0000 		lds r21,(EpBuf)+1
 254 0092 BC01      		movw r22,r24
 255 0094 85E0      		ldi r24,lo8(5)
 256 0096 90E0      		ldi r25,hi8(5)
 257 0098 0E94 0000 		call D12_WriteEndpoint
 258               	.L4:
 259               	.LBE2:
  42:protodma.c    **** 	}
  43:protodma.c    **** 	if(ControlData.dataBuffer[5] ==0x80)						//从主机发送数据到单片机
 261               	.LM13:
 262 009c 8091 0000 		lds r24,ControlData+19
 263 00a0 8038      		cpi r24,lo8(-128)
 264 00a2 89F4      		brne .L5
 265               	.LBB3:
  44:protodma.c    **** 	{
  45:protodma.c    **** 		epstatus=D12_ReadEndpointStatus(4);						//读取端点状态
 267               	.LM14:
 268 00a4 84E0      		ldi r24,lo8(4)
 269 00a6 90E0      		ldi r25,hi8(4)
 270 00a8 0E94 0000 		call D12_ReadEndpointStatus
  46:protodma.c    **** 		epstatus &= 0x60;
 272               	.LM15:
 273 00ac 8076      		andi r24,lo8(96)
  47:protodma.c    **** 		if(epstatus == 0x60)
 275               	.LM16:
 276 00ae 8036      		cpi r24,lo8(96)
 277 00b0 51F4      		brne .L5
  48:protodma.c    **** 			D12_ReadEndpointStatus(4,64,EpBuf);					//读取双缓冲区数据
 279               	.LM17:
 280 00b2 4091 0000 		lds r20,EpBuf
 281 00b6 5091 0000 		lds r21,(EpBuf)+1
 282 00ba 60E4      		ldi r22,lo8(64)
 283 00bc 70E0      		ldi r23,hi8(64)
 284 00be 84E0      		ldi r24,lo8(4)
 285 00c0 90E0      		ldi r25,hi8(4)
 286 00c2 0E94 0000 		call D12_ReadEndpointStatus
 287               	.L5:
 288               	.LBE3:
  49:protodma.c    **** 	}
  50:protodma.c    **** 	single_transmit(0,0);										//发送应答
 290               	.LM18:
 291 00c6 60E0      		ldi r22,lo8(0)
 292 00c8 70E0      		ldi r23,hi8(0)
 293 00ca CB01      		movw r24,r22
 294 00cc 0E94 0000 		call single_transmit
 295               	/* epilogue: frame size=0 */
 296 00d0 0895      		ret
 297               	/* epilogue end (size=1) */
 298               	/* function trans_data size 43 (42) */
 303               	.Lscope2:
 305               	.global	read_write_register
 307               	read_write_register:
  51:protodma.c    **** }
  52:protodma.c    **** //厂商请求处理
  53:protodma.c    **** void read_write_register(void)
  54:protodma.c    **** {
 309               	.LM19:
 310               	/* prologue: frame size=0 */
 311               	/* prologue end (size=0) */
  55:protodma.c    **** 	unsigned char i,len,epstatus;
  56:protodma.c    **** 	if(ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
 313               	.LM20:
 314 00d2 8091 0000 		lds r24,ControlData
 315 00d6 2091 0000 		lds r18,ControlData+4
 316 00da 3091 0000 		lds r19,(ControlData+4)+1
 317 00de 87FF      		sbrs r24,7
 318 00e0 25C0      		rjmp .L8
  57:protodma.c    **** 	{
  58:protodma.c    **** 		if(ControlData.DeviceRequest.wIndex == GET_FIRMWARE_VERSION && ControlData.DeviceRequest.wValue =
 320               	.LM21:
 321 00e2 84E0      		ldi r24,hi8(1138)
 322 00e4 2237      		cpi r18,lo8(1138)
 323 00e6 3807      		cpc r19,r24
 324 00e8 79F4      		brne .L9
 325 00ea 8091 0000 		lds r24,ControlData+2
 326 00ee 9091 0000 		lds r25,(ControlData+2)+1
 327 00f2 892B      		or r24,r25
 328 00f4 49F4      		brne .L9
 329 00f6 8091 0000 		lds r24,ControlData+6
 330 00fa 9091 0000 		lds r25,(ControlData+6)+1
 331 00fe 0197      		sbiw r24,1
 332 0100 19F4      		brne .L9
  59:protodma.c    **** 			get_firmware_version();								//获取固件版本号
 334               	.LM22:
 335 0102 0E94 0000 		call get_firmware_version
 336 0106 0895      		ret
 337               	.L9:
  60:protodma.c    **** 		else
  61:protodma.c    **** 			if(ControlData.DeviceRequest.wIndex == GET_BUFFER_SIZE && ControlData.DeviceRequest.wValue ==0 &
 339               	.LM23:
 340 0108 2457      		subi r18,lo8(1140)
 341 010a 3440      		sbci r19,hi8(1140)
 342 010c 09F5      		brne .L14
 343 010e 8091 0000 		lds r24,ControlData+2
 344 0112 9091 0000 		lds r25,(ControlData+2)+1
 345 0116 892B      		or r24,r25
 346 0118 D9F4      		brne .L14
 347 011a 8091 0000 		lds r24,ControlData+6
 348 011e 9091 0000 		lds r25,(ControlData+6)+1
 349 0122 0497      		sbiw r24,4
 350 0124 A9F4      		brne .L14
  62:protodma.c    **** 				ger_buffer_size();
 352               	.LM24:
 353 0126 0E94 0000 		call ger_buffer_size
 354 012a 0895      		ret
 355               	.L8:
  63:protodma.c    **** 			else
  64:protodma.c    **** 				stall_ep0();									//获取缓冲区大小
  65:protodma.c    **** 	}															//if read register
  66:protodma.c    **** 	else
  67:protodma.c    **** 	{
  68:protodma.c    **** 		if(ControlData.DeviceRequest.wIndex == TRANS_REQUEST && ControlData.DeviceRequest.wValue ==0 && C
 357               	.LM25:
 358 012c 2157      		subi r18,lo8(1137)
 359 012e 3440      		sbci r19,hi8(1137)
 360 0130 79F4      		brne .L14
 361 0132 8091 0000 		lds r24,ControlData+2
 362 0136 9091 0000 		lds r25,(ControlData+2)+1
 363 013a 892B      		or r24,r25
 364 013c 49F4      		brne .L14
 365 013e 8091 0000 		lds r24,ControlData+6
 366 0142 9091 0000 		lds r25,(ControlData+6)+1
 367 0146 0697      		sbiw r24,6
 368 0148 19F4      		brne .L14
  69:protodma.c    **** 			trans_data();										//数据传输处理
 370               	.LM26:
 371 014a 0E94 0000 		call trans_data
 372 014e 0895      		ret
 373               	.L14:
 374               	.LBB4:
  70:protodma.c    **** 		else
  71:protodma.c    **** 			stall_ep0();										// 无效命令,返回Stall
 376               	.LM27:
 377 0150 0E94 0000 		call stall_ep0
 378 0154 0895      		ret
 379               	.LBE4:
 380               	/* epilogue: frame size=0 */
 381               	/* epilogue: noreturn */
 382               	/* epilogue end (size=0) */
 383               	/* function read_write_register size 71 (71) */
 385               	.Lscope3:
 386               		.comm EpBuf,2,1
 387               		.comm GenEpBuf,64,1
 388               		.comm bEPPflags,2,1
 389               		.comm ControlData,22,1
 395               		.text
 397               	Letext:
 398               	/* File "protodma.c": code  176 = 0x00b0 ( 137), prologues  20, epilogues  19 */
DEFINED SYMBOLS
                            *ABS*:00000000 protodma.c
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc2Xaaaa.s:3      *ABS*:0000003f __SREG__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc2Xaaaa.s:4      *ABS*:0000003e __SP_H__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc2Xaaaa.s:5      *ABS*:0000003d __SP_L__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc2Xaaaa.s:6      *ABS*:00000000 __tmp_reg__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc2Xaaaa.s:7      *ABS*:00000001 __zero_reg__
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc2Xaaaa.s:110    .data:00000000 VendorDeviceRequest
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc2Xaaaa.s:307    .text:000000d2 read_write_register
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc2Xaaaa.s:131    .text:00000000 get_firmware_version
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc2Xaaaa.s:179    .text:0000003a ger_buffer_size
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc2Xaaaa.s:237    .text:0000007c trans_data
                            *COM*:00000016 ControlData
                            *COM*:00000002 EpBuf
                            *COM*:00000040 GenEpBuf
                            *COM*:00000002 bEPPflags
C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp/cc2Xaaaa.s:397    .text:00000156 Letext

UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
reserved
D12_WriteEndpoint
D12_ReadEndpointStatus
single_transmit
stall_ep0

⌨️ 快捷键说明

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