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

📄 d12-avr.s

📁 D12固件程序
💻 S
字号:
	.module D12-AVR.c
	.area data(ram, con, rel)
_q::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile G:\Backup\6月1日flag置(认为接近最终)\ilx511_usb\D12-AVR.c
	.dbsym e q _q I
	.area text(rom, con, rel)
	.dbfile G:\Backup\6月1日flag置(认为接近最终)\ilx511_usb\D12-AVR.c
	.dbfunc e D12_int _D12_int fV
;              k -> <dead>
;              c -> <dead>
;              j -> R22
;              i -> R20
	.even
_D12_int::
	rcall push_gset2
	.dbline -1
	.dbline 9
; #include "io8515v.h"
; #include "d12head.h"
; 
; unsigned int Rshu[3];
; int q=0;
; //#define D12_suspend (PINB & 0x01)
; 
; void D12_int(void)
; {
	.dbline 10
; 	unsigned char i=0,j,c,*k;//三个变量,一个指针
	clr R20
	.dbline 12
; 	
; 	SREG = 0x00;//全局中断使能
	clr R2
	out 0x3f,R2
	.dbline 14
; 	
; 	D12_COMMAND = 0xf4; // 读中断寄存器
	ldi R24,244
	sts 32513,R24
	.dbline 15
; 	cwait1;
	nop
	.dbline 15
	nop
	.dbline 16
; 	i=D12_DATA;
	lds R20,32512
	.dbline 17
; 	csram;
	sts 0xfc01,R22
	.dbline 17
	.dbline 18
; 	if(i & 0x01)	//ENDP0_OUT
	sbrs R20,0
	rjmp L8
	.dbline 19
; 	{
	.dbline 20
; 		D12_COMMAND = 0x40; //读 OUT 最后状态
	ldi R24,64
	sts 32513,R24
	.dbline 21
; 		cwait1;
	nop
	.dbline 21
	nop
	.dbline 22
; 		i= D12_DATA;
	lds R20,32512
	.dbline 23
; 		csram;
	sts 0xfc01,R22
	.dbline 23
	.dbline 24
; 		if (i & 0x20) //收到 SETUP 包
	sbrs R20,5
	rjmp L9
	.dbline 25
; 		{
	.dbline 26
; 			Setup_control();
	rcall _Setup_control
	.dbline 27
; 		}
	.dbline 28
; 	}
	rjmp L9
L8:
	.dbline 29
; 	else if(i & 0x02) //ENDP0_IN
	sbrs R20,1
	rjmp L12
	.dbline 30
; 	{	
	.dbline 31
; 		D12_COMMAND = 0x41;//读 in 最后状态
	ldi R24,65
	sts 32513,R24
	.dbline 32
; 		cwait1;
	nop
	.dbline 32
	nop
	.dbline 33
; 		i = D12_DATA;
	lds R20,32512
	.dbline 34
; 		csram;
	sts 0xfc01,R22
	.dbline 34
	.dbline 35
; 		USB_submit();
	rcall _USB_submit
	.dbline 36
; 	}
	rjmp L13
L12:
	.dbline 37
; 	else if(i & 0x04)//ENDP1_OUT
	sbrs R20,2
	rjmp L14
	.dbline 38
; 	{	
	.dbline 39
; 		D12_COMMAND = 0x42;//读 out 最后状态
	ldi R24,66
	sts 32513,R24
	.dbline 40
; 		cwait;
	nop
	.dbline 41
; 		i = D12_DATA;
	lds R20,32512
	.dbline 42
; 		csram;
	sts 0xfc01,R22
	.dbline 42
	.dbline 43
; 	    ReadEndpoint1(3,Rshu);
	ldi R18,<_Rshu
	ldi R19,>_Rshu
	ldi R16,3
	ldi R17,0
	rcall _ReadEndpoint1
	.dbline 45
; 		
; 	}
	rjmp L15
L14:
	.dbline 46
; 	else if(i & 0x08)//ENDP1_IN
	sbrs R20,3
	rjmp L16
	.dbline 47
; 	{
	.dbline 48
; 		D12_COMMAND = 0x43;//读 in 最后状态
	ldi R24,67
	sts 32513,R24
	.dbline 49
; 		cwait1;
	nop
	.dbline 49
	nop
	.dbline 50
; 		i = D12_DATA;
	lds R20,32512
	.dbline 51
; 		cwait1;
	nop
	.dbline 51
	nop
	.dbline 52
; 		csram;
	sts 0xfc01,R22
	.dbline 52
	.dbline 53
; 		D12_COMMAND = 3;// 选择 IN 端点(指针指向0位置)
	ldi R24,3
	sts 32513,R24
	.dbline 54
; 		cwait;
	nop
	.dbline 55
; 		D12_COMMAND = 0xf0;// 写缓冲区
	ldi R24,240
	sts 32513,R24
	.dbline 56
; 		cwait;
	nop
	.dbline 57
; 		D12_DATA = 0;
	clr R2
	sts 32512,R2
	.dbline 58
; 		csram;
	sts 0xfc01,R22
	.dbline 58
	.dbline 61
; //		WriteEndpoint1();
; 	
; 	}
	rjmp L17
L16:
	.dbline 62
; 	else if(i & 0x10)//ENDP2_out  对应管道2
	sbrs R20,4
	rjmp L18
	.dbline 63
; 	{
	.dbline 64
; 		D12_COMMAND = 0x44;//读 in 最后状态
	ldi R24,68
	sts 32513,R24
	.dbline 65
; 		cwait1;
	nop
	.dbline 65
	nop
	.dbline 66
; 		i = D12_DATA;
	lds R20,32512
	.dbline 67
; 		cwait1;
	nop
	.dbline 67
	nop
	.dbline 68
; 		D12_COMMAND = 4;// 选择 IN 端点(指针指向0位置)
	ldi R24,4
	sts 32513,R24
	.dbline 69
; 		cwait;
	nop
	.dbline 70
; 		D12_COMMAND = 0xf0;// 读缓冲区
	ldi R24,240
	sts 32513,R24
	.dbline 71
; 		cwait1;
	nop
	.dbline 71
	nop
	.dbline 72
; 		j=D12_DATA;
	lds R22,32512
	.dbline 73
; 		cwait1;
	nop
	.dbline 73
	nop
	.dbline 74
; 		j=D12_DATA;  //数据字节的长度
	lds R22,32512
	.dbline 75
; 		csram;
	sts 0xfc01,R22
	.dbline 75
	.dbline 77
; //		flashWrite(j);
; 	}
	rjmp L19
L18:
	.dbline 78
; 	else if(i & 0x20)//ENDP2_IN   对应管道3
	sbrs R20,5
	rjmp L20
	.dbline 79
; 	{
	.dbline 80
; 		D12_COMMAND = 0x45;//读 in 最后状态
	ldi R24,69
	sts 32513,R24
	.dbline 81
; 		cwait1;
	nop
	.dbline 81
	nop
	.dbline 82
; 		i = D12_DATA;
	lds R20,32512
	.dbline 83
; 		cwait1;
	nop
	.dbline 83
	nop
	.dbline 84
; 		D12_COMMAND = 5;// 选择 IN 端点(指针指向0位置)
	ldi R24,5
	sts 32513,R24
	.dbline 85
; 		cwait;
	nop
	.dbline 86
; 		D12_COMMAND = 0xf0;// 写缓冲区
	ldi R24,240
	sts 32513,R24
	.dbline 87
; 		cwait;
	nop
	.dbline 88
; 		D12_DATA = 0;
	clr R2
	sts 32512,R2
	.dbline 89
; 		csram;
	sts 0xfc01,R22
	.dbline 89
	.dbline 90
; 		flashRead();
	rcall _flashRead
	.dbline 91
; 	}
	rjmp L21
L20:
	.dbline 92
; 	else if(i & 0x80)//D12_INT_SUSPENDCHANGE D12挂起
	sbrs R20,7
	rjmp L22
	.dbline 93
; 	{
	.dbline 95
; 		//if(D12_suspend)
; 		{
	.dbline 101
; 			  /** /
; 			  D12_suspend = 0;//处理挂起事务
; 			  D12_COMMAND = 0xf6;//发送恢复命令
; 			  D12_suspend = 1;//复位51输入引脚
; 			  /**/
; 		}
	.dbline 102
; 	}
	rjmp L23
L22:
	.dbline 103
; 	else if(i & 0x40)//D12_INT_BUSRESET 总线复位
	sbrs R20,6
	rjmp L24
	.dbline 104
; 	{
	.dbline 105
; 		bus_reset();
	rcall _bus_reset
	.dbline 106
; 	}
	rjmp L25
L24:
	.dbline 108
; 	else
; 	{
	.dbline 109
; 		i=D12_DATA; //D12_INT_EOT DMA操作已结束
	lds R20,32512
	.dbline 110
; 		if(i & 0x01)
	sbrs R20,0
	rjmp L26
	.dbline 111
; 		{
	.dbline 112
; 			dma_eot();
	rcall _dma_eot
	.dbline 113
; 		}
L26:
	.dbline 114
; 	}
L25:
L23:
L21:
L19:
L17:
L15:
L13:
L9:
	.dbline 116
; 	
; 	SREG = 0x80;//全局中断使能
	ldi R24,128
	out 0x3f,R24
	.dbline -2
	.dbline 117
; }
L7:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l k 1 pc
	.dbsym l c 1 c
	.dbsym r j 22 c
	.dbsym r i 20 c
	.dbend
	.dbfunc e bus_reset _bus_reset fV
	.even
_bus_reset::
	.dbline -1
	.dbline 120
; 
; void bus_reset(void)
; {
	.dbline -2
	.dbline 121
; }
L28:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e dma_eot _dma_eot fV
	.even
_dma_eot::
	.dbline -1
	.dbline 124
; 
; void dma_eot(void)
; {
	.dbline -2
	.dbline 125
; }
L29:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e ReadEndpoint1 _ReadEndpoint1 fV
;              n -> R20,R21
;              j -> R20,R21
;              i -> R22,R23
;            buf -> R10,R11
;            len -> R22,R23
	.even
_ReadEndpoint1::
	rcall push_gset3
	movw R10,R18
	movw R22,R16
	.dbline -1
	.dbline 128
; 
; void ReadEndpoint1(unsigned int len,unsigned int * buf)
; {
	.dbline 130
;     unsigned int i,j,n;
; 	D12_COMMAND=2;
	ldi R24,2
	sts 32513,R24
	.dbline 131
; 	D12_COMMAND=0xf0;
	ldi R24,240
	sts 32513,R24
	.dbline 132
; 	j= D12_DATA;								
	lds R20,32512
	clr R21
	.dbline 133
; 	j = D12_DATA;								
	lds R20,32512
	clr R21
	.dbline 134
; 	if(j>len)
	cp R22,R20
	cpc R23,R21
	brsh L31
	.dbline 135
; 	 j=len;							
	movw R20,R22
L31:
	.dbline 136
; 	for(i=0; i<j; i++)
	clr R22
	clr R23
	rjmp L36
L33:
	.dbline 137
	ldi R16,2
	ldi R17,0
	movw R18,R22
	rcall empy16s
	movw R30,R16
	add R30,R10
	adc R31,R11
	lds R2,32512
	clr R3
	std z+1,R3
	std z+0,R2
L34:
	.dbline 136
	subi R22,255  ; offset = 1
	sbci R23,255
L36:
	.dbline 136
	cp R22,R20
	cpc R23,R21
	brlo L33
	.dbline 138
; 		*(buf+i) = D12_DATA;
; 		if(Rshu[0]==0xa1 && Rshu[1]==0xa2 && Rshu[2]==0xa3)
	lds R24,_Rshu
	lds R25,_Rshu+1
	cpi R24,161
	ldi R30,0
	cpc R25,R30
	brne L37
	lds R24,_Rshu+2
	lds R25,_Rshu+2+1
	cpi R24,162
	ldi R30,0
	cpc R25,R30
	brne L37
	lds R24,_Rshu+4
	lds R25,_Rshu+4+1
	cpi R24,163
	ldi R30,0
	cpc R25,R30
	brne L37
	.dbline 139
; 		{
	.dbline 141
; 		
; 		adrstart=0xcc;
	ldi R24,204
	sts 65360,R24
	.dbline 142
; 		}
	rjmp L38
L37:
	.dbline 143
; 		else if(Rshu[0]==0xb1 && Rshu[1]==0xb2 && Rshu[2]==0xb3)	
	lds R24,_Rshu
	lds R25,_Rshu+1
	cpi R24,177
	ldi R30,0
	cpc R25,R30
	brne L41
	lds R24,_Rshu+2
	lds R25,_Rshu+2+1
	cpi R24,178
	ldi R30,0
	cpc R25,R30
	brne L41
	lds R24,_Rshu+4
	lds R25,_Rshu+4+1
	cpi R24,179
	ldi R30,0
	cpc R25,R30
	brne L41
	.dbline 144
; 		{
	.dbline 145
; 		adrstop=0xee;
	ldi R24,238
	sts 65349,R24
	.dbline 146
; 		Fifo1_Flag=0x00;
	clr R2
	sts _Fifo1_Flag,R2
	.dbline 147
; 		Fifo2_Flag=0x00;
	sts _Fifo2_Flag,R2
	.dbline 149
; 		//DDRD=0xfb;
; 		PORTD=0xdd;
	ldi R24,221
	out 0x12,R24
	.dbline 150
; 		for(n=0;n<6;n++)
	clr R20
	clr R21
	rjmp L48
L45:
	.dbline 151
	nop
L46:
	.dbline 150
	subi R20,255  ; offset = 1
	sbci R21,255
L48:
	.dbline 150
	cpi R20,6
	ldi R30,0
	cpc R21,R30
	brlo L45
	.dbline 151
; 		cwait1;
	nop
	.dbline 152
; 		PORTD=0xdf;
	ldi R24,223
	out 0x12,R24
	.dbline 154
; 		
; 		}
	rjmp L42
L41:
	.dbline 156
; 		else
; 		{
	.dbline 157
; 		D12_COMMAND=0xf2;
	ldi R24,242
	sts 32513,R24
	.dbline 158
; 		}	
L42:
L38:
	.dbline 160
; 	
; 	D12_COMMAND=0xf2;
	ldi R24,242
	sts 32513,R24
	.dbline -2
	.dbline 162
; 	
; }	
L30:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r n 20 i
	.dbsym r j 20 i
	.dbsym r i 22 i
	.dbsym r buf 10 pi
	.dbsym r len 22 i
	.dbend
	.area bss(ram, con, rel)
	.dbfile G:\Backup\6月1日flag置(认为接近最终)\ilx511_usb\D12-AVR.c
_Rshu::
	.blkb 6
	.dbsym e Rshu _Rshu A[6:3]i

⌨️ 快捷键说明

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