📄 isr.lst
字号:
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 + -