// EP 3 IN #define USB_AUDIO_ENDPOINT_ADDRESS 0x83 #define USB_AUDIO_ENDPOINT 3 #define USB_AUDIO_ENDPOINT_INDEX 7 // Handle frame request interrupt ErrorCode_t USB_AUDIO_FRAME_HANDLER(USBD_HANDLE_T hUsb, void* data, uint32_t event) { TOGGLE_LED(); return LPC_OK; } void USB_Init(void) { // enable USB PLL and clocks Chip_USB_Init(); // Dev, AHB clock enable LPC_USB->USBClkCtrl = 0x12; while ((LPC_USB->USBClkSt & 0x12) != 0x12) ; // call back structures USBD_API_INIT_PARAM_T usb_param; memset((void *) &usb_param, 0, sizeof(USBD_API_INIT_PARAM_T)); usb_param.usb_reg_base = LPC_USB_BASE + 0x200; usb_param.max_num_ep = 4; usb_param.mem_base = USB_STACK_MEM_BASE; usb_param.mem_size = USB_STACK_MEM_SIZE; // Set the USB descriptors USB_CORE_DESCS_T desc; desc.device_desc = (uint8_t *) &USB_DeviceDescriptor[0]; desc.string_desc = (uint8_t *) &USB_StringDescriptor[0]; desc.high_speed_desc = (uint8_t *) &USB_FsConfigDescriptor[0]; desc.full_speed_desc = (uint8_t *) &USB_FsConfigDescriptor[0]; desc.device_qualifier = 0; // USB Initialization ErrorCode_t ret = USBD_API->hw->Init(&g_hUsb, &desc, &usb_param); // Check if initialisation was successfull if (ret == LPC_OK) { // Install usb class handler ret = USBD_API->core->RegisterClassHandler(g_hUsb, USB_Class_Handler, &g_hUsb); // Check if handler installation was successful if (ret == LPC_OK) { // Register endpoint handler for streaming interface ret = USBD_API->core->RegisterEpHandler(g_hUsb, USB_AUDIO_ENDPOINT_INDEX, USB_AUDIO_FRAME_HANDLER, &g_hUsb); // Enable streaming endpoint USBD_API->hw->EnableEP(g_hUsb, USB_AUDIO_ENDPOINT_ADDRESS); // Check if handler installation was successful if (ret == LPC_OK) { // Enable USB interrupts NVIC_EnableIRQ(USB_IRQn); // Connect USB USBD_API->hw->Connect(g_hUsb, 1); // Realise EP3 LPC_USB->ReEp |= (1 << USB_AUDIO_ENDPOINT); // Set endpoint package size LPC_USB->EpInd = USB_AUDIO_ENDPOINT; LPC_USB->MaxPSize = 828; // Disable dma for EP3 LPC_USB->EpDMADis = (1 << USB_AUDIO_ENDPOINT); // Enable TX interrupt for EP3 LPC_USB->EpIntEn |= (1 << USB_AUDIO_ENDPOINT); // Enable frame request interrupt LPC_USB->DevIntEn |= 1; } } } } |