USB Device ROM Stack API example program

Dependencies:   mbed

LPC1549のROM APIを使ったRAMディスクです。PCからはUSBメモリとして見えます。

参考:
http://docs.lpcware.com/usbromlib/v1.0/

usbd_LPC1549.c

Committer:
va009039
Date:
2014-03-14
Revision:
0:ef2c0c52abc4

File content as of revision 0:ef2c0c52abc4:

#include <rl_usb.h>
#include <LPC15xx.h>

/*
 *  USB Device Initialize Function
 *   Called by the User to initialize USB Device
 *    Return Value:    None
 */

void USBD_Init (void)
{
	/* Set USB PLL input to main oscillator */
    LPC_SYSCON->USBPLLCLKSEL = 0x01;
    /* Setup USB PLL  (FCLKIN = 12MHz) * 4 = 48MHz
	   MSEL = 3 (this is pre-decremented), PSEL = 1 (for P = 2)
	   FCLKOUT = FCLKIN * (MSEL + 1) = 12MHz * 4 = 48MHz
	   FCCO = FCLKOUT * 2 * P = 48MHz * 2 * 2 = 192MHz (within FCCO range) */
    LPC_SYSCON->USBPLLCTRL = 3|(1<<6);

	/* Powerup USB PLL */  
    LPC_SYSCON->PDRUNCFG &= ~(1<<23);

    /* Wait for PLL to lock */
    while(!(LPC_SYSCON->USBPLLSTAT&0x01));

    /* enable USB main clock */
    LPC_SYSCON->USBCLKSEL = 0x02;
    LPC_SYSCON->USBCLKDIV = 1;
    /* Enable AHB clock to the USB block. */
    LPC_SYSCON->SYSAHBCLKCTRL1 |= (1<<23);
    /* power UP USB Phy */
    LPC_SYSCON->PDRUNCFG &= ~(1<<9);
    /* Reset USB block */
    LPC_SYSCON->PRESETCTRL1 |= (1<23);
}

/*
 *  USB Device Connect Function
 *   Called by the User to Connect/Disconnect USB Device
 *    Parameters:      con:   Connect/Disconnect
 *    Return Value:    None
 */

void USBD_Connect(uint8_t con)
{
    if (con) {
        NVIC_EnableIRQ(USB_IRQ_IRQn);
    } else {
        NVIC_DisableIRQ(USB_IRQ_IRQn);
    }
}

/*
 *  USB Device Interrupt Service Routine
 */

void USB_IRQ_IRQHandler(void) {
  pUsbApi->hw->ISR(hUsb);
}