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

📄 isr.lst

📁 AVR单片机控制的PDIUSBD12原程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
   1               		.file	"isr.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:
 107               	.global	dma_eot
 109               	dma_eot:
   1:isr.c         **** //**********************************
   2:isr.c         **** //中断服务程序isr.c
   3:isr.c         **** //编译环境WINAVRGCC
   4:isr.c         **** //2007-01-9
   5:isr.c         **** //Hjxiang
   6:isr.c         **** //**********************************
   7:isr.c         **** //标准C头文件
   8:isr.c         **** #include <stdint.h>
   9:isr.c         **** #include <stdlib.h>
  10:isr.c         **** //AVR头文件
  11:isr.c         **** #include <avr/io.h>
  12:isr.c         **** #include <avr/signal.h>
  13:isr.c         **** #include <avr/delay.h>
  14:isr.c         **** //自定义头文件
  15:isr.c         **** #include "usb.h"
  16:isr.c         **** #include "d12ic.h"
  17:isr.c         **** #include "isr.h"
  18:isr.c         **** 
  19:isr.c         **** //中断服务程序
  20:isr.c         **** void fn_usb_isr(void)
  21:isr.c         **** {
  22:isr.c         **** 	unsigned int i_st;
  23:isr.c         **** 	cli();
  24:isr.c         **** 	bEPPflags.bits.in_isr = 1;
  25:isr.c         **** 	i_st=D12_ReadInterruptRegister();
  26:isr.c         **** //	put_c(i_st);
  27:isr.c         **** 	if(i_st != 0)
  28:isr.c         **** 	{
  29:isr.c         **** 		if(i_st & D12_INT_BUSREST)		//0x40
  30:isr.c         **** 			bEPPflags.bits.bus_reset=1;
  31:isr.c         **** 		if(i_st & D12_INT_EOT)
  32:isr.c         **** 			dma_eot();
  33:isr.c         **** 		if(i_st & D12_INT_SUSPENDCHANGE)	//0x80
  34:isr.c         **** 			bEPPflags.bits.suspend=1;
  35:isr.c         **** 		if(i_st & D12_INT_ENDP0IN)		//0x02
  36:isr.c         **** 			ep0_txdone();
  37:isr.c         **** 		if(i_st & D12_INT_ENDP0OUT)		//0x01
  38:isr.c         **** 			ep0_rxdone();
  39:isr.c         **** 		if(i_st & D12_INT_ENDP1IN)		//0x08
  40:isr.c         **** 			ep1_txdone();
  41:isr.c         **** 		if(i_st & D12_INT_ENDP1OUT)		//0x04
  42:isr.c         **** 			ep1_rxdone();
  43:isr.c         **** 		if(i_st & D12_INT_ENDP2IN)		//0x20
  44:isr.c         **** 			main_txdone();
  45:isr.c         **** 		if(i_st & D12_INT_ENDP2OUT)		//0x10
  46:isr.c         **** 			main_rxdone();
  47:isr.c         **** 		
  48:isr.c         **** 	}
  49:isr.c         **** 	bEPPflags.bits.in_isr = 0;
  50:isr.c         **** 	sei();
  51:isr.c         **** }
  52:isr.c         **** //端点0OUT中断
  53:isr.c         **** void ep0_rxdone(void)
  54:isr.c         **** {
  55:isr.c         **** 	unsigned char ep_last,i,ep_last1;
  56:isr.c         **** 	ep_last=D12_ReadLastTransactionStatus(0);
  57:isr.c         **** //	put_c(ep_last);
  58:isr.c         **** 	if(ep_last & D12_SETUPPACKET)			//接收到setup包
  59:isr.c         **** 	{
  60:isr.c         **** 		ControlData.wLength=0;
  61:isr.c         **** 		ControlData.wCount=0;
  62:isr.c         **** 		if(D12_ReadEndpoint(0,sizeof(ControlData.DeviceRequest),(unsigned char *)(&(ControlData.DeviceReq
  63:isr.c         **** 		{//setup包出错
  64:isr.c         **** //			put_c(0x31);
  65:isr.c         **** 			D12_SetEndpointStatus(0,1);
  66:isr.c         **** 			D12_SetEndpointStatus(1,1);
  67:isr.c         **** 			bEPPflags.bits.control_state = USB_IDLE;
  68:isr.c         **** 			return;
  69:isr.c         **** 		}
  70:isr.c         **** //		ControlData.DeviceRequest.wValue = SWAP(ControlData.DeviceRequest.wValue);
  71:isr.c         **** //		ControlData.DeviceRequest.wIndex = SWAP(ControlData.DeviceRequest.wIndex);
  72:isr.c         **** //		ControlData.DeviceRequest.wLength = SWAP(ControlData.DeviceRequest.wLength);
  73:isr.c         **** 		//对控制端点的输入/输出进行应答
  74:isr.c         **** 		D12_AcknowledgeEndpoint(0);
  75:isr.c         **** 		D12_AcknowledgeEndpoint(1);
  76:isr.c         **** 		ControlData.wLength = ControlData.DeviceRequest.wLength;
  77:isr.c         **** 		ControlData.wCount = 0;
  78:isr.c         **** 		if(ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
  79:isr.c         **** 		{
  80:isr.c         **** 			//从主机传输数据
  81:isr.c         **** 			bEPPflags.bits.setup_packet = 1;
  82:isr.c         **** //			put_c(bEPPflags.bits.setup_packet);
  83:isr.c         **** 			bEPPflags.bits.control_state = USB_TRANSMIT;	//设置状态
  84:isr.c         **** 		}
  85:isr.c         **** 		else
  86:isr.c         **** 		{
  87:isr.c         **** 			if(ControlData.DeviceRequest.wLength ==0)
  88:isr.c         **** 			{
  89:isr.c         **** 				bEPPflags.bits.setup_packet = 1;
  90:isr.c         **** 				bEPPflags.bits.control_state = USB_IDLE;	//设置状态
  91:isr.c         **** 			}
  92:isr.c         **** 			else
  93:isr.c         **** 			{
  94:isr.c         **** 				if(ControlData.DeviceRequest.wLength > MAX_CONTROLDATA_SIZE)
  95:isr.c         **** 				{	//接收数据长度为0
  96:isr.c         **** 					bEPPflags.bits.control_state = USB_IDLE;
  97:isr.c         **** 					D12_SetEndpointStatus(0,1);
  98:isr.c         **** 					D12_SetEndpointStatus(1,1);
  99:isr.c         **** 				}
 100:isr.c         **** 				else
 101:isr.c         **** 					bEPPflags.bits.control_state = USB_RECEIVE;	//设置接收状态
 102:isr.c         **** 			}//set command with data
 103:isr.c         **** 		}//else set command
 104:isr.c         **** 	}//if setuppacket
 105:isr.c         **** 	else
 106:isr.c         **** 	{
 107:isr.c         **** 		if(bEPPflags.bits.control_state == USB_RECEIVE)
 108:isr.c         **** 		{												//接收数据
 109:isr.c         **** 			i=D12_ReadEndpoint(0,EP0_PACKET_SIZE,ControlData.dataBuffer+ControlData.wCount);
 110:isr.c         **** 			ControlData.wCount+=i;
 111:isr.c         **** 			if(i != EP0_PACKET_SIZE || ControlData.wCount>=ControlData.wLength)
 112:isr.c         **** 			{											//数据接收完毕
 113:isr.c         **** 				bEPPflags.bits.setup_packet = 1;
 114:isr.c         **** 				bEPPflags.bits.control_state = USB_IDLE;
 115:isr.c         **** 			}
 116:isr.c         **** 		}
 117:isr.c         **** 		else
 118:isr.c         **** 			bEPPflags.bits.control_state = USB_IDLE;	//进入等待状态
 119:isr.c         **** 	}
 120:isr.c         **** }
 121:isr.c         **** //端点0IN处理
 122:isr.c         **** void ep0_txdone(void)
 123:isr.c         **** {
 124:isr.c         **** 	unsigned char j;
 125:isr.c         **** 	short i=ControlData.wLength-ControlData.wCount;
 126:isr.c         **** 	j=D12_ReadLastTransactionStatus(1);			//清中断标志位
 127:isr.c         **** //	put_c(j);
 128:isr.c         **** 	if(bEPPflags.bits.control_state != USB_TRANSMIT)
 129:isr.c         **** 		return;								//非发送状态,返回
 130:isr.c         **** 	if(i>=EP0_PACKET_SIZE)
 131:isr.c         **** 	{											//剩下数据大于16B,发送16B
 132:isr.c         **** 		D12_WriteEndpoint(1,EP0_PACKET_SIZE,ControlData.pData+ControlData.wCount);
 133:isr.c         **** 		ControlData.wCount+=EP0_PACKET_SIZE;
 134:isr.c         **** 		bEPPflags.bits.control_state = USB_TRANSMIT;
 135:isr.c         **** 	}
 136:isr.c         **** 	else
 137:isr.c         **** 	{
 138:isr.c         **** 		if(i !=0)
 139:isr.c         **** 		{										//发送剩下数据
 140:isr.c         **** 			D12_WriteEndpoint(1,i,ControlData.pData+ControlData.wCount);
 141:isr.c         **** 			ControlData.wCount+=i;
 142:isr.c         **** 			bEPPflags.bits.control_state = USB_IDLE;
 143:isr.c         **** 		}
 144:isr.c         **** 		else
 145:isr.c         **** 		{
 146:isr.c         **** 			if(i==0)
 147:isr.c         **** 			{
 148:isr.c         **** 				D12_WriteEndpoint(1,0,0);		//发送完毕,发送0B
 149:isr.c         **** 				bEPPflags.bits.control_state = USB_IDLE;
 150:isr.c         **** 			}
 151:isr.c         **** 		}
 152:isr.c         **** 	}	
 153:isr.c         **** }
 154:isr.c         **** //MDA结束处理
 155:isr.c         **** void dma_eot(void)
 156:isr.c         **** {
 111               	.LM1:
 112               	/* prologue: frame size=0 */
 113               	/* prologue end (size=0) */
 114               	/* epilogue: frame size=0 */
 115 0000 0895      		ret
 116               	/* epilogue end (size=1) */
 117               	/* function dma_eot size 1 (0) */
 119               	.Lscope0:
 121               	.global	main_txdone
 123               	main_txdone:
 157:isr.c         **** //	LED();
 158:isr.c         **** }
 159:isr.c         **** //端点1IN处理
 160:isr.c         **** void ep1_txdone(void)
 161:isr.c         **** {
 162:isr.c         **** 	unsigned char j;
 163:isr.c         **** 	j=D12_ReadLastTransactionStatus(3);			//清中断标志位
 164:isr.c         **** //	LED();
 165:isr.c         **** }
 166:isr.c         **** //端点1OUT处理
 167:isr.c         **** void ep1_rxdone(void)
 168:isr.c         **** {
 169:isr.c         **** 	unsigned char len,j;
 170:isr.c         **** 	j=D12_ReadLastTransactionStatus(2);			//清中断标志位
 171:isr.c         **** 	len=D12_ReadEndpoint(2,sizeof(GenEpBuf),GenEpBuf);//读取数据
 172:isr.c         **** 	if(len != 0)
 173:isr.c         **** 		bEPPflags.bits.ep1_rxdone=1;			//标志接收到数据
 174:isr.c         **** //	LED();
 175:isr.c         **** }
 176:isr.c         **** //主端点IN控制
 177:isr.c         **** void main_txdone(void)
 178:isr.c         **** {
 125               	.LM2:
 126               	/* prologue: frame size=0 */
 127               	/* prologue end (size=0) */
 179:isr.c         **** 	unsigned char j;
 180:isr.c         **** 	j=D12_ReadLastTransactionStatus(5);			//清中断标志位	
 129               	.LM3:
 130 0002 85E0      		ldi r24,lo8(5)
 131 0004 0E94 0000 		call D12_ReadLastTransactionStatus
 132               	/* epilogue: frame size=0 */
 133 0008 0895      		ret
 134               	/* epilogue end (size=1) */
 135               	/* function main_txdone size 4 (3) */
 137               	.Lscope1:
 139               	.global	ep1_txdone
 141               	ep1_txdone:
 143               	.LM4:
 144               	/* prologue: frame size=0 */
 145               	/* prologue end (size=0) */
 147               	.LM5:
 148 000a 83E0      		ldi r24,lo8(3)
 149 000c 0E94 0000 		call D12_ReadLastTransactionStatus
 150               	/* epilogue: frame size=0 */
 151 0010 0895      		ret
 152               	/* epilogue end (size=1) */
 153               	/* function ep1_txdone size 4 (3) */
 155               	.Lscope2:
 157               	.global	ep1_rxdone
 159               	ep1_rxdone:
 161               	.LM6:
 162               	/* prologue: frame size=0 */
 163               	/* prologue end (size=0) */
 165               	.LM7:
 166 0012 82E0      		ldi r24,lo8(2)
 167 0014 0E94 0000 		call D12_ReadLastTransactionStatus
 169               	.LM8:
 170 0018 40E0      		ldi r20,lo8(GenEpBuf)
 171 001a 50E0      		ldi r21,hi8(GenEpBuf)
 172 001c 60E4      		ldi r22,lo8(64)
 173 001e 82E0      		ldi r24,lo8(2)
 174 0020 0E94 0000 		call D12_ReadEndpoint
 176               	.LM9:
 177 0024 8823      		tst r24
 178 0026 29F0      		breq .L4
 180               	.LM10:
 181 0028 8091 0000 		lds r24,bEPPflags+1
 182 002c 8460      		ori r24,lo8(4)
 183 002e 8093 0000 		sts bEPPflags+1,r24
 184               	.L4:
 185 0032 0895      		ret
 186               	/* epilogue: frame size=0 */
 187               	/* epilogue: noreturn */
 188               	/* epilogue end (size=0) */
 189               	/* function ep1_rxdone size 17 (17) */
 191               	.Lscope3:
 193               	.global	ep0_rxdone
 195               	ep0_rxdone:
 197               	.LM11:
 198               	/* prologue: frame size=0 */
 199               	/* prologue end (size=0) */
 201               	.LM12:
 202 0034 80E0      		ldi r24,lo8(0)
 203 0036 0E94 0000 		call D12_ReadLastTransactionStatus
 205               	.LM13:
 206 003a 85FF      		sbrs r24,5
 207 003c 4FC0      		rjmp .L7
 209               	.LM14:
 210 003e 1092 0000 		sts (ControlData+8)+1,__zero_reg__
 211 0042 1092 0000 		sts ControlData+8,__zero_reg__
 213               	.LM15:
 214 0046 1092 0000 		sts (ControlData+10)+1,__zero_reg__
 215 004a 1092 0000 		sts ControlData+10,__zero_reg__
 217               	.LM16:
 218 004e 40E0      		ldi r20,lo8(ControlData)
 219 0050 50E0      		ldi r21,hi8(ControlData)
 220 0052 68E0      		ldi r22,lo8(8)
 221 0054 80E0      		ldi r24,lo8(0)
 222 0056 0E94 0000 		call D12_ReadEndpoint
 223 005a 8830      		cpi r24,lo8(8)
 224 005c 59F0      		breq .L8
 226               	.LM17:
 227 005e 61E0      		ldi r22,lo8(1)
 228 0060 80E0      		ldi r24,lo8(0)
 229 0062 0E94 0000 		call D12_SetEndpointStatus
 231               	.LM18:
 232 0066 61E0      		ldi r22,lo8(1)
 233 0068 862F      		mov r24,r22
 234 006a 0E94 0000 		call D12_SetEndpointStatus
 236               	.LM19:
 237 006e 8091 0000 		lds r24,bEPPflags
 238 0072 5BC0      		rjmp .L21
 239               	.L8:
 241               	.LM20:
 242 0074 80E0      		ldi r24,lo8(0)
 243 0076 0E94 0000 		call D12_AcknowledgeEndpoint
 245               	.LM21:
 246 007a 81E0      		ldi r24,lo8(1)
 247 007c 0E94 0000 		call D12_AcknowledgeEndpoint
 249               	.LM22:
 250 0080 2091 0000 		lds r18,ControlData+6
 251 0084 3091 0000 		lds r19,(ControlData+6)+1
 252 0088 3093 0000 		sts (ControlData+8)+1,r19
 253 008c 2093 0000 		sts ControlData+8,r18
 255               	.LM23:
 256 0090 1092 0000 		sts (ControlData+10)+1,__zero_reg__
 257 0094 1092 0000 		sts ControlData+10,__zero_reg__
 259               	.LM24:
 260 0098 8091 0000 		lds r24,ControlData
 261 009c 87FF      		sbrs r24,7
 262 009e 07C0      		rjmp .L9
 264               	.LM25:
 265 00a0 8091 0000 		lds r24,bEPPflags
 267               	.LM26:
 268 00a4 8F77      		andi r24,lo8(127)
 269 00a6 8864      		ori r24,lo8(72)
 270               	.L20:
 271 00a8 8093 0000 		sts bEPPflags,r24
 272 00ac 0895      		ret
 273               	.L9:
 275               	.LM27:
 276 00ae 2115      		cp r18,__zero_reg__
 277 00b0 3105      		cpc r19,__zero_reg__
 278 00b2 C1F1      		breq .L18
 279 00b4 8091 0000 		lds r24,bEPPflags
 281               	.LM28:
 282 00b8 2930      		cpi r18,9
 283 00ba 3105      		cpc r19,__zero_reg__
 284 00bc 60F0      		brlo .L13
 286               	.LM29:
 287 00be 8F73      		andi r24,lo8(63)
 288 00c0 8093 0000 		sts bEPPflags,r24
 290               	.LM30:

⌨️ 快捷键说明

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