void board_init(void) { /* Raise core clock to 204MHz */ CGU_Init(204000000); /* Set up USB0 clock */ /* Disable PLL first */ CGU_EnableEntity(CGU_CLKSRC_PLL0, DISABLE); /* the usb core require output clock = 480MHz */ if (CGU_SetPLL0() != CGU_ERROR_SUCCESS) { while (1); } CGU_EntityConnect(CGU_CLKSRC_XTAL_OSC, CGU_CLKSRC_PLL0); /* Enable PLL after all setting is done */ CGU_EnableEntity(CGU_CLKSRC_PLL0, ENABLE); /* Turn on the USB0PHY */ LPC_CREG->CREG0 &= ~(1 << 5); }
/********************************************************************** ** Function name: ** ** Description: ** ** Parameters: ** ** Returned value: **********************************************************************/ void Hid_init (void) { USBD_API_INIT_PARAM_T usb_param; USB_CORE_DESCS_T desc; ErrorCode_t ret; USB_INTERFACE_DESCRIPTOR* pIntfDesc; volatile uint32_t CoreM4Freq; // SystemInit(); // CGU_Init(); CoreM4Freq = CGU_GetPCLKFrequency(CGU_PERIPHERAL_M3CORE); /* Disable PLL first */ CGU_EnableEntity(CGU_CLKSRC_PLL0, DISABLE); /* the usb core require output clock = 480MHz */ if(CGU_SetPLL0() != CGU_ERROR_SUCCESS) while(1); CGU_EntityConnect(CGU_CLKSRC_PLL0, CGU_CLKSRC_PLL0); /* Enable PLL after all setting is done */ CGU_EnableEntity(CGU_CLKSRC_PLL0, ENABLE); /* Re-Update the clock freq */ CGU_UpdateClock(); /* Distribute to USB0 base clock */ CGU_EntityConnect(CGU_CLKSRC_PLL0, CGU_BASE_USB0); /* Generate interrupt @ 1000 Hz */ // SysTick_Config(CGU_GetPCLKFrequency(CGU_PERIPHERAL_M3CORE)/1000); /* initilize call back structures */ memset((void*)&usb_param, 0, sizeof(USBD_API_INIT_PARAM_T)); usb_param.usb_reg_base = LPC_USB0_BASE; usb_param.max_num_ep = 6; usb_param.mem_base = 0x20004000; usb_param.mem_size = 0x2000; usb_param.USB_Configure_Event1 = USB_Configure_Event1; /* for eagle/raptor the local SRAM is not accesable to USB * so copy the descriptors to USB accessable memory */ copy_descriptors(&desc, usb_param.mem_base + usb_param.mem_size); /* Turn on the phy */ LPC_CREG->CREG0 &= ~(1<<5); /* USB Initialization */ ret = USBD_API->hw->Init(&hUsb, &desc, &usb_param); if (ret == LPC_OK) { pIntfDesc = (USB_INTERFACE_DESCRIPTOR*)((uint32_t)desc.high_speed_desc + USB_CONFIGUARTION_DESC_SIZE); ret = usb_hid_init(hUsb, pIntfDesc, &usb_param.mem_base, &usb_param.mem_size); if (ret != LPC_OK) vCatchError(0); //"usb_hid_init error!!!" if (ret == LPC_OK) { NVIC_EnableIRQ(USB0_IRQn); // enable USB0 interrrupts /* now connect */ USBD_API->hw->Connect(hUsb, 1); } } else { vCatchError(1); //"\r\nhwUSB_Init error!!!" } #if 0 while (1) { u32Milliseconds = 100; /* Wait... */ while(u32Milliseconds); } #endif }