📄 isr.lst
字号:
C51 COMPILER V8.02 ISR 03/04/2008 13:50:51 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE ISR
OBJECT MODULE PLACED IN ISR.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ISR.C BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "d12.h"
2 #include "D12CI.H"
3 #include "uart.h"
4 #include "mytype.h"
5 #define SWAP(x) ((((uint16)(x))<<8)|(((uint16)(x))>>8))
6 EPPFLAGS bEPPflags;
7
8 /* Control endpoint TX/RX buffers */
9 extern CONTROL_XFER ControlData;
10 extern void bus_reset(void);
11
12 extern void ep0_txdone(void);
13 extern void ep0_rxdone(void);
14
15 extern void ep1_txdone(void);
16 extern void ep1_rxdone(void);
17
18 extern void main_txdone(void);
19 extern void main_rxdone(void);
20
21 extern void dma_eot(void);
22 unsigned char idata GenEpBuf[EP1_PACKET_SIZE];
23 unsigned char idata EpBuf[EP2_PACKET_SIZE];
24 //中断服务程序
25 void fn_usb_isr()
26 {
27 1 uint16 i_st;
28 1 Prints("IO");
29 1 bEPPflags.bits.in_isr=1;
30 1 i_st=D12_ReadInterruptRegister(); //读中断寄存器
31 1 if(i_st!=0)
32 1 {
33 2 Prints("\r\ni_st=");
34 2 PrintShortIntHex(i_st); //输出
35 2 if(i_st&D12_INT_BUSRESET)
36 2 {
37 3 bEPPflags.bits.bus_reset=1;
38 3 Prints("\r\n总线复位");
39 3 }
40 2 if(i_st&D12_INT_EOT)
41 2 dma_eot(); //DMA传输结束
42 2 if(i_st&D12_INT_SUSPENDCHANGE)
43 2 {
44 3 bEPPflags.bits.suspend=1;
45 3 D12_SetEndpointEnable(1);
46 3 Prints("\r\n总线挂起");
47 3 }
48 2
49 2 if(i_st&D12_INT_ENDP0IN)
50 2 ep0_txdone();
51 2 if(i_st&D12_INT_ENDP0OUT)
52 2 ep0_rxdone();
53 2
54 2 if(i_st&D12_INT_ENDP1IN)
55 2 ep1_txdone();
C51 COMPILER V8.02 ISR 03/04/2008 13:50:51 PAGE 2
56 2 if(i_st&D12_INT_ENDP1OUT)
57 2 ep1_rxdone();
58 2 if(i_st&D12_INT_ENDP2IN)
59 2 main_txdone();
60 2 if(i_st&D12_INT_ENDP2OUT)
61 2 main_rxdone();
62 2 }
63 1 bEPPflags.bits.in_isr=0;
64 1 }
65 //端点0OUT中断
66 void ep0_rxdone(void)
67 {
68 1 uint8 ep_last,i;
69 1 ep_last=D12_ReadLastTransactionStatus(0);
70 1 Prints("\r\neplast=");
71 1 PrintShortIntHex(ep_last);
72 1 if(ep_last&D12_SETUPPACKET)
73 1 {
74 2 ControlData.wLength=0;
75 2 ControlData.wCount=0;
76 2 Prints("\nEP0OUT");
77 2 if(D12_ReadEndpoint(0,sizeof(ControlData.DeviceRequest),(uint8 *)(&(ControlData.DeviceRequest)))!=sizeof
-(DEVICE_REQUEST))
78 2 {
79 3 Prints("\nEP0OUTRETURN");
80 3 D12_SetEndpointStatus(0,1);
81 3 D12_SetEndpointStatus(1,1);
82 3 bEPPflags.bits.control_state=USB_IDLE;//空闲
83 3 return ;
84 3 }
85 2 ControlData.DeviceRequest.wValue=SWAP(ControlData.DeviceRequest.wValue);
86 2 ControlData.DeviceRequest.wLength=SWAP(ControlData.DeviceRequest.wLength);
87 2 ControlData.DeviceRequest.wIndex=SWAP(ControlData.DeviceRequest.wIndex);
88 2 Prints("\r\nbmRequestType=");
89 2 PrintShortIntHex(ControlData.DeviceRequest.bmRequestType);
90 2 Prints("bRequest=");
91 2 PrintShortIntHex(ControlData.DeviceRequest.bRequest);
92 2 Prints("wValue=");
93 2 PrintShortIntHex(ControlData.DeviceRequest.wValue);
94 2 Prints("wIndex=");
95 2 PrintShortIntHex(ControlData.DeviceRequest.wIndex);
96 2 Prints("wLength");
97 2 PrintShortIntHex(ControlData.DeviceRequest.wLength);
98 2
99 2 D12_AcknowledgeEndpoint(0);
100 2 D12_AcknowledgeEndpoint(1);
101 2 ControlData.wLength=ControlData.DeviceRequest.wLength;
102 2 ControlData.wCount=0;
103 2 if(ControlData.DeviceRequest.bmRequestType&(uint8)USB_ENDPOINT_DIRECTION_MASK)
104 2 { //从设备传输数据 IN
105 3 bEPPflags.bits.setup_packet=1;
106 3 bEPPflags.bits.control_state=USB_TRANSMIT;
107 3 Prints("\r\n从设备传输数据进主机");
108 3 }
109 2 else //从主机到设备的数据OUT
110 2 {
111 3 if(ControlData.DeviceRequest.wLength==0) //该请求没有数据阶段则设置为空闲,不需要再接收数据
112 3 {
113 4 bEPPflags.bits.setup_packet=1;
114 4 bEPPflags.bits.control_state=USB_IDLE;
115 4 Prints("\r\n从主机传数据到设备");
116 4 }
C51 COMPILER V8.02 ISR 03/04/2008 13:50:51 PAGE 3
117 3 else
118 3 {
119 4 if(ControlData.DeviceRequest.wLength>MAX_CONTROLDATA_SIZE) //接收数据的长度出错
120 4 {
121 5 bEPPflags.bits.control_state=USB_IDLE;
122 5 D12_SetEndpointStatus(0,1);
123 5 D12_SetEndpointStatus(1,1);
124 5 Prints("\R\N接收数据的长度出错");
125 5
126 5 }
127 4 else
128 4 {
129 5 bEPPflags.bits.control_state=USB_RECEIVE; //带数据的请求,且长度没错,则要接收数据
130 5 Prints("\r\n带数据的请求,且长度没错");
131 5 }
132 4 }
133 3 }
134 2 }
135 1 else if(bEPPflags.bits.control_state==USB_RECEIVE)
136 1 {
137 2 i=D12_ReadEndpoint(0,EP0_PACKET_SIZE,ControlData.dataBuffer+ControlData.wCount);// 读取数据
138 2 ControlData.wCount+=i;
139 2 if(i!=EP0_PACKET_SIZE||ControlData.wCount>=ControlData.wLength) //如果接收完毕
140 2 {
141 3 bEPPflags.bits.setup_packet=1;
142 3 bEPPflags.bits.control_state=USB_IDLE;
143 3 }
144 2 }
145 1 else
146 1 { //既不是建立包又不是接收状态
147 2 bEPPflags.bits.control_state=USB_IDLE;
148 2 }
149 1 }
150 //端点0IN
151 void ep0_txdone(void)
152 {
153 1 uint16 i=ControlData.wLength-ControlData.wCount;
154 1 Prints("\r\nwLength=");
155 1 PrintShortIntHex(ControlData.wLength);
156 1 Prints("\r\nwCount=");
157 1 PrintShortIntHex(ControlData.wCount);
158 1 Prints("\r\ni=");
159 1 PrintShortIntHex(i);
160 1 D12_ReadLastTransactionStatus(1);
161 1 if(bEPPflags.bits.control_state!=USB_TRANSMIT) //非发送状态返回
162 1 return ;
163 1 if(i>=EP0_PACKET_SIZE)
164 1 {
165 2 D12_WriteEndpoint(1,EP0_PACKET_SIZE,ControlData.pData+ControlData.wCount);
166 2 ControlData.wCount+=EP0_PACKET_SIZE;
167 2 bEPPflags.bits.control_state=USB_TRANSMIT;
168 2 }
169 1 else if(i!=0)
170 1 {
171 2 D12_WriteEndpoint(1,i,ControlData.pData+ControlData.wCount);
172 2 ControlData.wCount+=i;
173 2 bEPPflags.bits.control_state=USB_IDLE;
174 2 }
175 1 else if(i==0)
176 1 {
177 2 D12_WriteEndpoint(1,0,0);
178 2 bEPPflags.bits.control_state=USB_IDLE;////发送完毕
C51 COMPILER V8.02 ISR 03/04/2008 13:50:51 PAGE 4
179 2 }
180 1 }
181 void dma_eot(void)
182 {
183 1 }
184 //端点1IN
185 void ep1_txdone(void)
186 {
187 1 D12_ReadLastTransactionStatus(3);
188 1 }
189 //OUT
190 void ep1_rxtone(void)
191 {
192 1 uint8 len;
193 1 D12_ReadLastTransactionStatus(2);
194 1 len=D12_ReadEndpoint(2,sizeof(GenEpBuf),GenEpBuf); //读取数据
195 1 if(len!=0)
196 1 bEPPflags.bits.ep1_rxdone=1;
197 1 }
198 //主端点IN
199 void main_txdone(void)
200 {
201 1 D12_ReadLastTransactionStatus(5);
202 1 }
203 //主OUT
204 /*void main_rxdone(void)
205 {
206 uint8 len,epstatus;
207 D12_ReadLastTransactionStatus(4);
208 epstatus=D12_ReadEndpointStatus(4);
209 epstatus&=0x60;
210 len=D12_ReadEndpoint(4,64,EpBuf);
211 if(epstatus==0x60)
212 len==D12_ReadEndpoint(4,64,EpBuf);
213
214 len = D12_ReadEndpoint(4, 64, EpBuf);
215 epstatus=D12_ReadEndpointStatus(4);
216 epstatus &= 0x60;
217 if (epstatus == 0x60)
218 len = D12_ReadEndpoint(4, 64, EpBuf);//读取双缓冲区数据
219 }*/
220 void main_rxdone(void)
221 {
222 1 unsigned char len,epstatus;
223 1
224 1 D12_ReadLastTransactionStatus(4); //清中断标志位
225 1
226 1 //接收数据
227 1 len = D12_ReadEndpoint(4, 64, EpBuf);
228 1 epstatus=D12_ReadEndpointStatus(4);
229 1 epstatus &= 0x60;
230 1 if (epstatus == 0x60)
231 1 len = D12_ReadEndpoint(4, 64, EpBuf);//读取双缓冲区数据
232 1 }
233
234
235
236
237
238
239
240
C51 COMPILER V8.02 ISR 03/04/2008 13:50:51 PAGE 5
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 841 ----
CONSTANT SIZE = 233 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 6
IDATA SIZE = 80 ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -