реклама на сайте
подробности

 
 
> LPC1343 и ROM USB HID, Все виснет при реконнекте...
EXeGLuMATOR
сообщение Mar 20 2012, 05:32
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305



Итак, имеется упомянутый камушек. Имеется прога, которая пользует встроенный 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]
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
EXeGLuMATOR
сообщение Mar 23 2012, 04:58
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 182
Регистрация: 30-01-05
Из: Volgograd
Пользователь №: 2 305



Так и не победил. Мало того, сама RTX работает в таком варианте крайне неустойчиво. Периодически виснет. Сам код полностью рабочий - безотказно работает уже довольно давно. Проблемы именно при использовании ROM USB.
Кто может сталкивался?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 21:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01415 секунд с 7
ELECTRONIX ©2004-2016