USB Device ROM Stack API example program

Dependencies:   mbed

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

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

Committer:
va009039
Date:
Fri Mar 14 09:14:16 2014 +0000
Revision:
0:ef2c0c52abc4
first commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 0:ef2c0c52abc4 1 #include <rl_usb.h>
va009039 0:ef2c0c52abc4 2 #include <LPC15xx.h>
va009039 0:ef2c0c52abc4 3
va009039 0:ef2c0c52abc4 4 /*
va009039 0:ef2c0c52abc4 5 * USB Device Initialize Function
va009039 0:ef2c0c52abc4 6 * Called by the User to initialize USB Device
va009039 0:ef2c0c52abc4 7 * Return Value: None
va009039 0:ef2c0c52abc4 8 */
va009039 0:ef2c0c52abc4 9
va009039 0:ef2c0c52abc4 10 void USBD_Init (void)
va009039 0:ef2c0c52abc4 11 {
va009039 0:ef2c0c52abc4 12 /* Set USB PLL input to main oscillator */
va009039 0:ef2c0c52abc4 13 LPC_SYSCON->USBPLLCLKSEL = 0x01;
va009039 0:ef2c0c52abc4 14 /* Setup USB PLL (FCLKIN = 12MHz) * 4 = 48MHz
va009039 0:ef2c0c52abc4 15 MSEL = 3 (this is pre-decremented), PSEL = 1 (for P = 2)
va009039 0:ef2c0c52abc4 16 FCLKOUT = FCLKIN * (MSEL + 1) = 12MHz * 4 = 48MHz
va009039 0:ef2c0c52abc4 17 FCCO = FCLKOUT * 2 * P = 48MHz * 2 * 2 = 192MHz (within FCCO range) */
va009039 0:ef2c0c52abc4 18 LPC_SYSCON->USBPLLCTRL = 3|(1<<6);
va009039 0:ef2c0c52abc4 19
va009039 0:ef2c0c52abc4 20 /* Powerup USB PLL */
va009039 0:ef2c0c52abc4 21 LPC_SYSCON->PDRUNCFG &= ~(1<<23);
va009039 0:ef2c0c52abc4 22
va009039 0:ef2c0c52abc4 23 /* Wait for PLL to lock */
va009039 0:ef2c0c52abc4 24 while(!(LPC_SYSCON->USBPLLSTAT&0x01));
va009039 0:ef2c0c52abc4 25
va009039 0:ef2c0c52abc4 26 /* enable USB main clock */
va009039 0:ef2c0c52abc4 27 LPC_SYSCON->USBCLKSEL = 0x02;
va009039 0:ef2c0c52abc4 28 LPC_SYSCON->USBCLKDIV = 1;
va009039 0:ef2c0c52abc4 29 /* Enable AHB clock to the USB block. */
va009039 0:ef2c0c52abc4 30 LPC_SYSCON->SYSAHBCLKCTRL1 |= (1<<23);
va009039 0:ef2c0c52abc4 31 /* power UP USB Phy */
va009039 0:ef2c0c52abc4 32 LPC_SYSCON->PDRUNCFG &= ~(1<<9);
va009039 0:ef2c0c52abc4 33 /* Reset USB block */
va009039 0:ef2c0c52abc4 34 LPC_SYSCON->PRESETCTRL1 |= (1<23);
va009039 0:ef2c0c52abc4 35 }
va009039 0:ef2c0c52abc4 36
va009039 0:ef2c0c52abc4 37 /*
va009039 0:ef2c0c52abc4 38 * USB Device Connect Function
va009039 0:ef2c0c52abc4 39 * Called by the User to Connect/Disconnect USB Device
va009039 0:ef2c0c52abc4 40 * Parameters: con: Connect/Disconnect
va009039 0:ef2c0c52abc4 41 * Return Value: None
va009039 0:ef2c0c52abc4 42 */
va009039 0:ef2c0c52abc4 43
va009039 0:ef2c0c52abc4 44 void USBD_Connect(uint8_t con)
va009039 0:ef2c0c52abc4 45 {
va009039 0:ef2c0c52abc4 46 if (con) {
va009039 0:ef2c0c52abc4 47 NVIC_EnableIRQ(USB_IRQ_IRQn);
va009039 0:ef2c0c52abc4 48 } else {
va009039 0:ef2c0c52abc4 49 NVIC_DisableIRQ(USB_IRQ_IRQn);
va009039 0:ef2c0c52abc4 50 }
va009039 0:ef2c0c52abc4 51 }
va009039 0:ef2c0c52abc4 52
va009039 0:ef2c0c52abc4 53 /*
va009039 0:ef2c0c52abc4 54 * USB Device Interrupt Service Routine
va009039 0:ef2c0c52abc4 55 */
va009039 0:ef2c0c52abc4 56
va009039 0:ef2c0c52abc4 57 void USB_IRQ_IRQHandler(void) {
va009039 0:ef2c0c52abc4 58 pUsbApi->hw->ISR(hUsb);
va009039 0:ef2c0c52abc4 59 }