2 * @brief HAL USB functions for the LPC17xx microcontrollers
\r
5 * Copyright(C) NXP Semiconductors, 2012
\r
6 * All rights reserved.
\r
9 * Software that is described herein is for illustrative purposes only
\r
10 * which provides customers with programming information regarding the
\r
11 * LPC products. This software is supplied "AS IS" without any warranties of
\r
12 * any kind, and NXP Semiconductors and its licensor disclaim any and
\r
13 * all warranties, express or implied, including all implied warranties of
\r
14 * merchantability, fitness for a particular purpose and non-infringement of
\r
15 * intellectual property rights. NXP Semiconductors assumes no responsibility
\r
16 * or liability for the use of the software, conveys no license or rights under any
\r
17 * patent, copyright, mask work right, or any other intellectual property rights in
\r
18 * or to any products. NXP Semiconductors reserves the right to make changes
\r
19 * in the software without notification. NXP Semiconductors also makes no
\r
20 * representation or warranty that such application will be suitable for the
\r
21 * specified use without further testing or modification.
\r
24 * Permission to use, copy, modify, and distribute this software and its
\r
25 * documentation is hereby granted, under NXP Semiconductors' and its
\r
26 * licensor's relevant copyrights in the software, without fee, provided that it
\r
27 * is used in conjunction with NXP Semiconductors microcontrollers. This
\r
28 * copyright, permission, and disclaimer notice must appear in all copies of
\r
32 #if defined(__LPC175X_6X__) || defined(__LPC177X_8X__) || defined(__LPC407X_8X__)
\r
35 #include "../../USBTask.h"
\r
37 void HAL_USBInit(uint8_t corenum)
\r
39 /* Enable PLL1 for 48MHz output */
\r
40 Chip_Clock_EnablePLL(SYSCTL_USB_PLL, SYSCTL_PLL_ENABLE);
\r
41 #if defined(__LPC175X_6X__)
\r
42 while ((Chip_Clock_GetPLLStatus(SYSCTL_USB_PLL) & SYSCTL_PLL1STS_LOCKED) == 0);
\r
44 while ((Chip_Clock_GetPLLStatus(SYSCTL_USB_PLL) & SYSCTL_PLLSTS_LOCKED) == 0);
\r
47 Chip_IOCON_PinMux(LPC_IOCON, 0, 29, IOCON_MODE_INACT, IOCON_FUNC1); /* P0.29 D1+, P0.30 D1- */
\r
48 Chip_IOCON_PinMux(LPC_IOCON, 0, 30, IOCON_MODE_INACT, IOCON_FUNC1);
\r
50 #if defined(USB_CAN_BE_HOST)
\r
51 Chip_IOCON_PinMux(LPC_IOCON, 1, 19, IOCON_MODE_INACT, IOCON_FUNC2); /* USB_Power switch */
\r
54 #if defined(USB_CAN_BE_DEVICE)
\r
55 Chip_IOCON_PinMux(LPC_IOCON, 2, 9, IOCON_MODE_INACT, IOCON_FUNC1); /* USB_SoftConnect */
\r
58 LPC_SYSCTL->PCONP |= (1UL << 31); /* USB PCLK -> enable USB Per.*/
\r
60 #if defined(USB_CAN_BE_DEVICE)
\r
61 LPC_USB->USBClkCtrl = 0x12; /* Dev, PortSel, AHB clock enable */
\r
62 while ((LPC_USB->USBClkSt & 0x12) != 0x12) ;
\r
68 void HAL_USBDeInit(uint8_t corenum, uint8_t mode)
\r
70 NVIC_DisableIRQ(USB_IRQn); /* disable USB interrupt */
\r
71 LPC_SYSCTL->PCONP &= (~(1UL << 31)); /* disable USB Per. */
\r
72 Chip_IOCON_PinMux(LPC_IOCON, 0, 29, IOCON_MODE_INACT, IOCON_FUNC0); /* P0.29 D+, P0.30 D- reset to GPIO function */
\r
73 Chip_IOCON_PinMux(LPC_IOCON, 0, 30, IOCON_MODE_INACT, IOCON_FUNC0);
\r
74 /* Disable PLL1 to save power */
\r
75 Chip_Clock_DisablePLL(SYSCTL_USB_PLL, SYSCTL_PLL_ENABLE);
\r
78 void HAL_EnableUSBInterrupt(uint8_t corenum)
\r
80 NVIC_EnableIRQ(USB_IRQn); /* enable USB interrupt */
\r
83 void HAL_DisableUSBInterrupt(uint8_t corenum)
\r
85 NVIC_DisableIRQ(USB_IRQn); /* enable USB interrupt */
\r
88 void HAL_USBConnect(uint8_t corenum, uint32_t con)
\r
90 if (USB_CurrentMode[corenum] == USB_MODE_Device) {
\r
91 #if defined(USB_CAN_BE_DEVICE)
\r
92 HAL17XX_USBConnect(con);
\r
97 // TODO moving stuff to approriate places
\r
98 extern void DcdIrqHandler (uint8_t DeviceID);
\r
100 void USB_IRQHandler(void)
\r
102 if (USB_CurrentMode[0] == USB_MODE_Host) {
\r
103 #if defined(USB_CAN_BE_HOST)
\r
108 if (USB_CurrentMode[0] == USB_MODE_Device) {
\r
109 #if defined(USB_CAN_BE_DEVICE)
\r
115 #endif /*__LPC17XX__ || __LPC40XX__*/
\r