LPC54605J256BD100 Won't attach USB clock

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

LPC54605J256BD100 Won't attach USB clock

475件の閲覧回数
SOOTY1
Contributor I

Hi,

my custom board will not attach the clock.  I have been trying for weeks to get this to work.  I cannot.  I cannot find any results anywhere online, which will tell me how to successfully attach the USB1 clock.  Surely there must be a logical set of instructions which will attach it properly, somewhere?


All the config tools are set correctly with the correct frequencies and selections for it to work properly, but it does not.


Several manual steps have been undertaken in main, in order to try to fix the obvious shortcomings of the gui tool.  This has not helped.  Probably the order and timing is incorrect.  As there are so many, and the order is very particular, I am not surprised if it is very incorrect.

Please, can somebody tell me where I am going wrong with the set up?  
I want to have USB working on this device.  This is beyond frustrating at this point.  Thanks.

Main -

int main(void)
{
vPortDefineHeapRegions(xHeapRegions);

BOARD_InitBootPins();
BOARD_InitBootClocks();
BOARD_InitBootPeripherals();
BOARD_InitUSB1HS_USBPLL_Only();

SEGGER_RTT_Init();

PRINTF("System Booting...\r\n");
PRINTF("Core clock = %lu Hz\r\n", CLOCK_GetFreq(kCLOCK_CoreSysClk));

/* 1. POWER DOMAINS FIRST */
POWER_DisablePD(kPDRUNCFG_PD_VD2_ANA);
POWER_DisablePD(kPDRUNCFG_PD_VD3);
POWER_DisablePD(kPDRUNCFG_PD_VD5);
POWER_DisablePD(kPDRUNCFG_PD_USB_PLL);
POWER_DisablePD(kPDRUNCFG_PD_USB1_PHY);
/* Power up the PHY LDO (Bit 24) which is often separate from the PHY logic */
SYSCON->PDRUNCFGCLR[0] = (1U << 24);

SDK_DelayAtLeastUs(15000, SystemCoreClock);
while (!(SYSCON->USBPLLSTAT & 0x1)); // Wait for hardware lock

/* 2. THE MANUAL CLOCK FIX */
PRINTF("Applying Manual Clock Fix...\r\n");

// IMPORTANT: Ensure AHB clock is OFF so the divider logic is 'unloaded'
SYSCON->AHBCLKCTRLCLR[2] = (1U << 18);
SYSCON->USB1CLKDIV |= (1U << 30); // Halt divider
SYSCON->USB1CLKSEL = 7U; // "Disable" (Park at None)
for (volatile int i = 0; i < 1500; i++) { __asm("NOP"); }

SYSCON->USB1CLKSEL = 2U; // Target: USBPLL (288MHz)
SYSCON->USB1CLKDIV = (1U << 30) | 5U; // Target: Div by 6 (48MHz)
for (volatile int i = 0; i < 1500; i++) { __asm("NOP"); }

SYSCON->USB1CLKDIV &= ~(1U << 30); // Release Halt

PRINTF("POST-FIX USB1CLKSEL: 0x%08lX\r\n", SYSCON->USB1CLKSEL);
PRINTF("POST-FIX USB1CLKDIV: 0x%08lX\r\n", SYSCON->USB1CLKDIV);

/* 3. HARDWARE ENABLE & RESET PULSE */
// Now that the clock is stable, turn on the AHB interface
SYSCON->AHBCLKCTRLSET[2] = (1U << 18);

//Pulse Reset to sync the controller to the 48MHz clock
SYSCON->PRESETCTRLSET[2] = (1U << 18);
for (volatile int i = 0; i < 1000; i++) { __asm("NOP"); }
SYSCON->PRESETCTRLCLR[2] = (1U << 18);

 

/* 5. FINAL DIAGNOSTICS BEFORE INIT */
PRINTF("\r\n--- PRE-INIT DIAGNOSTICS ---\r\n");
PRINTF("USB1CLKSEL : 0x%08lX\r\n", SYSCON->USB1CLKSEL);
PRINTF("USB1CLKDIV : 0x%08lX\r\n", SYSCON->USB1CLKDIV);
PRINTF("USBHSH->PORTSC1 : 0x%08lX\r\n", USBHSH->PORTSC1);
PRINTF("PDRUNCFG : 0x%08lX\r\n", SYSCON->PDRUNCFG);

/* --- 1. FORCE PHY CONFIG --- */
// 16: Host Mode, 17: Clock Valid, 21: Force VBUS, 23: Force 48MHz Lock
USBHSH->PORTMODE |= (1U << 16) | (1U << 17) | (1U << 21) | (1U << 23);

/* --- 2. FINAL HARDWARE RESET PULSE --- */
SYSCON->PRESETCTRLSET[2] = (1U << 18);
for (volatile int i = 0; i < 5000; i++) { __asm("NOP"); }
SYSCON->PRESETCTRLCLR[2] = (1U << 18);

/* --- 3. STABILIZATION DELAY --- */
SDK_DelayAtLeastUs(10000, SystemCoreClock);

/* --- 4. PRE-INIT DIAGNOSTICS --- */
PRINTF("\r\n--- FINAL HW CHECK ---\r\n");
PRINTF("USBHSH->USBSTS: 0x%08lX\r\n", USBHSH->USBSTS);
PRINTF("USBHSH->USBCMD: 0x%08lX\r\n", USBHSH->USBCMD);
PRINTF("USBHSH->PORTMODE: 0x%08lX\r\n", USBHSH->PORTMODE);

/* 2. Re-sync the clock tree variables */
SystemCoreClockUpdate();

/* 3. Manually toggle the USB1 Clock Gate */
// SYSCON->AHBCLKCTRLSET[2] = (1U << 18); // Ensure AHB is on


status_t clkStatus = CLOCK_EnableUsbhs0HostClock(kCLOCK_UsbSrcUsbPll, 48000000U);
PRINTF("Clock enable returned: %d\r\n", clkStatus);

PRINTF("USB PLL freq = %lu Hz\r\n", CLOCK_GetFreq(kCLOCK_UsbPll));
PRINTF("USB1CLK freq = %lu Hz\r\n", CLOCK_GetFreq(kCLOCK_UsbClk));

/* 6. STACK INIT */
usb_status_t status = USB_HostInit(CONTROLLER_ID, &g_HostHandle, USB_HostEvent);
if (status != kStatus_USB_Success) {
PRINTF("USB_HostInit failed with status %d\r\n", status);
}




0 件の賞賛
返信
3 返答(返信)

228件の閲覧回数
SOOTY1
Contributor I

In case anybody wants an example of USB Host HID Keypad, you can try this for the LPC54605J256BD100. I had it working like this:  Using RTT you'll have to take out if you don't have a SEGGER probe.

#include <stdio.h>
#include <string.h>
#include <stdbool.h>

#include "board.h"
#include "peripherals.h"
#include "pin_mux.h"
#include "clock_config.h"
#include "fsl_device_registers.h"
#include "fsl_power.h"

#include "SEGGER_RTT.h"
#include "FreeRTOS.h"
#include "task.h"

#include "usb_host_config.h"
#include "usb_host.h"
#include "usb.h"
#include "usb_host_hid.h"
#include "host_hid_generic.h"
#include "usb_host_ip3516hs.h"
#include "usb_host_hub.h"
#include "usb_host_interface_0_hid_keyboard.h"

#define PRINTF(...) SEGGER_RTT_printf(0, __VA_ARGS__)
#define CONTROLLER_ID kUSB_ControllerIp3516Hs0

static usb_host_handle g_HostHandle;
static usb_host_interface_handle g_HidKeyboardInterface = NULL;
static usb_host_class_handle g_HidKeyboardClassHandle = NULL;
static usb_device_handle g_HidKeyboardDeviceHandle = NULL;
static volatile bool g_KeyboardReady = false;
static uint8_t g_KeyboardReport[8];

static const char *keycode_to_ascii(uint8_t keycode, uint8_t modifiers)
{
(void)modifiers;
static char buf[20];

switch (keycode)
{
case 98: return "0";
case 89: return "1";
case 90: return "2";
case 91: return "3";
case 92: return "4";
case 93: return "5";
case 94: return "6";
case 95: return "7";
case 96: return "8";
case 97: return "9";
case 99: return ".";
case 85: return "*";
case 86: return "-";
case 87: return "+";
case 88: return "[ENTER]";
case 76: return "/";
case 83: return "[NUMLOCK]";
case 42: return "[BACKSPACE]";
case 79: return "[RIGHT]";
case 80: return "[LEFT]";
case 81: return "[DOWN]";
case 82: return "[UP]";
case 75: return "[HOME]";
case 78: return "[PGUP]";
case 77: return "[END]";
case 74: return "[INS]";
case 73: return "[DEL]";
default:
snprintf(buf, sizeof(buf), "[0x%02X]", keycode);
return buf;
}
}

static void USB_HostHidKeyboardRecvCallback(void *param,
uint8_t *buffer,
uint32_t length,
usb_status_t status)
{
(void)param;

if (status == kStatus_USB_Success && buffer != NULL && length > 0)
{
uint8_t modifiers = buffer[0];
uint8_t key = 0;

for (int i = 2; i < 8; i++)
{
if (buffer[i] != 0)
{
key = buffer[i];
break;
}
}

if (key != 0)
{
PRINTF("Key: 0x%02X -> %s", key, keycode_to_ascii(key, modifiers));
if (modifiers)
{
PRINTF(" (Mod:0x%02X)", modifiers);
}
PRINTF("\r\n");
}
else
{
PRINTF("Key released\r\n");
}
}
else if (status != kStatus_USB_Success)
{
PRINTF("HID receive error: %d\r\n", status);
}

if (g_HidKeyboardClassHandle != NULL)
{
USB_HostHidRecv(g_HidKeyboardClassHandle,
g_KeyboardReport,
sizeof(g_KeyboardReport),
USB_HostHidKeyboardRecvCallback,
NULL);
}
}

static void hid_set_interface_callback(void *param,
uint8_t *data,
uint32_t dataLength,
usb_status_t status)
{
(void)param;
(void)data;
(void)dataLength;

if (status != kStatus_USB_Success)
{
PRINTF("SetInterface failed: %d\r\n", status);
return;
}

PRINTF("Interface bound OK\r\n");

USB_HostHidSetProtocol(g_HidKeyboardClassHandle,
USB_HOST_HID_REQUEST_PROTOCOL_BOOT,
NULL,
NULL);

USB_HostHidRecv(g_HidKeyboardClassHandle,
g_KeyboardReport,
sizeof(g_KeyboardReport),
USB_HostHidKeyboardRecvCallback,
NULL);
}

static void USB_StartKeyboardIfReady(void)
{
usb_status_t status;

if (!g_KeyboardReady || g_HidKeyboardDeviceHandle == NULL)
{
return;
}

g_KeyboardReady = false;

status = USB_HostHidInit(g_HidKeyboardDeviceHandle, &g_HidKeyboardClassHandle);
PRINTF("HidInit = %d\r\n", status);

if (status != kStatus_USB_Success)
{
return;
}

status = USB_HostHidSetInterface(g_HidKeyboardClassHandle,
g_HidKeyboardInterface,
0,
hid_set_interface_callback,
NULL);
PRINTF("SetInterface submit = %d\r\n", status);
}

usb_status_t USB_HostEvent(usb_device_handle deviceHandle,
usb_host_configuration_handle configurationHandle,
uint32_t eventCode)
{
usb_host_configuration_t *config;
uint8_t interfaceIndex;

switch (eventCode)
{
case kUSB_HostEventAttach:
g_HidKeyboardDeviceHandle = deviceHandle;
PRINTF("USB Device Attached\r\n");
break;

case kUSB_HostEventEnumerationDone:
if (g_HidKeyboardDeviceHandle != deviceHandle)
{
break;
}

config = (usb_host_configuration_t *)configurationHandle;

for (interfaceIndex = 0; interfaceIndex < config->interfaceCount; interfaceIndex++)
{
usb_host_interface_t *interface = &config->interfaceList[interfaceIndex];
usb_descriptor_interface_t *desc = (usb_descriptor_interface_t *)interface->interfaceDesc;

if (desc == NULL)
{
continue;
}

if (desc->bInterfaceClass == USB_HOST_HID_CLASS_CODE)
{
g_HidKeyboardInterface = interface;
g_HidKeyboardDeviceHandle = deviceHandle;
g_KeyboardReady = true;

PRINTF("HID keyboard detected\r\n");

USB_StartKeyboardIfReady();
return kStatus_USB_Success;
}
}
break;

case kUSB_HostEventDetach:
if (g_HidKeyboardDeviceHandle == deviceHandle)
{
PRINTF("USB keyboard detached\r\n");
g_HidKeyboardDeviceHandle = NULL;
g_HidKeyboardInterface = NULL;
g_HidKeyboardClassHandle = NULL;
g_KeyboardReady = false;
}
break;

default:
break;
}

return kStatus_USB_Success;
}

void USB_HostClockInit(void)
{
#if ((defined USB_HOST_CONFIG_IP3516HS) && (USB_HOST_CONFIG_IP3516HS > 0U))
CLOCK_EnableUsbhs0HostClock(kCLOCK_UsbSrcUsbPll, 48000000U);
USBHSH->PORTMODE &= ~(1UL << 16);
USBHSH->PORTMODE |= (1UL << 17);
USBHSH->PORTMODE &= ~(1UL << 8);

for (volatile uint32_t d = 0; d < 500000; d++)
{
__NOP();
}

#if ((defined FSL_FEATURE_USBHSH_USB_RAM) && (FSL_FEATURE_USBHSH_USB_RAM > 0U))
for (int i = 0; i < (FSL_FEATURE_USBHSH_USB_RAM >> 2); i++)
{
((uint32_t *)FSL_FEATURE_USBHSH_USB_RAM_BASE_ADDRESS)[i] = 0U;
}
#endif
#endif
}

void USB_HostIsrEnable(void)
{
IRQn_Type irqNumber = USB1_IRQn;
NVIC_SetPriority(irqNumber, USB_HOST_INTERRUPT_PRIORITY);
EnableIRQ(irqNumber);
}

usb_status_t USB_HostApplicationInit(void)
{
usb_status_t status = kStatus_USB_Success;

USB_HostClockInit();
PRINTF("Clock Init done\r\n");

#if ((defined FSL_FEATURE_SOC_SYSMPU_COUNT) && (FSL_FEATURE_SOC_SYSMPU_COUNT))
SYSMPU_Enable(SYSMPU, 0);
#endif

status = USB_HostInit(CONTROLLER_ID, &g_HostHandle, USB_HostEvent);
if (status != kStatus_USB_Success)
{
PRINTF("USB_HostInit FAILED (status=%d)\r\n", status);
return status;
}

PRINTF("USB_HostInit SUCCESS\r\n");
USB_HostIsrEnable();
PRINTF("USB host ISR enabled\r\n");

return status;
}

void USB_HostTaskFn(void *param)
{
#if ((defined USB_HOST_CONFIG_IP3516HS) && (USB_HOST_CONFIG_IP3516HS > 0U))
USB_HostIp3516HsTaskFunction(param);
#endif
}

static void USB_HostTask(void *param)
{
while (1)
{
USB_HostTaskFn(param);
vTaskDelay(pdMS_TO_TICKS(1));
}
}

static void USB_HostApplicationTask(void *param)
{
while (1)
{
USB_HostHidGenericTask(param);
vTaskDelay(pdMS_TO_TICKS(1));
}
}

void BOARD_InitHardware(void)
{
BOARD_InitBootPins();
BOARD_InitBootClocks();
BOARD_InitPeripherals();
POWER_DisablePD(kPDRUNCFG_PD_USB0_PHY);
POWER_DisablePD(kPDRUNCFG_PD_USB1_PHY);
}

extern "C" void USB1_IRQHandler(void)
{
if (g_HostHandle != NULL)
{
USB_HostIp3516HsIsrFunction(g_HostHandle);
}
}

int main(void)
{
SEGGER_RTT_Init();
BOARD_InitHardware();

USB_HostApplicationInit();

xTaskCreate(USB_HostTask, "USB_Host", 2048, g_HostHandle, 3, NULL);
xTaskCreate(USB_HostApplicationTask, "HID_Generic", 2048, g_HostHandle, 2, NULL);

PRINTF("Starting scheduler...\r\n");
vTaskStartScheduler();

while (1)
{
}
}

0 件の賞賛
返信

362件の閲覧回数
Alice_Yang
NXP TechSupport
NXP TechSupport

Hello @SOOTY1 

Please test the SDK demo on your board.
There is a guide available on how to switch the USB demo from USB0 to USB1.
 
 
BR
Alice
 
0 件の賞賛
返信

359件の閲覧回数
SOOTY1
Contributor I

Thanks Alice.  I have managed to piece together usb host init, from the files in the xx628 host hid generic example.

thanks very much, regards

0 件の賞賛
返信
%3CLINGO-SUB%20id%3D%22lingo-sub-2366263%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ELPC54605J256BD100%E3%81%AFUSB%E3%82%AF%E3%83%AD%E3%83%83%E3%82%AF%E3%82%92%E6%8E%A5%E7%B6%9A%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2366263%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%81%3CBR%20%2F%3E%3CBR%20%2F%3E%E7%A7%81%E3%81%AE%E8%87%AA%E4%BD%9C%E5%9F%BA%E6%9D%BF%E3%81%AB%E3%81%AF%E6%99%82%E8%A8%88%E3%81%8C%E5%8F%96%E3%82%8A%E4%BB%98%E3%81%91%E3%82%89%E3%82%8C%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E4%BD%95%E9%80%B1%E9%96%93%E3%82%82%E5%89%8D%E3%81%8B%E3%82%89%E3%81%93%E3%82%8C%E3%82%92%E5%8B%95%E4%BD%9C%E3%81%95%E3%81%9B%E3%82%88%E3%81%86%E3%81%A8%E8%A9%A6%E3%81%BF%E3%81%A6%E3%81%84%E3%82%8B%E3%80%82%E7%A7%81%E3%81%AF%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82USB1%E3%82%AF%E3%83%AD%E3%83%83%E3%82%AF%E3%82%92%E6%AD%A3%E3%81%97%E3%81%8F%E6%8E%A5%E7%B6%9A%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%82%92%E6%95%99%E3%81%88%E3%81%A6%E3%81%8F%E3%82%8C%E3%82%8B%E3%82%88%E3%81%86%E3%81%AA%E6%83%85%E5%A0%B1%E3%82%92%E3%80%81%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E4%B8%8A%E3%81%AE%E3%81%A9%E3%81%93%E3%81%AB%E3%82%82%E8%A6%8B%E3%81%A4%E3%81%91%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E3%81%8D%E3%81%A3%E3%81%A8%E3%81%A9%E3%81%93%E3%81%8B%E3%81%AB%E3%80%81%E3%81%9D%E3%82%8C%E3%82%92%E6%AD%A3%E3%81%97%E3%81%8F%E5%8F%96%E3%82%8A%E4%BB%98%E3%81%91%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E8%AB%96%E7%90%86%E7%9A%84%E3%81%AA%E6%89%8B%E9%A0%86%E6%9B%B8%E3%81%8C%E3%81%82%E3%82%8B%E3%81%AF%E3%81%9A%E3%81%A0%E3%80%82%3C%2FP%3E%3CP%3E%3CBR%20%2F%3E%E8%A8%AD%E5%AE%9A%E3%83%84%E3%83%BC%E3%83%AB%E3%81%AF%E3%81%99%E3%81%B9%E3%81%A6%E3%80%81%E6%AD%A3%E3%81%97%E3%81%8F%E5%8B%95%E4%BD%9C%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E5%91%A8%E6%B3%A2%E6%95%B0%E3%81%A8%E9%81%B8%E6%8A%9E%E9%A0%85%E7%9B%AE%E3%81%8C%E9%81%A9%E5%88%87%E3%81%AB%E8%A8%AD%E5%AE%9A%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AB%E3%82%82%E3%81%8B%E3%81%8B%E3%82%8F%E3%82%89%E3%81%9A%E3%80%81%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%3C%2FP%3E%3CP%3E%3CBR%20%2F%3EGUI%E3%83%84%E3%83%BC%E3%83%AB%E3%81%AE%E6%98%8E%E3%82%89%E3%81%8B%E3%81%AA%E6%AC%A0%E7%82%B9%E3%82%92%E4%BF%AE%E6%AD%A3%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E3%80%81%E3%83%A1%E3%82%A4%E3%83%B3%E9%83%A8%E5%88%86%E3%81%A7%E3%81%84%E3%81%8F%E3%81%A4%E3%81%8B%E3%81%AE%E6%89%8B%E5%8B%95%E3%81%AB%E3%82%88%E3%82%8B%E6%89%8B%E9%A0%86%E3%81%8C%E5%AE%9F%E6%96%BD%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%E3%81%93%E3%82%8C%E3%81%AF%E4%BD%95%E3%81%AE%E5%BD%B9%E3%81%AB%E3%82%82%E7%AB%8B%E3%81%9F%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F%E3%80%82%E3%81%8A%E3%81%9D%E3%82%89%E3%81%8F%E3%80%81%E9%A0%86%E7%95%AA%E3%81%A8%E3%82%BF%E3%82%A4%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%8C%E9%96%93%E9%81%95%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%80%82%E6%95%B0%E3%81%8C%E9%9D%9E%E5%B8%B8%E3%81%AB%E5%A4%9A%E3%81%8F%E3%80%81%E9%A0%86%E7%95%AA%E3%82%82%E9%9D%9E%E5%B8%B8%E3%81%AB%E5%8E%B3%E6%A0%BC%E3%81%A7%E3%81%82%E3%82%8B%E3%81%9F%E3%82%81%E3%80%81%E3%82%82%E3%81%97%E3%81%9D%E3%82%8C%E3%81%8C%E9%9D%9E%E5%B8%B8%E3%81%AB%E9%96%93%E9%81%95%E3%81%A3%E3%81%A6%E3%81%84%E3%81%9F%E3%81%A8%E3%81%97%E3%81%A6%E3%82%82%E9%A9%9A%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%3CBR%20%2F%3E%3CBR%20%2F%3E%E3%81%A9%E3%81%AA%E3%81%9F%E3%81%8B%E3%80%81%E8%A8%AD%E5%AE%9A%E3%81%AE%E3%81%A9%E3%81%93%E3%81%8C%E9%96%93%E9%81%95%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%AE%E3%81%8B%E6%95%99%E3%81%88%E3%81%A6%E3%81%84%E3%81%9F%E3%81%A0%E3%81%91%E3%81%BE%E3%81%9B%E3%82%93%E3%81%8B%EF%BC%9F%3CBR%20%2F%3E%E3%81%93%E3%81%AE%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%81%A7USB%E3%82%92%E4%BD%BF%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%97%E3%81%9F%E3%81%84%E3%80%82%E3%81%93%E3%82%8C%E3%81%AF%E3%82%82%E3%81%AF%E3%82%84%E8%8B%9B%E7%AB%8B%E3%81%A1%E3%82%92%E9%80%9A%E3%82%8A%E8%B6%8A%E3%81%97%E3%81%A6%E5%91%86%E3%82%8C%E3%82%8B%E3%81%B0%E3%81%8B%E3%82%8A%E3%81%A0%E3%80%82%E3%81%82%E3%82%8A%E3%81%8C%E3%81%A8%E3%81%86%E3%80%82%3CBR%20%2F%3E%3CBR%20%2F%3E%E4%B8%BB%E8%A6%81%20-%3C%2FP%3E%3CP%3Eint%20main(void)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3EvPortDefineHeapRegions(xHeapRegions)%3B%3C%2FP%3E%3CP%3EBOARD_InitBootPins()%3B%3CBR%20%2F%3E%20BOARD_InitBootClocks()%3B%3CBR%20%2F%3E%20BOARD_InitBootPeripherals()%3B%3CBR%20%2F%3E%20BOARD_InitUSB1HS_USBPLL_Only()%3B%3C%2FP%3E%3CP%3ESEGGER_RTT_Init()%3B%3C%2FP%3E%3CP%3EPRINTF(%22%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E8%B5%B7%E5%8B%95%E4%B8%AD...%5Cr%5Cn%22)%3B%3CBR%20%2F%3E%20PRINTF(%22%E3%82%B3%E3%82%A2%E3%82%AF%E3%83%AD%E3%83%83%E3%82%AF%20%3D%20%25lu%20Hz%5Cr%5Cn%22%2C%20CLOCK_GetFreq(kCLOCK_CoreSysClk))%3B%3C%2FP%3E%3CP%3E%2F*%201.%20%E3%83%91%E3%83%AF%E3%83%BC%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%92%E5%84%AA%E5%85%88%E7%9A%84%E3%81%AB%E6%89%B1%E3%81%86%20*%2F%3CBR%20%2F%3E%20POWER_DisablePD(kPDRUNCFG_PD_VD2_ANA)%3B%3CBR%20%2F%3E%20POWER_DisablePD(kPDRUNCFG_PD_VD3)%3B%3CBR%20%2F%3E%20POWER_DisablePD(kPDRUNCFG_PD_VD5)%3B%3CBR%20%2F%3E%20POWER_DisablePD(kPDRUNCFG_PD_USB_PLL)%3B%3CBR%20%2F%3E%20POWER_DisablePD(kPDRUNCFG_PD_USB1_PHY)%3B%3CBR%20%2F%3E%20%2F*%20PHY%E3%83%AD%E3%82%B8%E3%83%83%E3%82%AF%E3%81%A8%E3%81%AF%E5%88%A5%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E5%A4%9A%E3%81%84PHY%20LDO%EF%BC%88%E3%83%93%E3%83%83%E3%83%8824%EF%BC%89%E3%81%AE%E9%9B%BB%E6%BA%90%E3%82%92%E3%82%AA%E3%83%B3%E3%81%AB%E3%81%97%E3%81%BE%E3%81%99%20*%2F%3CBR%20%2F%3E%20SYSCON-%26gt%3BPDRUNCFGCLR%5B0%5D%20%3D%20(1U%20%26lt%3B%26lt%3B%2024)%3B%3C%2FP%3E%3CP%3ESDK_DelayAtLeastUs(15000%2C%20SystemCoreClock)%3B%3CBR%20%2F%3E%20while%20(!(SYSCON-%26gt%3BUSBPLLSTAT%20%26amp%3B%200x1))%3B%20%2F%2F%20%E3%83%8F%E3%83%BC%E3%83%89%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%AD%E3%83%83%E3%82%AF%E3%82%92%E5%BE%85%E6%A9%9F%E3%81%99%E3%82%8B%3C%2FP%3E%3CP%3E%2F*%202.%20%E6%89%8B%E5%8B%95%E6%99%82%E8%A8%88%E3%81%AE%E4%BF%AE%E6%AD%A3%20*%2F%3CBR%20%2F%3E%20PRINTF(%22%E6%89%8B%E5%8B%95%E6%99%82%E8%A8%88%E4%BF%AE%E6%AD%A3%E3%82%92%E9%81%A9%E7%94%A8%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99...%5Cr%5Cn%22)%3B%3C%2FP%3E%3CP%3E%2F%2F%20%E9%87%8D%E8%A6%81%3A%20%E5%88%86%E5%91%A8%E5%99%A8%E3%83%AD%E3%82%B8%E3%83%83%E3%82%AF%E3%81%8C%E3%80%8C%E3%82%A2%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89%E3%80%8D%E3%81%95%E3%82%8C%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%80%81AHB%20%E3%82%AF%E3%83%AD%E3%83%83%E3%82%AF%E3%81%8C%E3%82%AA%E3%83%95%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%3CBR%20%2F%3ESYSCON-%26gt%3BAHBCLKCTRLCLR%5B2%5D%20%3D%20(1U%20%26lt%3B%26lt%3B%2018)%3B%3CBR%20%2F%3E%20SYSCON-%26gt%3BUSB1CLKDIV%20%7C%3D%20(1U%20%26lt%3B%26lt%3B%2030)%3B%20%2F%2F%20%E3%83%87%E3%82%A3%E3%83%90%E3%82%A4%E3%83%80%E3%82%92%E5%81%9C%E6%AD%A2%E3%81%97%E3%81%BE%E3%81%99%3CBR%20%2F%3ESYSCON-%26gt%3BUSB1CLKSEL%20%3D%207U%3B%20%2F%2F%20%22%E7%84%A1%E5%8A%B9%22%20(None%E3%81%AB%E3%83%91%E3%83%BC%E3%82%AF)%3CBR%20%2F%3E%20for%20(volatile%20int%20i%20%3D%200%3B%20i%20%26lt%3B%201500%3B%20i%2B%2B)%20%7B%20__asm(%22NOP%22)%3B%20%7D%3C%2FP%3E%3CP%3ESYSCON-%26gt%3BUSB1CLKSEL%20%3D%202U%3B%20%2F%2F%20%E3%82%BF%E3%83%BC%E3%82%B2%E3%83%83%E3%83%88%3A%20USBPLL%20(288MHz)%3CBR%20%2F%3E%20SYSCON-%26gt%3BUSB1CLKDIV%20%3D%20(1U%20%26lt%3B%26lt%3B%2030)%20%7C%205U%3B%20%2F%2F%20%E7%9B%AE%E6%A8%99%3A%206%E5%88%86%E5%91%A8%20(48MHz)%3CBR%20%2F%3E%20for%20(volatile%20int%20i%20%3D%200%3B%20i%20%26lt%3B%201500%3B%20i%2B%2B)%20%7B%20__asm(%22NOP%22)%3B%20%7D%3C%2FP%3E%3CP%3ESYSCON-%26gt%3BUSB1CLKDIV%20%26amp%3B%3D%20~(1U%20%26lt%3B%26lt%3B%2030)%3B%20%2F%2F%20%E5%81%9C%E6%AD%A2%E3%82%92%E8%A7%A3%E9%99%A4%E3%81%99%E3%82%8B%3C%2FP%3E%3CP%3EPRINTF(%22POST-FIX%20USB1CLKSEL%3A%200x%2508lX%5Cr%5Cn%22%2C%20SYSCON-%26gt%3BUSB1CLKSEL)%3B%3CBR%20%2F%3E%20PRINTF(%22POST-FIX%20USB1CLKDIV%3A%200x%2508lX%5Cr%5Cn%22%2C%20SYSCON-%26gt%3BUSB1CLKDIV)%3B%3C%2FP%3E%3CP%3E%2F*%203.%20%E3%83%8F%E3%83%BC%E3%83%89%E3%82%A6%E3%82%A7%E3%82%A2%E6%9C%89%E5%8A%B9%E5%8C%96%E3%81%A8%E3%83%AA%E3%82%BB%E3%83%83%E3%83%88%E3%83%91%E3%83%AB%E3%82%B9%20*%2F%3CBR%20%2F%3E%20%2F%2F%20%E3%82%AF%E3%83%AD%E3%83%83%E3%82%AF%E3%81%8C%E5%AE%89%E5%AE%9A%E3%81%97%E3%81%9F%E3%81%AE%E3%81%A7%E3%80%81AHB%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%E3%82%92%E3%82%AA%E3%83%B3%E3%81%AB%E3%81%97%E3%81%BE%E3%81%99%3CBR%20%2F%3ESYSCON-%26gt%3BAHBCLKCTRLSET%5B2%5D%20%3D%20(1U%20%26lt%3B%26lt%3B%2018)%3B%3C%2FP%3E%3CP%3E%2F%2F%E3%83%91%E3%83%AB%E3%82%B9%E3%83%AA%E3%82%BB%E3%83%83%E3%83%88%E3%81%A7%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%82%9248MHz%E3%82%AF%E3%83%AD%E3%83%83%E3%82%AF%E3%81%AB%E5%90%8C%E6%9C%9F%E3%81%95%E3%81%9B%E3%82%8B%3CBR%20%2F%3ESYSCON-%26gt%3BPRESETCTRLSET%5B2%5D%20%3D%20(1U%20%26lt%3B%26lt%3B%2018)%3B%3CBR%20%2F%3E%20for%20(volatile%20int%20i%20%3D%200%3B%20i%20%26lt%3B%201000%3B%20i%2B%2B)%20%7B%20__asm(%22NOP%22)%3B%20%7D%3CBR%20%2F%3E%20SYSCON-%26gt%3BPRESETCTRLCLR%5B2%5D%20%3D%20(1U%20%26lt%3B%26lt%3B%2018)%3B%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%2F*%205.%20%E5%88%9D%E6%9C%9F%E5%8C%96%E5%89%8D%E3%81%AE%E6%9C%80%E7%B5%82%E8%A8%BA%E6%96%AD%20*%2F%3CBR%20%2F%3E%20PRINTF(%22%5Cr%5Cn---%20%E5%88%9D%E6%9C%9F%E5%8C%96%E5%89%8D%E8%A8%BA%E6%96%AD%20---%5Cr%5Cn%22)%3B%3CBR%20%2F%3E%20PRINTF(%22USB1CLKSEL%20%3A%200x%2508lX%5Cr%5Cn%22%2C%20SYSCON-%26gt%3BUSB1CLKSEL)%3B%3CBR%20%2F%3E%20PRINTF(%22USB1CLKDIV%20%3A%200x%2508lX%5Cr%5Cn%22%2C%20SYSCON-%26gt%3BUSB1CLKDIV)%3B%3CBR%20%2F%3E%20PRINTF(%22USBHSH-%26gt%3BPORTSC1%20%3A%200x%2508lX%5Cr%5Cn%22%2C%20USBHSH-%26gt%3BPORTSC1)%3B%3CBR%20%2F%3E%20PRINTF(%22PDRUNCFG%20%3A%200x%2508lX%5Cr%5Cn%22%2C%20SYSCON-%26gt%3BPDRUNCFG)%3B%3C%2FP%3E%3CP%3E%2F*%20---%201.%20%E7%89%A9%E7%90%86%E6%A7%8B%E6%88%90%E3%81%AE%E5%BC%B7%E5%88%B6%20---%20*%2F%3CBR%20%2F%3E%20%2F%2F%2016%3A%20%E3%83%9B%E3%82%B9%E3%83%88%E3%83%A2%E3%83%BC%E3%83%89%E3%80%8117%3A%20%E3%82%AF%E3%83%AD%E3%83%83%E3%82%AF%E6%9C%89%E5%8A%B9%E3%80%8121%3A%20VBUS%20%E5%BC%B7%E5%88%B6%E3%80%8123%3A%2048MHz%20%E3%83%AD%E3%83%83%E3%82%AF%E5%BC%B7%E5%88%B6%3CBR%20%2F%3EUSBHSH-%26gt%3BPORTMODE%20%7C%3D%20(1U%20%26lt%3B%26lt%3B%2016)%20%7C%20(1U%20%26lt%3B%26lt%3B%2017)%20%7C%20(1U%20%26lt%3B%26lt%3B%2021)%20%7C%20(1U%20%26lt%3B%26lt%3B%2023)%3B%3C%2FP%3E%3CP%3E%2F*%20---%202.%20%E6%9C%80%E7%B5%82%E3%83%8F%E3%83%BC%E3%83%89%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%AA%E3%82%BB%E3%83%83%E3%83%88%E3%83%91%E3%83%AB%E3%82%B9%20---%20*%2F%3CBR%20%2F%3E%20SYSCON-%26gt%3BPRESETCTRLSET%5B2%5D%20%3D%20(1U%20%26lt%3B%26lt%3B%2018)%3B%3CBR%20%2F%3E%20for%20(volatile%20int%20i%20%3D%200%3B%20i%20%26lt%3B%205000%3B%20i%2B%2B)%20%7B%20__asm(%22NOP%22)%3B%20%7D%3CBR%20%2F%3E%20SYSCON-%26gt%3BPRESETCTRLCLR%5B2%5D%20%3D%20(1U%20%26lt%3B%26lt%3B%2018)%3B%3C%2FP%3E%3CP%3E%2F*%20---%203.%20%E5%AE%89%E5%AE%9A%E5%8C%96%E9%81%85%E5%BB%B6%20---%20*%2F%3CBR%20%2F%3E%20SDK_DelayAtLeastUs(10000%2C%20SystemCoreClock)%3B%3C%2FP%3E%3CP%3E%2F*%20---%204.%20%E5%88%9D%E6%9C%9F%E5%8C%96%E5%89%8D%E8%A8%BA%E6%96%AD%20---%20*%2F%3CBR%20%2F%3E%20PRINTF(%22%5Cr%5Cn---%20%E6%9C%80%E7%B5%82%E3%83%8F%E3%83%BC%E3%83%89%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%20---%5Cr%5Cn%22)%3B%3CBR%20%2F%3E%20PRINTF(%22USBHSH-%26gt%3BUSBSTS%3A%200x%2508lX%5Cr%5Cn%22%2C%20USBHSH-%26gt%3BUSBSTS)%3B%3CBR%20%2F%3E%20PRINTF(%22USBHSH-%26gt%3BUSBCMD%3A%200x%2508lX%5Cr%5Cn%22%2C%20USBHSH-%26gt%3BUSBCMD)%3B%3CBR%20%2F%3E%20PRINTF(%22USBHSH-%26gt%3BPORTMODE%3A%200x%2508lX%5Cr%5Cn%22%2C%20USBHSH-%26gt%3BPORTMODE)%3B%3C%2FP%3E%3CP%3E%2F*%202.%20%E3%82%AF%E3%83%AD%E3%83%83%E3%82%AF%E3%83%84%E3%83%AA%E3%83%BC%E5%A4%89%E6%95%B0%E3%82%92%E5%86%8D%E5%90%8C%E6%9C%9F%E3%81%99%E3%82%8B%20*%2F%3CBR%20%2F%3E%20SystemCoreClockUpdate()%3B%3C%2FP%3E%3CP%3E%2F*%203.%20USB1%E3%82%AF%E3%83%AD%E3%83%83%E3%82%AF%E3%82%B2%E3%83%BC%E3%83%88%E3%82%92%E6%89%8B%E5%8B%95%E3%81%A7%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%82%8B%20*%2F%3CBR%20%2F%3E%20%2F%2F%20SYSCON-%26gt%3BAHBCLKCTRLSET%5B2%5D%20%3D%20(1U%20%26lt%3B%26lt%3B%2018)%3B%20%2F%2F%20AHB%E3%81%8C%E3%82%AA%E3%83%B3%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E7%A2%BA%E8%AA%8D%3C%2FP%3E%3CP%3E%3CBR%20%2F%3Estatus_t%20clkStatus%20%3D%20CLOCK_EnableUsbhs0HostClock(kCLOCK_UsbSrcUsbPll%2C%2048000000U)%3B%3CBR%20%2F%3E%20PRINTF(%22%E3%82%AF%E3%83%AD%E3%83%83%E3%82%AF%E3%82%A4%E3%83%8D%E3%83%BC%E3%83%96%E3%83%AB%E3%81%8C%E8%BF%94%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F%3A%20%25d%5Cr%5Cn%22%2C%20clkStatus)%3B%3C%2FP%3E%3CP%3EPRINTF(%22USB%20PLL%E5%91%A8%E6%B3%A2%E6%95%B0%20%3D%20%25lu%20Hz%5Cr%5Cn%22%2C%20CLOCK_GetFreq(kCLOCK_UsbPll))%3B%3CBR%20%2F%3E%20PRINTF(%22USB1CLK%E5%91%A8%E6%B3%A2%E6%95%B0%20%3D%20%25lu%20Hz%5Cr%5Cn%22%2C%20CLOCK_GetFreq(kCLOCK_UsbClk))%3B%3C%2FP%3E%3CP%3E%2F*%206.%20%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF%E5%88%9D%E6%9C%9F%E5%8C%96%20*%2F%3CBR%20%2F%3E%20usb_status_t%20status%20%3D%20USB_HostInit(CONTROLLER_ID%2C%20%26amp%3Bg_HostHandle%2C%20USB_HostEvent)%3B%3CBR%20%2F%3E%20if%20(status%20!%3D%20kStatus_USB_Success)%20%7B%3CBR%20%2F%3E%20PRINTF(%22USB_HostInit%20%E3%81%8C%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%20%25d%20%E3%81%A7%E5%A4%B1%E6%95%97%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%5Cr%5Cn%22%2C%20status)%3B%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3C%2FP%3E%3CP%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2366871%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20LPC54605J256BD100%20Won't%20attach%20USB%20clock%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2366871%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F262626%22%20target%3D%22_blank%22%3E%40SOOTY1%3C%2FA%3E%3C%2FP%3E%0A%3CDIV%3E%E3%81%8A%E4%BD%BF%E3%81%84%E3%81%AE%E3%83%9C%E3%83%BC%E3%83%89%E3%81%A7SDK%E3%81%AE%E3%83%87%E3%83%A2%E3%82%92%E3%83%86%E3%82%B9%E3%83%88%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%3C%2FDIV%3E%0A%3CDIV%3EUSB%E3%83%87%E3%83%A2%E3%82%92USB0%E3%81%8B%E3%82%89USB1%E3%81%AB%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E3%82%AC%E3%82%A4%E3%83%89%E3%81%8C%E7%94%A8%E6%84%8F%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%3C%2FDIV%3E%0A%3CDIV%3E%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2FLPC-Microcontrollers-Knowledge%2FLPC-ALL-Summary-of-Switching-USB-demo-from-USB0-to-USB1%2Fta-p%2F1428522%22%20target%3D%22_blank%22%3Ehttps%3A%2F%2Fcommunity.nxp.com%2Ft5%2FLPC-Microcontrollers-Knowledge%2FLPC-ALL-Summary-of-Switching-USB-demo-from-USB0-to-USB1%2Fta-p%2F1428522%3C%2FA%3E%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%0A%3CDIV%3EBR%3C%2FDIV%3E%0A%3CDIV%3E%E3%82%A2%E3%83%AA%E3%82%B9%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2366944%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20LPC54605J256BD100%20Won't%20attach%20USB%20clock%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2366944%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E3%82%A2%E3%83%AA%E3%82%B9%E3%80%81%E3%81%82%E3%82%8A%E3%81%8C%E3%81%A8%E3%81%86%E3%80%82xx628%E3%83%9B%E3%82%B9%E3%83%88HID%E6%B1%8E%E7%94%A8%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%81%AB%E5%90%AB%E3%81%BE%E3%82%8C%E3%82%8B%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89%E3%80%81USB%E3%83%9B%E3%82%B9%E3%83%88%E5%88%9D%E6%9C%9F%E5%8C%96%E3%82%92%E3%81%AA%E3%82%93%E3%81%A8%E3%81%8B%E7%B5%84%E3%81%BF%E7%AB%8B%E3%81%A6%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%3C%2FP%3E%3CP%3E%E3%81%A9%E3%81%86%E3%82%82%E3%81%82%E3%82%8A%E3%81%8C%E3%81%A8%E3%81%86%E3%81%94%E3%81%96%E3%81%84%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2370424%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20LPC54605J256BD100%20Won't%20attach%20USB%20clock%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2370424%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3EUSB%E3%83%9B%E3%82%B9%E3%83%88HID%E3%82%AD%E3%83%BC%E3%83%91%E3%83%83%E3%83%89%E3%81%AE%E4%BE%8B%E3%81%8C%E5%BF%85%E8%A6%81%E3%81%AA%E5%A0%B4%E5%90%88%E3%81%AF%E3%80%81LPC54605J256BD100%E3%81%A7%E3%81%93%E3%82%8C%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%E7%A7%81%E3%81%AF%E6%AC%A1%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E5%8B%95%E4%BD%9C%E3%81%95%E3%81%9B%E3%81%A6%E3%81%84%E3%81%BE%E3%81%97%E3%81%9F%3A%20RTT%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88%E3%80%81SEGGER%E3%83%97%E3%83%AD%E3%83%BC%E3%83%96%E3%81%8C%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AF%E5%8F%96%E3%82%8A%E5%A4%96%E3%81%99%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%3C%2FP%3E%3CP%3E%23include%20%3CSTDIO.H%3E%3CBR%20%2F%3E%23include%20%3CSTRING.H%3E%3CBR%20%2F%3E%23include%20%3CSTDBOOL.H%3E%3C%2FSTDBOOL.H%3E%3C%2FSTRING.H%3E%3C%2FSTDIO.H%3E%3C%2FP%3E%3CP%3E%23include%20%22board.h%22%3CBR%20%2F%3E%23include%20%22%E3%83%9A%E3%83%AA%E3%83%95%E3%82%A7%E3%83%A9%E3%83%AB%22%3CBR%20%2F%3E%23include%20%22pin_mux.h%22%3CBR%20%2F%3E%23include%20%22clock_config.h%22%3CBR%20%2F%3E%23include%20%22fsl_device_registers.h%22%3CBR%20%2F%3E%23include%20%22fsl_power.h%22%3C%2FP%3E%3CP%3E%23include%20%22SEGGER_RTT.h%22%3CBR%20%2F%3E%23include%20%22FreeRTOS.h%22%3CBR%20%2F%3E%23include%20%22task.h%22%3C%2FP%3E%3CP%3E%23include%20%22usb_host_config.h%22%3CBR%20%2F%3E%23include%20%22usb_host.h%22%3CBR%20%2F%3E%23include%20%22usb.h%22%3CBR%20%2F%3E%23include%20%22usb_host_hid.h%22%3CBR%20%2F%3E%23include%20%22host_hid_generic.h%22%3CBR%20%2F%3E%20%23include%20%22usb_host_ip3516hs.h%22%3CBR%20%2F%3E%20%23include%20%22usb_host_hub.h%22%3CBR%20%2F%3E%23include%20%22usb_host_interface_0_hid_keyboard.h%22%3C%2FP%3E%3CP%3E%23define%20PRINTF(...)%20SEGGER_RTT_printf(0%2C%20__VA_ARGS__)%3CBR%20%2F%3E%20%23define%20CONTROLLER_ID%20kUSB_ControllerIp3516Hs0%3C%2FP%3E%3CP%3Estatic%20usb_host_handle%20g_HostHandle%3B%3CBR%20%2F%3E%20static%20usb_host_interface_handle%20g_HidKeyboardInterface%20%3D%20NULL%3B%3CBR%20%2F%3E%20static%20usb_host_class_handle%20g_HidKeyboardClassHandle%20%3D%20NULL%3B%3CBR%20%2F%3E%20static%20usb_device_handle%20g_HidKeyboardDeviceHandle%20%3D%20NULL%3B%3CBR%20%2F%3E%20static%20volatile%20bool%20g_KeyboardReady%20%3D%20false%3B%3CBR%20%2F%3E%20static%20uint8_t%20g_KeyboardReport%5B8%5D%3B%3C%2FP%3E%3CP%3Estatic%20const%20char%20*keycode_to_ascii(uint8_t%20keycode%2C%20uint8_t%20modifiers)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3E%EF%BC%88%E7%84%A1%E5%8A%B9%EF%BC%89%E4%BF%AE%E9%A3%BE%E5%AD%90%3B%3CBR%20%2F%3E%20static%20char%20buf%5B20%5D%3B%3C%2FP%3E%3CP%3E%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81%EF%BC%88%E3%82%AD%E3%83%BC%E3%82%B3%E3%83%BC%E3%83%89%EF%BC%89%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3ECASE%2098%EF%BC%9A0%E3%82%92%E8%BF%94%E3%81%99%E3%80%82%3CBR%20%2F%3E%20CASE%2089%3A%20return%20%221%22%3B%3CBR%20%2F%3E%20CASE%2090%3A%20return%20%222%22%3B%3CBR%20%2F%3E%20CASE%2091%3A%20return%20%223%22%3B%3CBR%20%2F%3E%20CASE%2092%3A%20return%20%224%22%3B%3CBR%20%2F%3E%20CASE%2093%3A%20return%20%225%22%3B%3CBR%20%2F%3E%20CASE%2094%3A%20return%20%226%22%3B%3CBR%20%2F%3E%20CASE%2095%3A%20return%20%227%22%3B%3CBR%20%2F%3E%20CASE%2096%3A%20return%20%228%22%3B%3CBR%20%2F%3E%20CASE%2097%3A%20return%20%229%22%3B%3CBR%20%2F%3E%20CASE%2099%3A%20return%20%22.%22%3B%3CBR%20%2F%3Ecase%2085%3A%20return%20%22*%22%3B%3CBR%20%2F%3E%20case%2086%3A%20return%20%22-%22%3B%3CBR%20%2F%3E%20case%2087%3A%20return%20%22%2B%22%3B%3CBR%20%2F%3E%20case%2088%3A%20return%20%22%5BENTER%5D%22%3B%3CBR%20%2F%3E%20case%2076%3A%20return%20%22%2F%22%3B%3CBR%20%2F%3E%20case%2083%3A%20return%20%22%5BNUMLOCK%5D%22%3B%3CBR%20%2F%3E%20case%2042%3A%20return%20%22%5BBACKSPACE%5D%22%3B%3CBR%20%2F%3E%20case%2079%3A%20return%20%22%5BRIGHT%5D%22%3B%3CBR%20%2F%3E%20case%2080%3A%20return%20%22%5BLEFT%5D%22%3B%3CBR%20%2F%3E%20case%2081%3A%20return%20%22%5BDOWN%5D%22%3B%3CBR%20%2F%3E%20case%2082%3A%20return%20%22%5BUP%5D%22%3B%3CBR%20%2F%3E%20case%2075%3A%20return%20%22%5BHOME%5D%22%3B%3CBR%20%2F%3E%20case%2078%3A%20return%20%22%5BPGUP%5D%22%3B%3CBR%20%2F%3E%20case%2077%3A%20return%20%22%5BEND%5D%22%3B%3CBR%20%2F%3E%20case%2074%3A%20return%20%22%5BINS%5D%22%3B%3CBR%20%2F%3E%20case%2073%3A%20return%20%22%5BDEL%5D%22%3B%3CBR%20%2F%3E%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%EF%BC%9A%3CBR%20%2F%3E%20snprintf(buf%2C%20sizeof(buf)%2C%20%22%5B0x%2502X%5D%22%2C%20keycode)%3B%3CBR%20%2F%3E%20buf%E3%82%92%E8%BF%94%E3%81%99%E3%80%82%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3Estatic%20void%20USB_HostHidKeyboardRecvCallback(void%20*param%2C%3CBR%20%2F%3E%20uint8_t%20*buffer%E3%80%81%3CBR%20%2F%3E%20uint32_t%20%E9%95%B7%E3%81%95%E3%80%81%3CBR%20%2F%3E%20usb_status_t%20%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3E(void)param%3B%3C%2FP%3E%3CP%3Eif%20(status%20%3D%3D%20kStatus_USB_Success%20%26amp%3B%26amp%3B%20buffer%20!%3D%20NULL%20%26amp%3B%26amp%3B%20length%20%26gt%3B%200)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3Euint8_t%20modifiers%20%3D%20buffer%5B0%5D%3B%3CBR%20%2F%3E%20uint8_t%20key%20%3D%200%3B%3C%2FP%3E%3CP%3Efor%20(int%20i%20%3D%202%3B%20i%20%26lt%3B%208%3B%20i%2B%2B)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3Eif%20(buffer%5Bi%5D%20!%3D%200)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3Ekey%20%3D%20buffer%5Bi%5D%3B%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3Eif%20(key%20!%3D%200)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3EPRINTF(%22%E3%82%AD%E3%83%BC%3A%200x%2502X%20-%26gt%3B%20%25s%22%2C%20key%2C%20keycode_to_ascii(key%2C%20modifiers))%3B%3CBR%20%2F%3E%E4%BF%AE%E9%A3%BE%E5%AD%90%E3%81%AE%E5%A0%B4%E5%90%88%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3EPRINTF(%22%20(Mod%3A0x%2502X)%22%2C%20%E4%BF%AE%E9%A3%BE%E5%AD%90)%3B%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%20PRINTF(%22%5Cr%5Cn%22)%3B%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%E3%81%9D%E3%82%8C%E4%BB%A5%E5%A4%96%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3EPRINTF(%22%E3%82%AD%E3%83%BC%E3%81%8C%E8%A7%A3%E6%94%BE%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F%5Cr%5Cn%22)%3B%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%20else%20if%20(status%20!%3D%20kStatus_USB_Success)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3EPRINTF(%22HID%E5%8F%97%E4%BF%A1%E3%82%A8%E3%83%A9%E3%83%BC%3A%20%25d%5Cr%5Cn%22%2C%20status)%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3Eif%20(g_HidKeyboardClassHandle%20!%3D%20NULL)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3EUSB_HostHidRecv(g_HidKeyboardClassHandle%2C%3CBR%20%2F%3E%20g_KeyboardReport%E3%80%81%3CBR%20%2F%3E%20sizeof(g_KeyboardReport)%E3%80%81%3CBR%20%2F%3E%20USB_HostHidKeyboardRecvCallback%E3%80%81%3CBR%20%2F%3E%20NULL)%3B%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3Estatic%20void%20hid_set_interface_callback(void%20*param%2C%3CBR%20%2F%3E%20uint8_t%20*%E3%83%87%E3%83%BC%E3%82%BF%E3%80%81%3CBR%20%2F%3E%20uint32_t%20dataLength%E3%80%81%3CBR%20%2F%3E%20usb_status_t%20%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3E(void)param%3B%3CBR%20%2F%3E%20%EF%BC%88%E7%A9%BA%EF%BC%89%E3%83%87%E3%83%BC%E3%82%BF%3B%3CBR%20%2F%3E%20(void)dataLength%3B%3C%2FP%3E%3CP%3Eif%20(status%20!%3D%20kStatus_USB_Success)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3EPRINTF(%22SetInterface%20%E3%81%8C%E5%A4%B1%E6%95%97%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%3A%20%25d%5Cr%5Cn%22%2C%20status)%3B%3CBR%20%2F%3E%E6%88%BB%E3%82%8B%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3EPRINTF(%22%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%E3%81%AE%E3%83%90%E3%82%A4%E3%83%B3%E3%83%89%E3%81%AF%E6%AD%A3%E5%B8%B8%E3%81%AB%E5%AE%8C%E4%BA%86%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%5Cr%5Cn%22)%3B%3C%2FP%3E%3CP%3EUSB_HostHidSetProtocol(g_HidKeyboardClassHandle%E3%80%81%3CBR%20%2F%3E%20USB_HOST_HID_REQUEST_PROTOCOL_BOOT%E3%80%81%3CBR%20%2F%3E%20NULL%E3%80%81%3CBR%20%2F%3E%20NULL)%3B%3C%2FP%3E%3CP%3EUSB_HostHidRecv(g_HidKeyboardClassHandle%2C%3CBR%20%2F%3E%20g_KeyboardReport%E3%80%81%3CBR%20%2F%3E%20sizeof(g_KeyboardReport)%E3%80%81%3CBR%20%2F%3E%20USB_HostHidKeyboardRecvCallback%E3%80%81%3CBR%20%2F%3E%20NULL)%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3Estatic%20void%20USB_StartKeyboardIfReady(void)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3Eusb_status_t%20%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%3B%3C%2FP%3E%3CP%3Eif%20(!g_KeyboardReady%20%7C%7C%20g_HidKeyboardDeviceHandle%20%3D%3D%20NULL)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3E%E6%88%BB%E3%82%8B%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3Eg_KeyboardReady%20%3D%20false%3B%3C%2FP%3E%3CP%3Estatus%20%3D%20USB_HostHidInit(g_HidKeyboardDeviceHandle%2C%20%26amp%3Bg_HidKeyboardClassHandle)%3B%3CBR%20%2F%3E%20PRINTF(%22HidInit%20%3D%20%25d%5Cr%5Cn%22%2C%20status)%3B%3C%2FP%3E%3CP%3Eif%20(status%20!%3D%20kStatus_USB_Success)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3E%E6%88%BB%E3%82%8B%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3Estatus%20%3D%20USB_HostHidSetInterface(g_HidKeyboardClassHandle%2C%3CBR%20%2F%3E%20g_HidKeyboardInterface%E3%80%81%3CBR%20%2F%3E%200%E3%80%81%3CBR%20%2F%3E%20hid_set_interface_callback%E3%80%81%3CBR%20%2F%3E%20NULL)%3B%3CBR%20%2F%3E%20PRINTF(%22SetInterface%20submit%20%3D%20%25d%5Cr%5Cn%22%2C%20status)%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3Eusb_status_t%20USB_HostEvent(usb_device_handle%20deviceHandle%2C%3CBR%20%2F%3E%20usb_host_configuration_handle%20configurationHandle%E3%80%81%3CBR%20%2F%3E%20uint32_t%20eventCode)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3Eusb_host_configuration_t%20*config%3B%3CBR%20%2F%3E%20uint8_t%20interfaceIndex%3B%3C%2FP%3E%3CP%3Eswitch%20(eventCode)%3CBR%20%2F%3E%7B%3CBR%20%2F%3ECASE%20kUSB_HostEventAttach%3A%3CBR%20%2F%3Eg_HidKeyboardDeviceHandle%20%3D%20deviceHandle%3B%3CBR%20%2F%3EPRINTF(%22USB%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%81%8C%E6%8E%A5%E7%B6%9A%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F%5Cr%5Cn%22)%3B%3CBR%20%2F%3Ebreak%3B%3C%2FP%3E%3CP%3Ecase%20kUSB_HostEventEnumerationDone%3A%3CBR%20%2F%3E%20if%20(g_HidKeyboardDeviceHandle%20!%3D%20deviceHandle)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3Econfig%20%3D%20(usb_host_configuration_t%20*)configurationHandle%3B%3C%2FP%3E%3CP%3Efor%20(interfaceIndex%20%3D%200%3B%20interfaceIndex%20%26lt%3B%20config-%26gt%3BinterfaceCount%3B%20interfaceIndex%2B%2B)%3CBR%20%2F%3E%7B%3CBR%20%2F%3Eusb_host_interface_t%20*interface%20%3D%20%26amp%3Bconfig-%26gt%3BinterfaceList%5BinterfaceIndex%5D%3B%3CBR%20%2F%3Eusb_descriptor_%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9_t%20*desc%20%3D%20(usb_descriptor_interface_t%20*)interface-%26gt%3BinterfaceDesc%3B%3C%2FP%3E%3CP%3Eif%20(desc%20%3D%3D%20NULL)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3E%E7%B6%9A%E3%81%8F%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3Eif%20(desc-%26gt%3BbInterfaceClass%20%3D%3D%20USB_HOST_HID_CLASS_CODE)%3CBR%20%2F%3E%7B%3CBR%20%2F%3Eg_HidKeyboard%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%20%3D%20interface%3B%3CBR%20%2F%3Eg_HidKeyboardDeviceHandle%20%3D%20deviceHandle%3B%3CBR%20%2F%3Eg_KeyboardReady%20%3D%20true%3B%3C%2FP%3E%3CP%3EPRINTF(%22HID%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E3%81%8C%E6%A4%9C%E5%87%BA%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F%5Cr%5Cn%22)%3B%3C%2FP%3E%3CP%3EUSB_StartKeyboardIfReady()%3B%3CBR%20%2F%3E%20kStatus_USB_Success%20%E3%82%92%E8%BF%94%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3C%2FP%3E%3CP%3E%E3%82%B1%E3%83%BC%E3%82%B9%20kUSB_HostEventDetach%3A%3CBR%20%2F%3E%20if%20(g_HidKeyboardDeviceHandle%20%3D%3D%20deviceHandle)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3EPRINTF(%22USB%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E3%81%8C%E5%8F%96%E3%82%8A%E5%A4%96%E3%81%95%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F%5Cr%5Cn%22)%3B%3CBR%20%2F%3E%20g_HidKeyboardDeviceHandle%20%3D%20NULL%3B%3CBR%20%2F%3E%20g_HidKeyboardInterface%20%3D%20NULL%3B%3CBR%20%2F%3E%20g_HidKeyboardClassHandle%20%3D%20NULL%3B%3CBR%20%2F%3E%20g_KeyboardReady%20%3D%20false%3B%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3C%2FP%3E%3CP%3E%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%EF%BC%9A%3CBR%20%2F%3E%E5%A3%8A%E3%81%99%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3EkStatus_USB_Success%20%E3%82%92%E8%BF%94%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3Evoid%20USB_HostClockInit(void)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3E%23if%20((defined%20USB_HOST_CONFIG_IP3516HS)%20%26amp%3B%26amp%3B%20(USB_HOST_CONFIG_IP3516HS%20%26gt%3B%200U))%3CBR%20%2F%3E%20CLOCK_EnableUsbhs0HostClock(kCLOCK_UsbSrcUsbPll%2C%2048000000U)%3B%3CBR%20%2F%3E%20USBHSH-%26gt%3BPORTMODE%20%26amp%3B%3D%20~(1UL%20%26lt%3B%26lt%3B%2016)%3B%3CBR%20%2F%3E%20USBHSH-%26gt%3BPORTMODE%20%7C%3D%20(1UL%20%26lt%3B%26lt%3B%2017)%3B%3CBR%20%2F%3E%20USBHSH-%26gt%3BPORTMODE%20%26amp%3B%3D%20~(1UL%20%26lt%3B%26lt%3B%208)%3B%3C%2FP%3E%3CP%3Efor%20(volatile%20uint32_t%20d%20%3D%200%3B%20d%20%26lt%3B%20500000%3B%20d%2B%2B)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3E__NOP()%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3E%23if%20((defined%20FSL_FEATURE_USBHSH_USB_RAM)%20%26amp%3B%26amp%3B%20(FSL_FEATURE_USBHSH_USB_RAM%20%26gt%3B%200U))%3CBR%20%2F%3E%20for%20(int%20i%20%3D%200%3B%20i%20%26lt%3B%20(FSL_FEATURE_USBHSH_USB_RAM%20%26gt%3B%26gt%3B%202)%3B%20i%2B%2B)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3E((uint32_t%20*)FSL_FEATURE_USBHSH_USB_RAM_BASE_ADDRESS)%5Bi%5D%20%3D%200U%3B%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%20%23endif%3CBR%20%2F%3E%20%23endif%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3Evoid%20USB_HostIsrEnable(void)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3EIRQn_Type%20irqNumber%20%3D%20USB1_IRQn%3B%3CBR%20%2F%3E%20NVIC_SetPriority(irqNumber%2C%20USB_HOST_INTERRUPT_PRIORITY)%3B%3CBR%20%2F%3E%20EnableIRQ(irqNumber)%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3Eusb_status_t%20USB_HostApplicationInit(void)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3Eusb_status_t%20status%20%3D%20kStatus_USB_Success%3B%3C%2FP%3E%3CP%3EUSB_HostClockInit()%3B%3CBR%20%2F%3E%20PRINTF(%22%E3%82%AF%E3%83%AD%E3%83%83%E3%82%AF%E5%88%9D%E6%9C%9F%E5%8C%96%E5%AE%8C%E4%BA%86%5Cr%5Cn%22)%3B%3C%2FP%3E%3CP%3E%23if%20((defined%20FSL_FEATURE_SOC_SYSMPU_COUNT)%20%26amp%3B%26amp%3B%20(FSL_FEATURE_SOC_SYSMPU_COUNT))%3CBR%20%2F%3E%20SYSMPU_Enable(SYSMPU%2C%200)%3B%3CBR%20%2F%3E%20%23endif%3C%2FP%3E%3CP%3Estatus%20%3D%20USB_HostInit(CONTROLLER_ID%2C%20%26amp%3Bg_HostHandle%2C%20USB_HostEvent)%3B%3CBR%20%2F%3E%20if%20(status%20!%3D%20kStatus_USB_Success)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3EPRINTF(%22USB_HostInit%20%E3%81%8C%E5%A4%B1%E6%95%97%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%20(status%3D%25d)%5Cr%5Cn%22%2C%20status)%3B%3CBR%20%2F%3E%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%82%92%E8%BF%94%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3EPRINTF(%22USB_HostInit%20%E6%88%90%E5%8A%9F%5Cr%5Cn%22)%3B%3CBR%20%2F%3E%20USB_HostIsrEnable()%3B%3CBR%20%2F%3E%20PRINTF(%22USB%E3%83%9B%E3%82%B9%E3%83%88ISR%E3%81%8C%E6%9C%89%E5%8A%B9%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%97%E3%81%9F%5Cr%5Cn%22)%3B%3C%2FP%3E%3CP%3E%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%82%92%E8%BF%94%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3Evoid%20USB_HostTaskFn(void%20*param)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3E%23if%20((defined%20USB_HOST_CONFIG_IP3516HS)%20%26amp%3B%26amp%3B%20(USB_HOST_CONFIG_IP3516HS%20%26gt%3B%200U))%3CBR%20%2F%3E%20USB_HostIp3516HsTaskFunction(param)%3B%3CBR%20%2F%3E%20%23endif%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3Estatic%20void%20USB_HostTask(void%20*param)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3E%EF%BC%88%EF%BC%91%EF%BC%89%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3EUSB_HostTaskFn(param)%3B%3CBR%20%2F%3E%20vTaskDelay(pdMS_TO_TICKS(1))%3B%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3Estatic%20void%20USB_HostApplicationTask(void%20*param)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3E%EF%BC%88%EF%BC%91%EF%BC%89%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3EUSB_HostHidGenericTask(param)%3B%3CBR%20%2F%3E%20vTaskDelay(pdMS_TO_TICKS(1))%3B%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3Evoid%20BOARD_InitHardware(void)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3EBOARD_InitBootPins()%3B%3CBR%20%2F%3E%20BOARD_InitBootClocks()%3B%3CBR%20%2F%3E%20BOARD_InitPeripherals()%3B%3CBR%20%2F%3E%20POWER_DisablePD(kPDRUNCFG_PD_USB0_PHY)%3B%3CBR%20%2F%3E%20POWER_DisablePD(kPDRUNCFG_PD_USB1_PHY)%3B%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3Eextern%20%22C%22%20void%20USB1_IRQHandler(void)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3Eif%20(g_HostHandle%20!%3D%20NULL)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3EUSB_HostIp3516HsIsrFunction(g_HostHandle)%3B%3CBR%20%2F%3E%20%7D%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3CP%3Eint%20main(void)%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3ESEGGER_RTT_Init()%3B%3CBR%20%2F%3E%20BOARD_InitHardware()%3B%3C%2FP%3E%3CP%3EUSB_HostApplicationInit()%3B%3C%2FP%3E%3CP%3ExTaskCreate(USB_HostTask%2C%20%22USB_Host%22%2C%202048%2C%20g_HostHandle%2C%203%2C%20NULL)%3B%3CBR%20%2F%3E%20xTaskCreate(USB_HostApplicationTask%2C%20%22HID_Generic%22%2C%202048%2C%20g_HostHandle%2C%202%2C%20NULL)%3B%3C%2FP%3E%3CP%3EPRINTF(%22%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%A9%E3%82%92%E9%96%8B%E5%A7%8B%E3%81%97%E3%81%BE%E3%81%99...%5Cr%5Cn%22)%3B%3CBR%20%2F%3E%20vTaskStartScheduler()%3B%3C%2FP%3E%3CP%3E%EF%BC%88%EF%BC%91%EF%BC%89%3CBR%20%2F%3E%E3%83%A4%E3%83%BC%E3%82%B8%E3%83%A5%3CBR%20%2F%3E%7D%3CBR%20%2F%3E%20%7D%3C%2FP%3E%3C%2FLINGO-BODY%3E