USB

32-разрядные микроконтроллеры разработки АО "НИИЭТ"

Модераторы: ea, dav, bkolbov, Alis, pip, _sva_

blessedt
Сообщения: 34
Зарегистрирован: 25 фев 2019, 00:09
Предприятие: АОКБ Импульс

Re: USB

Сообщение blessedt »

Доброго времени суток!

Продолжаю вопрос товарища urban'а. Плата от Мехатроники, причем та же самая. И та же проблема.
Система Win10, J-Link.
Залил проект usb_cdc_vcp через Keil5 с поправкой на BSP (хотя разница там только в кварце на 24 МГц, кнопках и светодиодах).
Драйвер niietvcp_x32x64.inf установлен. Однако в диспетчере устройств ошибка 43 (сбой запроса дескриптора) и драйвер указан микрософтовский
Изображение

Результаты работы TDD
Изображение
Вложения
122.png
122.png (89.72 КБ) 2613 просмотров
123.png
123.png (35.86 КБ) 2613 просмотров
dav
Сообщения: 209
Зарегистрирован: 14 дек 2015, 09:21
Предприятие: АО НИИЭТ
Откуда: АО НИИЭТ, Воронеж

Re: USB

Сообщение dav »

Доброго времени суток!
Ранее данный проект проверяли в WinXP и Win7 - все работало корректно.
Для проверки в Win10 и воспроизведения ситуации потребуется дополнительно время, т.к. необходимо установить Win10 и подготовить окружение. По результатам напишу позже.
blessedt
Сообщения: 34
Зарегистрирован: 25 фев 2019, 00:09
Предприятие: АОКБ Импульс

Re: USB

Сообщение blessedt »

Благодарю =)
Категорически рад, что поддержка на форуме присутствует!
Сергей
Сообщения: 20
Зарегистрирован: 25 янв 2018, 15:10
Предприятие: АО "Корпорация "ВНИИЭМ"

Re: USB

Сообщение Сергей »

Доброго времени суток!
Почему то не возникает прерывание завершения передачи данных по DMA "DMACMPLINT" регистра "USB_IRQ_ENB".
Разрешение прерывания

//настраиваем прерывания на usb device
NT_USB_DEVICE.USB_IRQ_ENB.all = (SET << USB_IRQ_ENB_SOFINTEN_Pos) | \
(SET << USB_IRQ_ENB_RESSTATUSINTEN_Pos) | \
(SET << USB_IRQ_ENB_RESUMEINTEN_Pos) | \
(SET << USB_IRQ_ENB_DMACMPLINTEN_Pos) | \
(SET << USB_IRQ_ENB_SUSPENDINTEN_Pos);
Остальные прерывания разрешенные в этом регистре возникают.
Передача по DMA инициируется так
NT_USB_DEVICE.AHB_DMA_ADDR = (uint32_t)((uint8_t*)(USBDevice.xfer_buff + USBDevice.xfer_count));
NT_USB_DEVICE.DMA_CNT.all = data_size;
NT_USB_DEVICE.DMA_CTRL_STS.all = USBDMA_OP_WRITE_TO_EP | USBDMA_OP_START;
приходится ждать окончания работы DMA так
while(NT_USB_DEVICE.DMA_CTRL_STS.bit.DMAEN){};
иначе через какое-то время перестает работать прием и передача.
Ответить

Вернуться в «32-разрядные микроконтроллеры»