int main(void) { clk_Config(); comm_USBInit(); ... } void clk_Config(void) { int i; LPC_SYSCON->PDRUNCFG &= ~(1 << 5); // Power-up System Osc LPC_SYSCON->SYSOSCCTRL = 0;// not bypassed for (i = 0; i < 200; i++) Nop(); LPC_SYSCON->SYSPLLCLKSEL = 1; // system oscillator LPC_SYSCON->SYSPLLCLKUEN = 1; // Update Clock Source LPC_SYSCON->SYSPLLCLKUEN = 0; // Toggle Update Register LPC_SYSCON->SYSPLLCLKUEN = 1; while (!(LPC_SYSCON->SYSPLLCLKUEN & 0x01)); // Wait Until Updated LPC_SYSCON->SYSPLLCTRL = 0; // (out = sys_osc*1)/1 LPC_SYSCON->PDRUNCFG &= ~(1 << 7); // Power-up SYSPLL while (!(LPC_SYSCON->SYSPLLSTAT & 0x01)); // Wait Until PLL Locked LPC_SYSCON->MAINCLKSEL = 3; // sys_pll_out 3.5.15 LPC_SYSCON->MAINCLKUEN = 1; // Update MCLK Clock Source LPC_SYSCON->MAINCLKUEN = 0; // Toggle Update Register LPC_SYSCON->MAINCLKUEN = 1; while (!(LPC_SYSCON->MAINCLKUEN & 0x01)); // Wait Until Updated SystemCoreClock = 12000000; } void comm_USBInit(void) { volatile int n; HidDevInfo.idVendor = USB_VENDOR_ID; HidDevInfo.idProduct = USB_PRODUCT_ID; HidDevInfo.bcdDevice = USB_DEVICE; HidDevInfo.StrDescPtr = (uint32_t)&USB_StringDescriptor[0]; HidDevInfo.InReportCount = GET_PKT_NBYTES; HidDevInfo.OutReportCount = SET_PKT_NBYTES; HidDevInfo.SampleInterval = GET_PKT_INTERVAL_MS; HidDevInfo.InReport = GetInReport; HidDevInfo.OutReport = SetOutReport; DeviceInfo.DevType = USB_DEVICE_CLASS_HUMAN_INTERFACE; DeviceInfo.DevDetailPtr = (uint32_t)&HidDevInfo; // Enable Timer32_1, IOCON, and USB blocks (for USB ROM driver) LPC_SYSCON->SYSAHBCLKCTRL |= (EN_TIMER32_1 | EN_IOCON | EN_USBREG); // Setup USB clock LPC_SYSCON->PDRUNCFG &= ~(1 << 10); // usb phy powered LPC_SYSCON->PDRUNCFG &= ~(1 << 8); // usb pll powered LPC_SYSCON->USBPLLCLKSEL = 1; // system oscillator LPC_SYSCON->USBPLLCLKUEN = 1; // Update pll clock Source LPC_SYSCON->USBPLLCLKUEN = 0; // toggle LPC_SYSCON->USBPLLCLKUEN = 1; while (!(LPC_SYSCON->USBPLLCLKUEN & 0x01)); // Wait Until Updated LPC_SYSCON->USBPLLCTRL = 3; // (sys_osc * 4)/ 1 3.5.5 while (!(LPC_SYSCON->USBPLLSTAT & 1)); // Wait Until PLL Locked LPC_SYSCON->USBCLKSEL = 0; // Select USB PLL out 3.5.23 // Set USB pin functions LPC_IOCON->PIO0_1 &= ~0x07; LPC_IOCON->PIO0_1 |= 0x03; // usb ftoggle LPC_IOCON->PIO0_3 &= ~0x1F; LPC_IOCON->PIO0_3 |= 0x01; // usb vbus, no pullup/dn LPC_IOCON->PIO0_6 &= ~0x07; LPC_IOCON->PIO0_6 |= 0x01; // usb soft connect gGetPktCntr = 0; gSetPktCntr = 0; // clock PLL and pin init function in rom // unused //(*rom)->pUSBD->init_clk_pins(); // insert a delay between clk init and usb init for (n = 0; n < 75; n++) {} (*rom)->pUSBD->init(&DeviceInfo); (*rom)->pUSBD->connect(TRUE); } |