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

 
 
> AT91sam7x256 + USB + CDC, банки USB
owl
сообщение Mar 18 2009, 09:35
Сообщение #1


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

Группа: Свой
Сообщений: 90
Регистрация: 7-08-06
Из: Смоленск
Пользователь №: 19 370



Разбираюсь с USB от Atmel. Столкнулся со следующей проблемой.
Проц ведет обмен с ПК, иногда пропадают OUT пакеты при Bulk конфигурации.
Вскрытие показывает, что проблемы начинаются (сейчас так кажется), когда происходит одновременное заполенение двух банков USB.
В DataSheets сказано что следует завести переменную на выбор очередного банка. - Это понятно но, тогда такой дурацкий вопрос, а как узнать размер
данных в банках приема? - Регистр то один. Или я что-то не понимаю.
Использую в качестве базы at91lib_softpack_1.5.

Может кому поможет.
Были проблемы с зависанием передачи в функции USBD_Write(), помогла замена макроса SET_CSR(bEndpoint, AT91C_UDP_TXPKTRDY), на:

volatile unsigned int reg, i_mask;
i_mask = AT91C_BASE_UDP->UDP_IMR;
i_mask &= 1<<bEndpoint;
AT91C_BASE_UDP->UDP_IDR = i_mask;
reg = AT91C_BASE_UDP->UDP_CSR[bEndpoint] ;
reg |= REG_NO_EFFECT_1_ALL;
reg |= (AT91C_UDP_TXPKTRDY);
AT91C_BASE_UDP->UDP_CSR[bEndpoint] = reg;
while ( (AT91C_BASE_UDP->UDP_CSR[bEndpoint] & (AT91C_UDP_TXPKTRDY)) != (AT91C_UDP_TXPKTRDY)){
if (AT91C_BASE_UDP->UDP_CSR[bEndpoint] & AT91C_UDP_TXCOMP) break;
}
AT91C_BASE_UDP->UDP_IER = i_mask;

Происходило прерывание и передача оказывалась завершенной до момента проверки условия флага. - проц вешался.
Может быть есть более красивое решение?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


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


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