Exemple #1
0
Fichier : usb.c Projet : nodep/wht
void usbPoll(void)
{
	if (!USBIRQ)
		return;

	// clear USB interrupt flag
	USBIRQ = 0;

	switch (ivec)
	{
	case INT_SUDAV:		// SETUP data packet
		usbirq = 0x01;	// clear interrupt flag

		usbRequestReceived();	// process setup data

		// arm the EP0 OUT in case we have data after the request
		out0bc = USB_EP0_SIZE;

		break;
	case INT_SOF:		// SOF packet
		usbirq = 0x02;	// clear interrupt flag
		++usbFrameCnt;
		break;
	/*
	case INT_SUTOK:		// setup token
		usbirq = 0x04;	// clear interrupt flag
		break;
		*/
	case INT_SUSPEND:	// SUSPEND signal
		usbirq = 0x08;	// clear interrupt flag
		break;
	case INT_USBRESET:	// USB bus reset
		usbirq = 0x10;	// clear interrupt flag
		usb_state = DEFAULT;	// reset internal states
		usb_current_config = 0;
		break;

	case INT_EP0IN:
		in_irq = 0x01;	// clear interrupt flag
		// update USB RAM EP0 IN with new data
		packetizer_isr_ep0_in();
		break;

	case INT_EP0OUT:
		out_irq = 0x01;	// clear interrupt flag
		usbRequestDataReceived();
		out0bc = USB_EP0_SIZE;	// rearm the next EP0 OUT
		break;

	case INT_EP1IN:
		in_irq = 0x02;	// clear interrupt flag
		//out0bc = USB_EP0_SIZE;
		break;
	case INT_EP2IN:
		in_irq = 0x04;	// clear interrupt flag
		//out0bc = USB_EP0_SIZE;
		break;
	}
}
Exemple #2
0
void usbPoll(void)
{
	if (!USBIRQ)
		return;

	// clear USB interrupt flag
	USBIRQ = 0;

	switch (ivec)
	{
	case INT_SUDAV:		// SETUP data packet
		usbirq = 0x01;	// clear interrupt flag

		usbRequestReceived();	// process setup data

		// arm the EP0 OUT in case we have data after the request
		out0bc = 0x40;
		
		break;
	case INT_SOF:		// SOF packet
		usbirq = 0x02;	// clear interrupt flag
		++usbFrameCnt;
		break;
	/*
	case INT_SUTOK:		// setup token
		usbirq = 0x04;	// clear interrupt flag
		break;
		*/
	case INT_SUSPEND:	// SUSPEND signal
		usbirq = 0x08;	// clear interrupt flag
		break;
	case INT_USBRESET:	// USB bus reset
		usbirq = 0x10;	// clear interrupt flag
		usb_state = DEFAULT;	// reset internal states
		usb_current_config = 0;
		break;

	case INT_EP0IN:
		in_irq = 0x01;	// clear interrupt flag
		// update USB RAM EP0 IN with new data
		packetizer_isr_ep0_in();
		break;
		
	case INT_EP0OUT:
		out_irq = 0x01;	// clear interrupt flag
		
		usbRequestDataReceived();
		
		// rearm the next EP0 OUT
		out0bc = 0x40;
		break;

	case INT_EP1IN:
		in_irq = 0x02;	// clear interrupt flag
		// user code will have already filled IN1 buffer and set byte count
		// USB controller clears busy flag when data is sent
		
		break;
	case INT_EP1OUT:
		out_irq = 0x02;	// clear interrupt flag
		break;
	}
}