|
Работа с USBExpress от Silabs, детали использования USB-MCU серии C8051F32х |
|
|
|
 |
Ответов
|
Feb 9 2007, 20:11
|
Частый гость
 
Группа: Свой
Сообщений: 153
Регистрация: 15-05-06
Из: Николаев
Пользователь №: 17 119

|
Интересно, что прерывание в контроллере по факту завершения передачи наступает, когда из очереди вычитываются данные на хосте. А вот в буфер хоста данные ложаться не зависимо наступило прерывание или нет. Т.е. данные можно спать, они не будут вычитываться софтом некоторое время, накапливаясь в буфере (спасибо драйверу) без прерывания (даже если его запретить совсем). Но тогда нужно подгадывать, чтоб передача закончилась наверняка (иначе пакеты пропадают, хотя вроде не рвутся). Кста, совсем недавно вышла новая версия драйвера USBXpress version 3.0.5в которой исправлен глюк у функции CheckRXQueue (теперь количество байт в очереди указывается корректно) еще на всяк случай подкину ссылку на Custom Driver Wizardи доку к нему: an220.pdf
|
|
|
|
|
Feb 10 2007, 01:28
|
Участник

Группа: Новичок
Сообщений: 57
Регистрация: 31-07-06
Пользователь №: 19 217

|
Цитата(alvol @ Feb 9 2007, 20:11)  Интересно, что прерывание в контроллере по факту завершения передачи наступает, когда из очереди вычитываются данные на хосте. А вот в буфер хоста данные ложаться не зависимо наступило прерывание или нет. Т.е. данные можно спать, они не будут вычитываться софтом некоторое время, накапливаясь в буфере (спасибо драйверу) без прерывания (даже если его запретить совсем). Но тогда нужно подгадывать, чтоб передача закончилась наверняка (иначе пакеты пропадают, хотя вроде не рвутся). Кста, совсем недавно вышла новая версия драйвера USBXpress version 3.0.5в которой исправлен глюк у функции CheckRXQueue (теперь количество байт в очереди указывается корректно) еще на всяк случай подкину ссылку на Custom Driver Wizardи доку к нему: an220.pdfВ описании AN169 говорится, что прерывание возникает после отправки всех данных. Количество переданных данных возвращает функция Block_Write. Контроль за ошибками при передаче обязан осуществлять драйвер устройства и хоста. Если это не происходит и данные которые отмечены как переданные теряются, то это очень прискорбно.  У меня проблем с пропажей пакетов не возникало.
|
|
|
|
|
Feb 12 2007, 00:26
|
Частый гость
 
Группа: Свой
Сообщений: 153
Регистрация: 15-05-06
Из: Николаев
Пользователь №: 17 119

|
Почитал тут англоязычный форум, судя по этой темевыходит, что использование функции Block_Write() приводит к монопольному ее использованию ресурсов процессора и ничего другого не может происходить, пока происходит передача данных. Это такой компромис легкости использования USBXpress с независимой работой процессора. Обидно... Чем выше скорость передачи--тем меньше времени остается процессору на выполнение других задач.
|
|
|
|
|
Feb 16 2007, 02:46
|
Участник

Группа: Новичок
Сообщений: 57
Регистрация: 31-07-06
Пользователь №: 19 217

|
Цитата(alvol @ Feb 12 2007, 00:26)  Почитал тут англоязычный форум, судя по этой темевыходит, что использование функции Block_Write() приводит к монопольному ее использованию ресурсов процессора и ничего другого не может происходить, пока происходит передача данных. Это такой компромис легкости использования USBXpress с независимой работой процессора. Обидно... Чем выше скорость передачи--тем меньше времени остается процессору на выполнение других задач. (см. англ. форум) А зачем тебе использовать Block_Write внутри прерывания? Поставь в прерывание флаг и проверяй его в основной программе. При совпадении флага из основной программы вызывается Block_Write. Основные вычисления выполняй в прерываниях. МК при этом не простаивает. Если использовать Block_Write внутри прерывания, то текст основной программы также блокируется. И при этом вычисления могут выполняться только в прерываниях с большим приоритетом. Может сработает
Сообщение отредактировал Dmitriy_V - Feb 16 2007, 02:50
|
|
|
|
|
Feb 16 2007, 18:35
|
Частый гость
 
Группа: Свой
Сообщений: 153
Регистрация: 15-05-06
Из: Николаев
Пользователь №: 17 119

|
Dmitriy_V  Вы задали в той теме мой вопрос немного раньше  Дальше задал вопрос просто для разъяснения ситуации. В прерываниях я делаю вычисления и получаю все данные. Отправку данных делаю в главном цикле. Отправляю все, что успело накопиться к моменту отправки. Вот только у меня возникла проблема следующего плана. Со стороны хоста, мне кажется, у меня не совсем корректно работает программа вычитывания данных. Посмотрел по осциллографу, как выполняется у меня передача данных. Пока я не начинаю их вычитывать софтом на компьютере--все передается гладко и без проблем. Но как только начинает работать моя процедура вычитывания (по таймеру), сразу видно что Block_Write неестественно затягивается! При этом пропадает несколько десятков пакетов. Сами пакеты--не портятся. Если уже ушел на отправку, то стабильно доходит. Как я понимаю все, что приходит с контроллера драйвер ложит в очередь, а потом это же должно просто вычитываться из буфера софтом и никак не влиять на работу процессора... Может попробуем поменяться программами для вычитывания?  Нужно узнать в чем проблема.
|
|
|
|
|
Feb 16 2007, 20:52
|
Участник

Группа: Новичок
Сообщений: 57
Регистрация: 31-07-06
Пользователь №: 19 217

|
Цитата(alvol @ Feb 16 2007, 18:35)  Dmitriy_V  Вы задали в той теме мой вопрос немного раньше  Дальше задал вопрос просто для разъяснения ситуации. В прерываниях я делаю вычисления и получаю все данные. Отправку данных делаю в главном цикле. Отправляю все, что успело накопиться к моменту отправки. Вот только у меня возникла проблема следующего плана. Со стороны хоста, мне кажется, у меня не совсем корректно работает программа вычитывания данных. Посмотрел по осциллографу, как выполняется у меня передача данных. Пока я не начинаю их вычитывать софтом на компьютере--все передается гладко и без проблем. Но как только начинает работать моя процедура вычитывания (по таймеру), сразу видно что Block_Write неестественно затягивается! При этом пропадает несколько десятков пакетов. Сами пакеты--не портятся. Если уже ушел на отправку, то стабильно доходит. Как я понимаю все, что приходит с контроллера драйвер ложит в очередь, а потом это же должно просто вычитываться из буфера софтом и никак не влиять на работу процессора... Может попробуем поменяться программами для вычитывания?  Нужно узнать в чем проблема. У меня скорость передачи всего 22 кбайт в секунду. Передача по 64 байта. В связи с этим, проблем такого рода у меня и быть не могло. Советую задать этот вопрос на форуме SiLabs. Можно попробовать на рускоязычном, правда там редко чего отвечают. Сайт дистрибьюторов SiLabsТам же есть переведенное руководство по C8051F320.
|
|
|
|
Сообщений в этой теме
alvol Работа с USBExpress от Silabs Jan 23 2007, 23:10 vladec 1. По моему, USBExpress никаких таймеров при своей... Jan 24 2007, 11:28 Dmitriy_V Цитата(vladec @ Jan 24 2007, 11:28) 1. По... Jan 24 2007, 21:25  alvol Цитата(Dmitriy_V @ Jan 24 2007, 20:25) 1 ... Jan 24 2007, 23:58  Warlord Цитата(Dmitriy_V @ Jan 24 2007, 21:25) 2 ... Jan 25 2007, 09:56   alvol Цитата(Warlord @ Jan 25 2007, 08:56) иниц... Jan 25 2007, 12:12    Warlord Цитата(alvol @ Jan 25 2007, 12:12) а если... Jan 25 2007, 12:46     alvol спасибо, попробуем на практике ) Jan 25 2007, 13:16   Dmitriy_V Цитата(Warlord @ Jan 25 2007, 09:56) Поче... Jan 30 2007, 11:33      alvol ага, спасибо
есть и на русском и на ихнем родном (... Feb 16 2007, 22:44       alvol Решил проблему передачи написав другой вариант про... Feb 20 2007, 16:17 Tarkin зравствуйте!
назрела проблема: возможно ли изм... Jan 20 2009, 19:05 _Sam_ Цитатавозможно ли изменение размера пакета в USBXp... Jun 13 2012, 13:43
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|