Итак, имеется упомянутый камушек. Имеется прога, которая пользует встроенный ROM HID USB Driver. Имеется программка - на основе кейловской RTX Kernel. Все работает, нареканий нет. Данные бегают, принимаются, отправляются и т.п. Но. При отключении ЮСБ кабеля все останавливается. Т.е. софтинка внутри ни на какие внешние раздражители не реагирует. При подключении ЮСБ кабеля - девайс видится, данные идут, но старые - то что видимо осталось в буферах. Сама софтинка (в камне) так-же на раздражители не реагирует. Кто может сталкивался? И почему именно при отключении кабеля? Если плата работает и к ней подключить шнурок - то все нормально - работает. При отключении кабеля - стабильное подвисание.
Как инитится ЮСБ:
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 - чтобы при симуляции кейл не залипал на этих строчках, и можно было остальное "симулировать"
Сообщение отредактировал IgorKossak - Mar 20 2012, 14:37
Причина редактирования: [codebox]