Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: LPC1343 и ROM USB HID
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
EXeGLuMATOR
Итак, имеется упомянутый камушек. Имеется прога, которая пользует встроенный 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 - чтобы при симуляции кейл не залипал на этих строчках, и можно было остальное "симулировать"
EXeGLuMATOR
Так и не победил. Мало того, сама RTX работает в таком варианте крайне неустойчиво. Периодически виснет. Сам код полностью рабочий - безотказно работает уже довольно давно. Проблемы именно при использовании ROM USB.
Кто может сталкивался?
EXeGLuMATOR
Просто так победить не удалось. sad.gif
Но при переподключении ноги VBUS на постоянной основе к +5в - все проблемы ушли. Вроде. Похоже проблема в какой-то хитрой работе этого аппаратного драйвера... Но теперь программировать через ЮАРТ неудобно. Как-то все странно устроено... cranky.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.