USB Device ROM Stack API example program

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers usbd_LPC1549.c Source File

usbd_LPC1549.c

00001 #include <rl_usb.h>
00002 #include <LPC15xx.h>
00003 
00004 /*
00005  *  USB Device Initialize Function
00006  *   Called by the User to initialize USB Device
00007  *    Return Value:    None
00008  */
00009 
00010 void USBD_Init (void)
00011 {
00012     /* Set USB PLL input to main oscillator */
00013     LPC_SYSCON->USBPLLCLKSEL = 0x01;
00014     /* Setup USB PLL  (FCLKIN = 12MHz) * 4 = 48MHz
00015        MSEL = 3 (this is pre-decremented), PSEL = 1 (for P = 2)
00016        FCLKOUT = FCLKIN * (MSEL + 1) = 12MHz * 4 = 48MHz
00017        FCCO = FCLKOUT * 2 * P = 48MHz * 2 * 2 = 192MHz (within FCCO range) */
00018     LPC_SYSCON->USBPLLCTRL = 3|(1<<6);
00019 
00020     /* Powerup USB PLL */  
00021     LPC_SYSCON->PDRUNCFG &= ~(1<<23);
00022 
00023     /* Wait for PLL to lock */
00024     while(!(LPC_SYSCON->USBPLLSTAT&0x01));
00025 
00026     /* enable USB main clock */
00027     LPC_SYSCON->USBCLKSEL = 0x02;
00028     LPC_SYSCON->USBCLKDIV = 1;
00029     /* Enable AHB clock to the USB block. */
00030     LPC_SYSCON->SYSAHBCLKCTRL1 |= (1<<23);
00031     /* power UP USB Phy */
00032     LPC_SYSCON->PDRUNCFG &= ~(1<<9);
00033     /* Reset USB block */
00034     LPC_SYSCON->PRESETCTRL1 |= (1<23);
00035 }
00036 
00037 /*
00038  *  USB Device Connect Function
00039  *   Called by the User to Connect/Disconnect USB Device
00040  *    Parameters:      con:   Connect/Disconnect
00041  *    Return Value:    None
00042  */
00043 
00044 void USBD_Connect(uint8_t con)
00045 {
00046     if (con) {
00047         NVIC_EnableIRQ(USB_IRQ_IRQn);
00048     } else {
00049         NVIC_DisableIRQ(USB_IRQ_IRQn);
00050     }
00051 }
00052 
00053 /*
00054  *  USB Device Interrupt Service Routine
00055  */
00056 
00057 void USB_IRQ_IRQHandler(void) {
00058   pUsbApi->hw->ISR(hUsb);
00059 }