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

 
 
> CDC класс на AT91SAM7X512, Нужна помощь в реализации CDC класса на AT91SAM7X512
shrek
сообщение Nov 9 2011, 10:01
Сообщение #1


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

Группа: Участник
Сообщений: 125
Регистрация: 1-12-08
Из: г. Орел
Пользователь №: 42 126



Добрый день. Суть проблемы вот в чем...
Есть КИТ AT91SAM7A3 на нем CDC класс работает без сучка и задоринки!
Переношу тот же код без изменения на AT91SAM7X512 (поменьял только параметры для ПЛЛ цепочки, ну и библиотеку для AT91SAM7X512)!
Дескрипторы устройства конфигурации конечных точек принимаются и обрабатываются, то есть устройство определяется компом и ставится драйвер с последующими спецефическими запросами для класса CDC.
Пытаюсь открыть порт любой прогой! Смотрю что ничего не приходит (в AT91SAM7A3 дескрипторы пачками шли в основном GET_LINE_CODING, SET_LINE_CODING и SET_CONTROL_LINE_STATE, причем у каждой проги для ком порта порядок и кол-во дескрипторов разные wacko.gif ).
Так вот не пойму в чем проблема...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
shrek
сообщение Nov 16 2011, 15:57
Сообщение #2


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

Группа: Участник
Сообщений: 125
Регистрация: 1-12-08
Из: г. Орел
Пользователь №: 42 126



Победил прием пакетов большого обьема. В процессе вылез один косяк...
Когда девайс пытается отправить из функции main, то есть под userом когда все прерывания разрешены (вложенных перываний нет я их не реализовывал), пакет размером больше 64 байт (больше конечной точки), то примерно после размера пакета 70 - 80 байт передача в хост отваливается... Долго думал и искал почему... Оказалось что контроллер не успевал работать с DUAL буфером BULK конечной точки. Когда контроллер начинал писать во второй буфер, еще не успев записать туда возникало прерывание TXCOMP по которому контроллер должен был записать данные размером с конечную точку в добавок к тому колву недозаписанных байт и передача в хост отваливалась. Решилось все запрещением прерываний на этапе первой записи данных в конечную точку.
Еще кое что... Для "универсальности", так как число байт которое может прийти в девайс величина случайная, организовал работу USART и PDC_USART по прерываниям ENDRX и TIMEOUT. По первому инициализировался NEXT буфер и NEXT счетчик (после того как регистр счетчик основного буфера заканчивается возникает прерывание ENDRX, а из регистров PDC_RNCR и PDC_RNPR (если не ошибаюсь) значения автоматом копируются в PDC_RCR и PDC_RPR. А когда возникало прерывание TIMEOUT необходимо было дослать оставшиеся байты в Host. Возникала ситуация при которой контроллер еще не успевал отослать 1023 байта в Host как возникало прерывание TIMEOUT и в довесок пыталось запустить новую передачу. Так как первый косяк обнаружился вместе со вторым не мог разрулить когда досылать оставшиеся байты)))
Днем пробовал на скорости 6 Мбит/с пересылать 16кбайт в Host за раз. Девайс без проблем переваривал)))
Теперь самая сложная проблема!!! Как мигать диодиком при приеме-передаче данных?))))
В атмеловских примерах нашел только макросы для включения, выключения и переключения диода, где, как и когда эти операции делаются не обнаружил)))
Go to the top of the page
 
+Quote Post



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

 


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


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