USB Device ROM Stack API example program
LPC1549のROM APIを使ったRAMディスクです。PCからはUSBメモリとして見えます。
参考:
http://docs.lpcware.com/usbromlib/v1.0/
Diff: usbd_LPC1549.c
- Revision:
- 0:ef2c0c52abc4
diff -r 000000000000 -r ef2c0c52abc4 usbd_LPC1549.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usbd_LPC1549.c Fri Mar 14 09:14:16 2014 +0000 @@ -0,0 +1,59 @@ +#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); +}