LPCOpen Platform
LPCOpen Platform for NXP LPC Microcontrollers
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
USBController_LPC.c
Go to the documentation of this file.
1 /*
2  * @brief USB Controller definitions for the LPC microcontrollers
3  *
4  * @note
5  * Copyright(C) NXP Semiconductors, 2012
6  * All rights reserved.
7  *
8  * @par
9  * Software that is described herein is for illustrative purposes only
10  * which provides customers with programming information regarding the
11  * LPC products. This software is supplied "AS IS" without any warranties of
12  * any kind, and NXP Semiconductors and its licensor disclaim any and
13  * all warranties, express or implied, including all implied warranties of
14  * merchantability, fitness for a particular purpose and non-infringement of
15  * intellectual property rights. NXP Semiconductors assumes no responsibility
16  * or liability for the use of the software, conveys no license or rights under any
17  * patent, copyright, mask work right, or any other intellectual property rights in
18  * or to any products. NXP Semiconductors reserves the right to make changes
19  * in the software without notification. NXP Semiconductors also makes no
20  * representation or warranty that such application will be suitable for the
21  * specified use without further testing or modification.
22  *
23  * @par
24  * Permission to use, copy, modify, and distribute this software and its
25  * documentation is hereby granted, under NXP Semiconductors' and its
26  * licensor's relevant copyrights in the software, without fee, provided that it
27  * is used in conjunction with NXP Semiconductors microcontrollers. This
28  * copyright, permission, and disclaimer notice must appear in all copies of
29  * this code.
30  */
31 
32 #define __INCLUDE_FROM_USB_DRIVER
33 #define __INCLUDE_FROM_USB_CONTROLLER_C
34 #include "../USBController.h"
35 
36 #if (!defined(USB_HOST_ONLY) && !defined(USB_DEVICE_ONLY))
37 volatile uint8_t USB_CurrentMode = USB_MODE_None;
38 #endif
39 
40 uint8_t USBPortNum;
41 
42 void USB_Init(void)
43 {
44 #if defined(USB_MULTI_PORTS)
45  uint8_t i;
47  for (i = 0; i < MAX_USB_CORE; i++) {
48  HAL_USBInit(i);
50  }
51 #else
52  USBPortNum = (uint8_t) USB_PORT_SELECTED;
54  #if defined(USB_CAN_BE_HOST)
56  #endif
58 #endif
59  USB_IsInitialized = true;
60 }
61 
62 void USB_Disable(void)
63 {
64  USB_IsInitialized = false;
66  #if defined(USB_CAN_BE_DEVICE)
69  #endif
70  }
72  #if defined(USB_CAN_BE_HOST)
73 
74  #if defined(USB_MULTI_PORTS)
75  uint8_t i;
76  for (i = 0; i < MAX_USB_CORE; i++) {
77  HcdDeInitDriver(i);
78  HAL_USBDeInit(i);
79  }
80  #else
83  #endif
84 
85  #endif
86  }
87 }
88 
89 void USB_ResetInterface(uint8_t corenum)
90 {
92  #if defined(USB_CAN_BE_DEVICE)
93  USB_Init_Device(corenum);
94  #endif
95  }
96  else if (USB_CurrentMode == USB_MODE_Host) {
97  #if defined(USB_CAN_BE_HOST)
98  USB_Init_Host(corenum);
99  #endif
100  }
101 }
102 
103 #if defined(USB_CAN_BE_DEVICE)
104 static void USB_Init_Device(uint8_t corenum)
105 {
108 
109  #if !defined(NO_DEVICE_REMOTE_WAKEUP)
111  #endif
112 
113  #if !defined(NO_DEVICE_SELF_POWER)
115  #endif
116 
117  #if defined(USB_DEVICE_ROM_DRIVER)
118  UsbdRom_Init();
119  #else
123  #endif
126 }
127 
128 #endif
129 
130 #if defined(USB_CAN_BE_HOST)
131 static void USB_Init_Host(uint8_t corenum)
132 {
133  // uint8_t i;
134 
135  // for(i=0;i<PIPE_TOTAL_PIPES;i++) PipeInfo[i].PipeHandle=0;
136 
137  pipeselected[corenum] = PIPE_CONTROLPIPE;
138 
139  if (HcdInitDriver(corenum) == HCD_STATUS_OK) {
140  USB_IsInitialized = true;
141  HAL_EnableUSBInterrupt(corenum);
142  }
143  else {
144  USB_IsInitialized = false;
145  HcdDeInitDriver(corenum);
146  }
147 
150 }
151 
152 #endif