📄 d12isr.lst
字号:
197 3
198 3 D12_SetEndpointStatus(0, 1);
199 3 D12_SetEndpointStatus(1, 1);
200 3 bEPPflags.bits.control_state = USB_IDLE;
201 3
202 3 return;
203 3 }
204 2
205 2 ControlData.DeviceRequest.wValue = SWAP(ControlData.DeviceRequest.wValue);
206 2 ControlData.DeviceRequest.wIndex = SWAP(ControlData.DeviceRequest.wIndex);
207 2 ControlData.DeviceRequest.wLength = SWAP(ControlData.DeviceRequest.wLength);
208 2
209 2 // Acknowledge setup here to unlock in/out endp
210 2 //向控制输出端点发送应答建立命令以重新使能下一个建立阶段
211 2 D12_AcknowledgeEndpoint(0);
212 2 D12_AcknowledgeEndpoint(1);
213 2
214 2 ControlData.wLength = ControlData.DeviceRequest.wLength;
215 2 ControlData.wCount = 0;
216 2 //需要证实控制传输是控制读还是写,如果是读:
217 2 //如果控制传输是一个控制读类型那就是说器件需要在下一个数据阶段向
218 2 //主机发回数据包.MCU需要设置一个标志以指示USB 设备现在正处于传输
219 2 //模式即准备在主机发送请求时发送数据
220 2
221 2 if (ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK)
222 2 {
223 3 bEPPflags.bits.setup_packet = 1;
224 3 bEPPflags.bits.control_state = USB_TRANSMIT; /* get command *///设置状态
225 3 }
226 2 //如果是写
227 2 else
228 2 {
229 3 if (ControlData.DeviceRequest.wLength == 0)
230 3 {
231 4 bEPPflags.bits.setup_packet = 1;
232 4 bEPPflags.bits.control_state = USB_IDLE; /* set command */
233 4 }
234 3 else
235 3 {
236 4 if(ControlData.DeviceRequest.wLength > MAX_CONTROLDATA_SIZE)
237 4 {
238 5 bEPPflags.bits.control_state = USB_IDLE;
239 5 D12_SetEndpointStatus(0, 1);
C51 COMPILER V7.01 D12ISR 11/14/2003 09:44:52 PAGE 5
240 5 D12_SetEndpointStatus(1, 1);
241 5 }
242 4 else
243 4 {
244 5 bEPPflags.bits.control_state = USB_RECEIVE; /* set command with OUT token */
245 5 }
246 4 } // set command with data
247 3 } // else set command
248 2 } // if setup packet
249 1
250 1 else if (bEPPflags.bits.control_state == USB_RECEIVE)
251 1 {//接受数据完毕
252 2 i =D12_ReadBuffer(0, ControlData.dataBuffer + ControlData.wCount,EP0_PACKET_SIZE);
253 2
254 2 ControlData.wCount += i;
255 2
256 2 if( (i != EP0_PACKET_SIZE) || (ControlData.wCount >= ControlData.wLength))
257 2 {//数据接受完毕
258 3 bEPPflags.bits.setup_packet = 1;
259 3 bEPPflags.bits.control_state = USB_IDLE;
260 3 }
261 2 }
262 1
263 1 else
264 1 {
265 2 bEPPflags.bits.control_state = USB_IDLE;//进入等待状态
266 2 }
267 1
268 1 }
269 //control in function
270 void ep0_txdone(void)
271 {
272 1 short i = ControlData.wLength - ControlData.wCount;
273 1
274 1 D12_ReadLastTransactionStatus(1); // Clear interrupt flag
275 1
276 1 if (bEPPflags.bits.control_state != USB_TRANSMIT)
277 1
278 1 {
279 2 return; //非发送状态,返回
280 2 }
281 1 //-------------------------
282 1
283 1 if( i >= EP0_PACKET_SIZE)
284 1 {//剩下数据大于16B,发送16B
285 2 //ControlData.pData=&ControlData.dataBuffer;
286 2 D12_WriteBuffer(1, ControlData.pData + ControlData.wCount,EP0_PACKET_SIZE);
287 2
288 2 ControlData.wCount += EP0_PACKET_SIZE;
289 2
290 2 bEPPflags.bits.control_state = USB_TRANSMIT;
291 2 }
292 1 else if( i != 0)
293 1 {// 发送剩下数据
294 2 D12_WriteBuffer(1,ControlData.pData + ControlData.wCount,i);
295 2
296 2 ControlData.wCount += i;
297 2
298 2 bEPPflags.bits.control_state = USB_IDLE;
299 2 }
300 1 else if (i == 0)
301 1 {
C51 COMPILER V7.01 D12ISR 11/14/2003 09:44:52 PAGE 6
302 2 D12_WriteBuffer(1, 0, 0); // Send zero packet at the end ???
303 2
304 2 bEPPflags.bits.control_state = USB_IDLE;
305 2 }
306 1 }
307 //----------------------------------
308 void ep1_txdone(void)
309 {
310 1
311 1 D12_ReadLastTransactionStatus(3); /* Clear interrupt flag */
312 1
313 1 //dd[0]=0x01;
314 1 //dd[1]=0x12;
315 1 //dd[2]=0x13;
316 1 //dd[3]=0x11;
317 1 //for(k=0;k<10;k++)
318 1 //{ D12_WriteBuffer(3,dd,2);}
319 1 }
320
321 void ep1_rxdone(void)
322 {
323 1 unsigned char len;
324 1
325 1 D12_ReadLastTransactionStatus(2); /* Clear interrupt flag */
326 1
327 1 len = D12_ReadBuffer(2,GenEpBuf,sizeof(GenEpBuf));
328 1
329 1 if(len != 0)
330 1
331 1 bEPPflags.bits.ep1_rxdone = 1;
332 1 }
333
334
335 void main_txdone(void)
336 {
337 1 unsigned char len;
338 1
339 1 D12_ReadLastTransactionStatus(5); /* Clear interrupt flag */
340 1
341 1 len = ioSize - ioCount;
342 1 /*if(len == 0)
343 1 {
344 1 if(bEPPflags.bits.dma_state == DMA_PENDING)
345 1 bEPPflags.bits.setup_dma ++;
346 1 else
347 1 bEPPflags.bits.dma_state = DMA_IDLE;
348 1 }
349 1 else
350 1 {*/
351 1 if(len > 64)
352 1 len = 64;
353 1 if(bNoRAM)
354 1
355 1
356 1 len = D12_WriteBuffer(5, EpBuf+ ioCount , len);
357 1 else
358 1
359 1 len = D12_WriteBuffer(5, MainEpBuf+ ioCount ,len );
360 1 ioCount += len;
361 1 //}
362 1 }
363
C51 COMPILER V7.01 D12ISR 11/14/2003 09:44:52 PAGE 7
364 void main_rxdone(void)
365 {
366 1 unsigned char len;
367 1
368 1 D12_ReadLastTransactionStatus(4); /* Clear interrupt flag */
369 1
370 1 if(bNoRAM)
371 1 len = D12_ReadBuffer(4, EpBuf + ioCount,64);
372 1 else
373 1 len = D12_ReadBuffer(4, MainEpBuf + ioCount,64 );
374 1 //ioCount += len;
375 1
376 1 /*if(ioCount >= ioSize)
377 1 {
378 1 if(bEPPflags.bits.dma_state == DMA_PENDING)
379 1 bEPPflags.bits.setup_dma ++;
380 1 else
381 1 bEPPflags.bits.dma_state = DMA_IDLE;
382 1 }*/
383 1
384 1 }
385
386
387
388
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 838 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 256 ----
PDATA SIZE = 9 5
DATA SIZE = ---- ----
IDATA SIZE = 90 ----
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 + -