// 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;
}
}
}
}
|