Как инитится ЮСБ:
CODE
USB_DEV_INFO DeviceInfo;
HID_DEVICE_INFO HidDevInfo;
ROM ** rom = (ROM **)0x1fff1ff8;
void GetInReport (uint8_t src[], uint32_t length)
{
if (DeviceState == DEVICE_ON_WORK)
{
memcpy(src, (U8*)&DeviceData, sizeof (DEVICE_DATA));
} else
{
src[0] = 0;
};
}
void SetOutReport (uint8_t dst[], uint32_t length)
{
memcpy(OutReport, dst, USB_OUT_COUNT);
ReportOutFlag = 1;
}
void USB_IRQHandler(void)
{
(*rom)->pUSBD->isr();
}
void USB_HW_Init ( void )
{
LPC_SYSCON->SYSAHBCLKCTRL |= ( EN_IOCON | EN_TIMER32_1 | EN_USBREG );
#ifndef SIMULATION
(*rom)->pUSBD->init_clk_pins(); // Use pll and pin init function in rom
#endif
HidDevInfo.idVendor = USB_VENDOR_ID;
HidDevInfo.idProduct = USB_PROD_ID;
HidDevInfo.bcdDevice = USB_DEVICE;
HidDevInfo.StrDescPtr = (uint32_t)&USB_StringDescriptor[0];
HidDevInfo.InReportCount = USB_IN_COUNT;
HidDevInfo.OutReportCount = USB_OUT_COUNT;
HidDevInfo.SampleInterval = 10; //ms
HidDevInfo.InReport = GetInReport;
HidDevInfo.OutReport = SetOutReport;
DeviceInfo.DevType = USB_DEVICE_CLASS_HUMAN_INTERFACE;
DeviceInfo.DevDetailPtr = (uint32_t)&HidDevInfo;
#ifndef SIMULATION
(*rom)->pUSBD->init(&DeviceInfo); // USB Initialization
(*rom)->pUSBD->connect(TRUE); // USB Connect
#endif
SystemCoreClockUpdate();
};
#ifndef SIMULATION - чтобы при симуляции кейл не залипал на этих строчках, и можно было остальное "симулировать"
HID_DEVICE_INFO HidDevInfo;
ROM ** rom = (ROM **)0x1fff1ff8;
void GetInReport (uint8_t src[], uint32_t length)
{
if (DeviceState == DEVICE_ON_WORK)
{
memcpy(src, (U8*)&DeviceData, sizeof (DEVICE_DATA));
} else
{
src[0] = 0;
};
}
void SetOutReport (uint8_t dst[], uint32_t length)
{
memcpy(OutReport, dst, USB_OUT_COUNT);
ReportOutFlag = 1;
}
void USB_IRQHandler(void)
{
(*rom)->pUSBD->isr();
}
void USB_HW_Init ( void )
{
LPC_SYSCON->SYSAHBCLKCTRL |= ( EN_IOCON | EN_TIMER32_1 | EN_USBREG );
#ifndef SIMULATION
(*rom)->pUSBD->init_clk_pins(); // Use pll and pin init function in rom
#endif
HidDevInfo.idVendor = USB_VENDOR_ID;
HidDevInfo.idProduct = USB_PROD_ID;
HidDevInfo.bcdDevice = USB_DEVICE;
HidDevInfo.StrDescPtr = (uint32_t)&USB_StringDescriptor[0];
HidDevInfo.InReportCount = USB_IN_COUNT;
HidDevInfo.OutReportCount = USB_OUT_COUNT;
HidDevInfo.SampleInterval = 10; //ms
HidDevInfo.InReport = GetInReport;
HidDevInfo.OutReport = SetOutReport;
DeviceInfo.DevType = USB_DEVICE_CLASS_HUMAN_INTERFACE;
DeviceInfo.DevDetailPtr = (uint32_t)&HidDevInfo;
#ifndef SIMULATION
(*rom)->pUSBD->init(&DeviceInfo); // USB Initialization
(*rom)->pUSBD->connect(TRUE); // USB Connect
#endif
SystemCoreClockUpdate();
};
#ifndef SIMULATION - чтобы при симуляции кейл не залипал на этих строчках, и можно было остальное "симулировать"