Пример #1
0
/*
 *  USB Endpoint 3 Event Callback
 *   Called automatically on USB Endpoint 3 Event
 *    Parameter:       event
 */
void USB_EndPoint3(uint32_t event) {
	uint32_t cnt;
	switch (event) {
	case USB_EVT_OUT:
		if (LASERSHARK_USB_DATA_BULK_PACKET_SAMPLE_COUNT+1 > lasershark_get_empty_sample_count()) {
			//We can't sit around here all day! Have the main thread loop trigger this when ready.
			lasershark_set_bulk_data_interrupt_needs_retrigger();
			return;
		}

		LPC_USB->Ctrl = ((USB_ENDPOINT_OUT(3) & 0x0F) << 2) | CTRL_RD_EN; // enable read
		// 3 clock cycles to fetch the packet length from RAM.
		asm("nop");
		asm("nop");
		asm("nop");
		asm("nop");
		

		if ((cnt = LPC_USB->RxPLen) & PKT_DV) { // We have data...
			cnt &= PKT_LNGTH_MASK; // Get length in bytes
			lasershark_process_data(cnt);
			LPC_USB->Ctrl = 0;
		}
		LPC_USB->Ctrl = 0; // Disable read mode.. do this if you ever want to see a USB packet again
	    WrCmdEP(USB_ENDPOINT_OUT(3), CMD_CLR_BUF);
		break;
	}
}
Пример #2
0
/*
 *  USB Endpoint 3 Event Callback
 *   Called automatically on USB Endpoint 3 Event
 *    Parameter:       event
 */
void USB_EndPoint3(uint32_t event) {
	uint32_t cnt;
	switch (event) {
	case USB_EVT_OUT:
		while (1) {
			if (LASERSHARK_USB_DATA_BULK_SIZE <= lasershark_get_empty_sample_count()) {
				break;
			}
		}

		LPC_USB->Ctrl = ((USB_ENDPOINT_OUT(3) & 0x0F) << 2) | CTRL_RD_EN; // enable read
		// 3 clock cycles to fetch the packet length from RAM.
		asm("nop");
		asm("nop");
		asm("nop");
		asm("nop");
		

		if ((cnt = LPC_USB->RxPLen) & PKT_DV) { // We have data...
			cnt &= PKT_LNGTH_MASK; // Get length in bytes
			lasershark_process_data(cnt);
			LPC_USB->Ctrl = 0;
		}
		LPC_USB->Ctrl = 0; // Disable read mode.. do this if you ever want to see a USB packet again
	    WrCmdEP(USB_ENDPOINT_OUT(3), CMD_CLR_BUF);
		break;
	}
}