うおーるぼっとをWiiリモコンでコントロールする新しいプログラムです。 以前のものより、Wiiリモコンが早く繋がる様になりました。 It is a program which controls A with the Wii remote. ※ A Bluetooth dongle and a Wii remote control are needed.

Dependencies:   USBHost mbed FATFileSystem mbed-rtos

Committer:
jksoft
Date:
Mon Jun 10 16:01:50 2013 +0000
Revision:
0:fccb789424fc
1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jksoft 0:fccb789424fc 1 /* mbed USBHost Library
jksoft 0:fccb789424fc 2 * Copyright (c) 2006-2013 ARM Limited
jksoft 0:fccb789424fc 3 *
jksoft 0:fccb789424fc 4 * Licensed under the Apache License, Version 2.0 (the "License");
jksoft 0:fccb789424fc 5 * you may not use this file except in compliance with the License.
jksoft 0:fccb789424fc 6 * You may obtain a copy of the License at
jksoft 0:fccb789424fc 7 *
jksoft 0:fccb789424fc 8 * http://www.apache.org/licenses/LICENSE-2.0
jksoft 0:fccb789424fc 9 *
jksoft 0:fccb789424fc 10 * Unless required by applicable law or agreed to in writing, software
jksoft 0:fccb789424fc 11 * distributed under the License is distributed on an "AS IS" BASIS,
jksoft 0:fccb789424fc 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
jksoft 0:fccb789424fc 13 * See the License for the specific language governing permissions and
jksoft 0:fccb789424fc 14 * limitations under the License.
jksoft 0:fccb789424fc 15 */
jksoft 0:fccb789424fc 16
jksoft 0:fccb789424fc 17 #include "mbed.h"
jksoft 0:fccb789424fc 18 #include "USBHALHost.h"
jksoft 0:fccb789424fc 19 #include "dbg.h"
jksoft 0:fccb789424fc 20
jksoft 0:fccb789424fc 21 // bits of the USB/OTG clock control register
jksoft 0:fccb789424fc 22 #define HOST_CLK_EN (1<<0)
jksoft 0:fccb789424fc 23 #define DEV_CLK_EN (1<<1)
jksoft 0:fccb789424fc 24 #define PORTSEL_CLK_EN (1<<3)
jksoft 0:fccb789424fc 25 #define AHB_CLK_EN (1<<4)
jksoft 0:fccb789424fc 26
jksoft 0:fccb789424fc 27 // bits of the USB/OTG clock status register
jksoft 0:fccb789424fc 28 #define HOST_CLK_ON (1<<0)
jksoft 0:fccb789424fc 29 #define DEV_CLK_ON (1<<1)
jksoft 0:fccb789424fc 30 #define PORTSEL_CLK_ON (1<<3)
jksoft 0:fccb789424fc 31 #define AHB_CLK_ON (1<<4)
jksoft 0:fccb789424fc 32
jksoft 0:fccb789424fc 33 // we need host clock, OTG/portsel clock and AHB clock
jksoft 0:fccb789424fc 34 #define CLOCK_MASK (HOST_CLK_EN | PORTSEL_CLK_EN | AHB_CLK_EN)
jksoft 0:fccb789424fc 35
jksoft 0:fccb789424fc 36 #define HCCA_SIZE sizeof(HCCA)
jksoft 0:fccb789424fc 37 #define ED_SIZE sizeof(HCED)
jksoft 0:fccb789424fc 38 #define TD_SIZE sizeof(HCTD)
jksoft 0:fccb789424fc 39
jksoft 0:fccb789424fc 40 #define TOTAL_SIZE (HCCA_SIZE + (MAX_ENDPOINT*ED_SIZE) + (MAX_TD*TD_SIZE))
jksoft 0:fccb789424fc 41
jksoft 0:fccb789424fc 42 static volatile __align(256) uint8_t usb_buf[TOTAL_SIZE] __attribute((section("AHBSRAM1"),aligned)); //256 bytes aligned!
jksoft 0:fccb789424fc 43
jksoft 0:fccb789424fc 44 USBHALHost * USBHALHost::instHost;
jksoft 0:fccb789424fc 45
jksoft 0:fccb789424fc 46 USBHALHost::USBHALHost() {
jksoft 0:fccb789424fc 47 instHost = this;
jksoft 0:fccb789424fc 48 memInit();
jksoft 0:fccb789424fc 49 memset((void*)usb_hcca, 0, HCCA_SIZE);
jksoft 0:fccb789424fc 50 for (int i = 0; i < MAX_ENDPOINT; i++) {
jksoft 0:fccb789424fc 51 edBufAlloc[i] = false;
jksoft 0:fccb789424fc 52 }
jksoft 0:fccb789424fc 53 for (int i = 0; i < MAX_TD; i++) {
jksoft 0:fccb789424fc 54 tdBufAlloc[i] = false;
jksoft 0:fccb789424fc 55 }
jksoft 0:fccb789424fc 56 }
jksoft 0:fccb789424fc 57
jksoft 0:fccb789424fc 58 void USBHALHost::init() {
jksoft 0:fccb789424fc 59 NVIC_DisableIRQ(USB_IRQn);
jksoft 0:fccb789424fc 60
jksoft 0:fccb789424fc 61 //Cut power
jksoft 0:fccb789424fc 62 LPC_SC->PCONP &= ~(1UL<<31);
jksoft 0:fccb789424fc 63 wait_ms(100);
jksoft 0:fccb789424fc 64
jksoft 0:fccb789424fc 65 // turn on power for USB
jksoft 0:fccb789424fc 66 LPC_SC->PCONP |= (1UL<<31);
jksoft 0:fccb789424fc 67
jksoft 0:fccb789424fc 68 // Enable USB host clock, port selection and AHB clock
jksoft 0:fccb789424fc 69 LPC_USB->USBClkCtrl |= CLOCK_MASK;
jksoft 0:fccb789424fc 70
jksoft 0:fccb789424fc 71 // Wait for clocks to become available
jksoft 0:fccb789424fc 72 while ((LPC_USB->USBClkSt & CLOCK_MASK) != CLOCK_MASK);
jksoft 0:fccb789424fc 73
jksoft 0:fccb789424fc 74 // it seems the bits[0:1] mean the following
jksoft 0:fccb789424fc 75 // 0: U1=device, U2=host
jksoft 0:fccb789424fc 76 // 1: U1=host, U2=host
jksoft 0:fccb789424fc 77 // 2: reserved
jksoft 0:fccb789424fc 78 // 3: U1=host, U2=device
jksoft 0:fccb789424fc 79 // NB: this register is only available if OTG clock (aka "port select") is enabled!!
jksoft 0:fccb789424fc 80 // since we don't care about port 2, set just bit 0 to 1 (U1=host)
jksoft 0:fccb789424fc 81 LPC_USB->OTGStCtrl |= 1;
jksoft 0:fccb789424fc 82
jksoft 0:fccb789424fc 83 // now that we've configured the ports, we can turn off the portsel clock
jksoft 0:fccb789424fc 84 LPC_USB->USBClkCtrl &= ~PORTSEL_CLK_EN;
jksoft 0:fccb789424fc 85
jksoft 0:fccb789424fc 86 // configure USB D+/D- pins
jksoft 0:fccb789424fc 87 // P0[29] = USB_D+, 01
jksoft 0:fccb789424fc 88 // P0[30] = USB_D-, 01
jksoft 0:fccb789424fc 89 LPC_PINCON->PINSEL1 &= ~((3<<26) | (3<<28));
jksoft 0:fccb789424fc 90 LPC_PINCON->PINSEL1 |= ((1<<26) | (1<<28));
jksoft 0:fccb789424fc 91
jksoft 0:fccb789424fc 92 LPC_USB->HcControl = 0; // HARDWARE RESET
jksoft 0:fccb789424fc 93 LPC_USB->HcControlHeadED = 0; // Initialize Control list head to Zero
jksoft 0:fccb789424fc 94 LPC_USB->HcBulkHeadED = 0; // Initialize Bulk list head to Zero
jksoft 0:fccb789424fc 95
jksoft 0:fccb789424fc 96 // Wait 100 ms before apply reset
jksoft 0:fccb789424fc 97 wait_ms(100);
jksoft 0:fccb789424fc 98
jksoft 0:fccb789424fc 99 // software reset
jksoft 0:fccb789424fc 100 LPC_USB->HcCommandStatus = OR_CMD_STATUS_HCR;
jksoft 0:fccb789424fc 101
jksoft 0:fccb789424fc 102 // Write Fm Interval and Largest Data Packet Counter
jksoft 0:fccb789424fc 103 LPC_USB->HcFmInterval = DEFAULT_FMINTERVAL;
jksoft 0:fccb789424fc 104 LPC_USB->HcPeriodicStart = FI * 90 / 100;
jksoft 0:fccb789424fc 105
jksoft 0:fccb789424fc 106 // Put HC in operational state
jksoft 0:fccb789424fc 107 LPC_USB->HcControl = (LPC_USB->HcControl & (~OR_CONTROL_HCFS)) | OR_CONTROL_HC_OPER;
jksoft 0:fccb789424fc 108 // Set Global Power
jksoft 0:fccb789424fc 109 LPC_USB->HcRhStatus = OR_RH_STATUS_LPSC;
jksoft 0:fccb789424fc 110
jksoft 0:fccb789424fc 111 LPC_USB->HcHCCA = (uint32_t)(usb_hcca);
jksoft 0:fccb789424fc 112
jksoft 0:fccb789424fc 113 // Clear Interrrupt Status
jksoft 0:fccb789424fc 114 LPC_USB->HcInterruptStatus |= LPC_USB->HcInterruptStatus;
jksoft 0:fccb789424fc 115
jksoft 0:fccb789424fc 116 LPC_USB->HcInterruptEnable = OR_INTR_ENABLE_MIE | OR_INTR_ENABLE_WDH | OR_INTR_ENABLE_RHSC;
jksoft 0:fccb789424fc 117
jksoft 0:fccb789424fc 118 // Enable the USB Interrupt
jksoft 0:fccb789424fc 119 NVIC_SetVector(USB_IRQn, (uint32_t)(_usbisr));
jksoft 0:fccb789424fc 120 LPC_USB->HcRhPortStatus1 = OR_RH_PORT_CSC;
jksoft 0:fccb789424fc 121 LPC_USB->HcRhPortStatus1 = OR_RH_PORT_PRSC;
jksoft 0:fccb789424fc 122
jksoft 0:fccb789424fc 123 NVIC_EnableIRQ(USB_IRQn);
jksoft 0:fccb789424fc 124
jksoft 0:fccb789424fc 125 // Check for any connected devices
jksoft 0:fccb789424fc 126 if (LPC_USB->HcRhPortStatus1 & OR_RH_PORT_CCS) {
jksoft 0:fccb789424fc 127 //Device connected
jksoft 0:fccb789424fc 128 wait_ms(150);
jksoft 0:fccb789424fc 129 USB_DBG("Device connected (%08x)\n\r", LPC_USB->HcRhPortStatus1);
jksoft 0:fccb789424fc 130 deviceConnected(0, 1, LPC_USB->HcRhPortStatus1 & OR_RH_PORT_LSDA);
jksoft 0:fccb789424fc 131 }
jksoft 0:fccb789424fc 132 }
jksoft 0:fccb789424fc 133
jksoft 0:fccb789424fc 134 uint32_t USBHALHost::controlHeadED() {
jksoft 0:fccb789424fc 135 return LPC_USB->HcControlHeadED;
jksoft 0:fccb789424fc 136 }
jksoft 0:fccb789424fc 137
jksoft 0:fccb789424fc 138 uint32_t USBHALHost::bulkHeadED() {
jksoft 0:fccb789424fc 139 return LPC_USB->HcBulkHeadED;
jksoft 0:fccb789424fc 140 }
jksoft 0:fccb789424fc 141
jksoft 0:fccb789424fc 142 uint32_t USBHALHost::interruptHeadED() {
jksoft 0:fccb789424fc 143 return usb_hcca->IntTable[0];
jksoft 0:fccb789424fc 144 }
jksoft 0:fccb789424fc 145
jksoft 0:fccb789424fc 146 void USBHALHost::updateBulkHeadED(uint32_t addr) {
jksoft 0:fccb789424fc 147 LPC_USB->HcBulkHeadED = addr;
jksoft 0:fccb789424fc 148 }
jksoft 0:fccb789424fc 149
jksoft 0:fccb789424fc 150
jksoft 0:fccb789424fc 151 void USBHALHost::updateControlHeadED(uint32_t addr) {
jksoft 0:fccb789424fc 152 LPC_USB->HcControlHeadED = addr;
jksoft 0:fccb789424fc 153 }
jksoft 0:fccb789424fc 154
jksoft 0:fccb789424fc 155 void USBHALHost::updateInterruptHeadED(uint32_t addr) {
jksoft 0:fccb789424fc 156 usb_hcca->IntTable[0] = addr;
jksoft 0:fccb789424fc 157 }
jksoft 0:fccb789424fc 158
jksoft 0:fccb789424fc 159
jksoft 0:fccb789424fc 160 void USBHALHost::enableList(ENDPOINT_TYPE type) {
jksoft 0:fccb789424fc 161 switch(type) {
jksoft 0:fccb789424fc 162 case CONTROL_ENDPOINT:
jksoft 0:fccb789424fc 163 LPC_USB->HcCommandStatus = OR_CMD_STATUS_CLF;
jksoft 0:fccb789424fc 164 LPC_USB->HcControl |= OR_CONTROL_CLE;
jksoft 0:fccb789424fc 165 break;
jksoft 0:fccb789424fc 166 case ISOCHRONOUS_ENDPOINT:
jksoft 0:fccb789424fc 167 break;
jksoft 0:fccb789424fc 168 case BULK_ENDPOINT:
jksoft 0:fccb789424fc 169 LPC_USB->HcCommandStatus = OR_CMD_STATUS_BLF;
jksoft 0:fccb789424fc 170 LPC_USB->HcControl |= OR_CONTROL_BLE;
jksoft 0:fccb789424fc 171 break;
jksoft 0:fccb789424fc 172 case INTERRUPT_ENDPOINT:
jksoft 0:fccb789424fc 173 LPC_USB->HcControl |= OR_CONTROL_PLE;
jksoft 0:fccb789424fc 174 break;
jksoft 0:fccb789424fc 175 }
jksoft 0:fccb789424fc 176 }
jksoft 0:fccb789424fc 177
jksoft 0:fccb789424fc 178
jksoft 0:fccb789424fc 179 bool USBHALHost::disableList(ENDPOINT_TYPE type) {
jksoft 0:fccb789424fc 180 switch(type) {
jksoft 0:fccb789424fc 181 case CONTROL_ENDPOINT:
jksoft 0:fccb789424fc 182 if(LPC_USB->HcControl & OR_CONTROL_CLE) {
jksoft 0:fccb789424fc 183 LPC_USB->HcControl &= ~OR_CONTROL_CLE;
jksoft 0:fccb789424fc 184 return true;
jksoft 0:fccb789424fc 185 }
jksoft 0:fccb789424fc 186 return false;
jksoft 0:fccb789424fc 187 case ISOCHRONOUS_ENDPOINT:
jksoft 0:fccb789424fc 188 return false;
jksoft 0:fccb789424fc 189 case BULK_ENDPOINT:
jksoft 0:fccb789424fc 190 if(LPC_USB->HcControl & OR_CONTROL_BLE){
jksoft 0:fccb789424fc 191 LPC_USB->HcControl &= ~OR_CONTROL_BLE;
jksoft 0:fccb789424fc 192 return true;
jksoft 0:fccb789424fc 193 }
jksoft 0:fccb789424fc 194 return false;
jksoft 0:fccb789424fc 195 case INTERRUPT_ENDPOINT:
jksoft 0:fccb789424fc 196 if(LPC_USB->HcControl & OR_CONTROL_PLE) {
jksoft 0:fccb789424fc 197 LPC_USB->HcControl &= ~OR_CONTROL_PLE;
jksoft 0:fccb789424fc 198 return true;
jksoft 0:fccb789424fc 199 }
jksoft 0:fccb789424fc 200 return false;
jksoft 0:fccb789424fc 201 }
jksoft 0:fccb789424fc 202 return false;
jksoft 0:fccb789424fc 203 }
jksoft 0:fccb789424fc 204
jksoft 0:fccb789424fc 205
jksoft 0:fccb789424fc 206 void USBHALHost::memInit() {
jksoft 0:fccb789424fc 207 usb_hcca = (volatile HCCA *)usb_buf;
jksoft 0:fccb789424fc 208 usb_edBuf = usb_buf + HCCA_SIZE;
jksoft 0:fccb789424fc 209 usb_tdBuf = usb_buf + HCCA_SIZE + (MAX_ENDPOINT*ED_SIZE);
jksoft 0:fccb789424fc 210 }
jksoft 0:fccb789424fc 211
jksoft 0:fccb789424fc 212 volatile uint8_t * USBHALHost::getED() {
jksoft 0:fccb789424fc 213 for (int i = 0; i < MAX_ENDPOINT; i++) {
jksoft 0:fccb789424fc 214 if ( !edBufAlloc[i] ) {
jksoft 0:fccb789424fc 215 edBufAlloc[i] = true;
jksoft 0:fccb789424fc 216 return (volatile uint8_t *)(usb_edBuf + i*ED_SIZE);
jksoft 0:fccb789424fc 217 }
jksoft 0:fccb789424fc 218 }
jksoft 0:fccb789424fc 219 perror("Could not allocate ED\r\n");
jksoft 0:fccb789424fc 220 return NULL; //Could not alloc ED
jksoft 0:fccb789424fc 221 }
jksoft 0:fccb789424fc 222
jksoft 0:fccb789424fc 223 volatile uint8_t * USBHALHost::getTD() {
jksoft 0:fccb789424fc 224 int i;
jksoft 0:fccb789424fc 225 for (i = 0; i < MAX_TD; i++) {
jksoft 0:fccb789424fc 226 if ( !tdBufAlloc[i] ) {
jksoft 0:fccb789424fc 227 tdBufAlloc[i] = true;
jksoft 0:fccb789424fc 228 return (volatile uint8_t *)(usb_tdBuf + i*TD_SIZE);
jksoft 0:fccb789424fc 229 }
jksoft 0:fccb789424fc 230 }
jksoft 0:fccb789424fc 231 perror("Could not allocate TD\r\n");
jksoft 0:fccb789424fc 232 return NULL; //Could not alloc TD
jksoft 0:fccb789424fc 233 }
jksoft 0:fccb789424fc 234
jksoft 0:fccb789424fc 235
jksoft 0:fccb789424fc 236 void USBHALHost::freeED(volatile uint8_t * ed) {
jksoft 0:fccb789424fc 237 int i;
jksoft 0:fccb789424fc 238 i = (ed - usb_edBuf) / ED_SIZE;
jksoft 0:fccb789424fc 239 edBufAlloc[i] = false;
jksoft 0:fccb789424fc 240 }
jksoft 0:fccb789424fc 241
jksoft 0:fccb789424fc 242 void USBHALHost::freeTD(volatile uint8_t * td) {
jksoft 0:fccb789424fc 243 int i;
jksoft 0:fccb789424fc 244 i = (td - usb_tdBuf) / TD_SIZE;
jksoft 0:fccb789424fc 245 tdBufAlloc[i] = false;
jksoft 0:fccb789424fc 246 }
jksoft 0:fccb789424fc 247
jksoft 0:fccb789424fc 248
jksoft 0:fccb789424fc 249 void USBHALHost::resetRootHub() {
jksoft 0:fccb789424fc 250 // Initiate port reset
jksoft 0:fccb789424fc 251 LPC_USB->HcRhPortStatus1 = OR_RH_PORT_PRS;
jksoft 0:fccb789424fc 252
jksoft 0:fccb789424fc 253 while (LPC_USB->HcRhPortStatus1 & OR_RH_PORT_PRS);
jksoft 0:fccb789424fc 254
jksoft 0:fccb789424fc 255 // ...and clear port reset signal
jksoft 0:fccb789424fc 256 LPC_USB->HcRhPortStatus1 = OR_RH_PORT_PRSC;
jksoft 0:fccb789424fc 257 }
jksoft 0:fccb789424fc 258
jksoft 0:fccb789424fc 259
jksoft 0:fccb789424fc 260 void USBHALHost::_usbisr(void) {
jksoft 0:fccb789424fc 261 if (instHost) {
jksoft 0:fccb789424fc 262 instHost->UsbIrqhandler();
jksoft 0:fccb789424fc 263 }
jksoft 0:fccb789424fc 264 }
jksoft 0:fccb789424fc 265
jksoft 0:fccb789424fc 266 void USBHALHost::UsbIrqhandler() {
jksoft 0:fccb789424fc 267 if( LPC_USB->HcInterruptStatus & LPC_USB->HcInterruptEnable ) //Is there something to actually process?
jksoft 0:fccb789424fc 268 {
jksoft 0:fccb789424fc 269
jksoft 0:fccb789424fc 270 uint32_t int_status = LPC_USB->HcInterruptStatus & LPC_USB->HcInterruptEnable;
jksoft 0:fccb789424fc 271
jksoft 0:fccb789424fc 272 // Root hub status change interrupt
jksoft 0:fccb789424fc 273 if (int_status & OR_INTR_STATUS_RHSC) {
jksoft 0:fccb789424fc 274 if (LPC_USB->HcRhPortStatus1 & OR_RH_PORT_CSC) {
jksoft 0:fccb789424fc 275 if (LPC_USB->HcRhStatus & OR_RH_STATUS_DRWE) {
jksoft 0:fccb789424fc 276 // When DRWE is on, Connect Status Change
jksoft 0:fccb789424fc 277 // means a remote wakeup event.
jksoft 0:fccb789424fc 278 } else {
jksoft 0:fccb789424fc 279
jksoft 0:fccb789424fc 280 //Root device connected
jksoft 0:fccb789424fc 281 if (LPC_USB->HcRhPortStatus1 & OR_RH_PORT_CCS) {
jksoft 0:fccb789424fc 282
jksoft 0:fccb789424fc 283 // wait 150ms to avoid bounce
jksoft 0:fccb789424fc 284 wait_ms(150);
jksoft 0:fccb789424fc 285
jksoft 0:fccb789424fc 286 //Hub 0 (root hub), Port 1 (count starts at 1), Low or High speed
jksoft 0:fccb789424fc 287 deviceConnected(0, 1, LPC_USB->HcRhPortStatus1 & OR_RH_PORT_LSDA);
jksoft 0:fccb789424fc 288 }
jksoft 0:fccb789424fc 289
jksoft 0:fccb789424fc 290 //Root device disconnected
jksoft 0:fccb789424fc 291 else {
jksoft 0:fccb789424fc 292
jksoft 0:fccb789424fc 293 if (!(int_status & OR_INTR_STATUS_WDH)) {
jksoft 0:fccb789424fc 294 usb_hcca->DoneHead = 0;
jksoft 0:fccb789424fc 295 }
jksoft 0:fccb789424fc 296
jksoft 0:fccb789424fc 297 // wait 200ms to avoid bounce
jksoft 0:fccb789424fc 298 wait_ms(200);
jksoft 0:fccb789424fc 299
jksoft 0:fccb789424fc 300 deviceDisconnected(0, 1, NULL, usb_hcca->DoneHead & 0xFFFFFFFE);
jksoft 0:fccb789424fc 301
jksoft 0:fccb789424fc 302 if (int_status & OR_INTR_STATUS_WDH) {
jksoft 0:fccb789424fc 303 usb_hcca->DoneHead = 0;
jksoft 0:fccb789424fc 304 LPC_USB->HcInterruptStatus = OR_INTR_STATUS_WDH;
jksoft 0:fccb789424fc 305 }
jksoft 0:fccb789424fc 306 }
jksoft 0:fccb789424fc 307 }
jksoft 0:fccb789424fc 308 LPC_USB->HcRhPortStatus1 = OR_RH_PORT_CSC;
jksoft 0:fccb789424fc 309 }
jksoft 0:fccb789424fc 310 if (LPC_USB->HcRhPortStatus1 & OR_RH_PORT_PRSC) {
jksoft 0:fccb789424fc 311 LPC_USB->HcRhPortStatus1 = OR_RH_PORT_PRSC;
jksoft 0:fccb789424fc 312 }
jksoft 0:fccb789424fc 313 LPC_USB->HcInterruptStatus = OR_INTR_STATUS_RHSC;
jksoft 0:fccb789424fc 314 }
jksoft 0:fccb789424fc 315
jksoft 0:fccb789424fc 316 // Writeback Done Head interrupt
jksoft 0:fccb789424fc 317 if (int_status & OR_INTR_STATUS_WDH) {
jksoft 0:fccb789424fc 318 transferCompleted(usb_hcca->DoneHead & 0xFFFFFFFE);
jksoft 0:fccb789424fc 319 LPC_USB->HcInterruptStatus = OR_INTR_STATUS_WDH;
jksoft 0:fccb789424fc 320 }
jksoft 0:fccb789424fc 321 }
jksoft 0:fccb789424fc 322 }