|
AT91 USB CDC-устройство, Готовый проект |
|
|
|
Jan 30 2011, 12:38
|
Профессионал
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007
|
Цитата(aaarrr @ Jan 30 2011, 15:12) Что делать, если данные пришли, а места для них пока нет? Или наоборот - ушли, а новых еще нет.
Очень не хватает DMA атмеловскому UDP, так была бы полная автоматика. 1. Отслеживать эти события и принимать соотвествующие меры. Можно все это и без всякой OS сделать. 2. Если вы имеет Atmel ARM с кешами, то наличие DMA не сильно чего улучшит. Вам придется либо DMA буфера организовать в некешируемой области с последующим копированием по месту, либо обеспечить когерентность кеша за счет flush/invalidate. Учитывая, к тому же, специфические требования к выравниванием адресов для DMA обменов, все ооочень становится нетривиальным.
|
|
|
|
|
Jan 30 2011, 13:11
|
Гуру
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448
|
Цитата(sergeeff @ Jan 30 2011, 15:38) 1. Отслеживать эти события и принимать соотвествующие меры. Можно все это и без всякой OS сделать. Принимать соответствующие меры - это значит своими руками делать ту работу, которая должна быть по-хорошему возложена на DMA. Цитата(sergeeff @ Jan 30 2011, 15:38) 2. Если вы имеет Atmel ARM с кешами, то наличие DMA не сильно чего улучшит. Вам придется либо DMA буфера организовать в некешируемой области с последующим копированием по месту, либо обеспечить когерентность кеша за счет flush/invalidate. Учитывая, к тому же, специфические требования к выравниванием адресов для DMA обменов, все ооочень становится нетривиальным. Во-первых, мы не имеем ARM с кэшами, поэтому страшилки про когерентность тут не к месту. А у того же PDC, например, нет каких-либо особо специфических требований к выравниванию. С нормальным DMA как раз все стало бы очень просто и удобно: есть буферы для приема/передачи - DMA читает дескрипторы и гоняет данные; нет - хост получает NAK'и.
|
|
|
|
|
Jan 30 2011, 15:31
|
Профессионал
Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007
|
Цитата(aaarrr @ Jan 30 2011, 16:11) Принимать соответствующие меры - это значит своими руками делать ту работу, которая должна быть по-хорошему возложена на DMA. Мечтать не вредно. На практике ничего этого не наблюдается. Цитата Во-первых, мы не имеем ARM с кэшами, поэтому страшилки про когерентность тут не к месту. А мы имеем. Цитата А у того же PDC, например, нет каких-либо особо специфических требований к выравниванию. Топик про at91. В этом семействе полно процессоров с кешами. Я не оракул, чтобы знать про какие конкретно процессоры идет речь. PDC имеет дело всегда со 32-х битными словами - уже ограничение. Если вы посмотрите на многочисленные примеры и errata, то там то сям надо выравниваниее DMA-буферов то на 256, то на 1024. Полная каша. Цитата С нормальным DMA как раз все стало бы очень просто и удобно: есть буферы для приема/передачи - DMA читает дескрипторы и гоняет данные; нет - хост получает NAK'и. И что тут нормального. Ну "встал" входной поток данных, а кто "будить" то все это будет? А если вы пользуете USART с DMA? Какие там NACK'и? Нет, увы, единого подхода к решению этой проблемки.
|
|
|
|
|
Jan 31 2011, 17:31
|
Гуру
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448
|
Цитата(sergeeff @ Jan 30 2011, 18:31) Мечтать не вредно. На практике ничего этого не наблюдается. У Атмела - да, не имелось. На SAM3 только прикрутили персональный DMA для USB. Цитата(sergeeff @ Jan 30 2011, 18:31) Топик про at91. В этом семействе полно процессоров с кешами. А без оных еще больше. Цитата(sergeeff @ Jan 30 2011, 18:31) PDC имеет дело всегда со 32-х битными словами - уже ограничение. Да ну? Вас кто-то обманул. Цитата(sergeeff @ Jan 30 2011, 18:31) И что тут нормального. Ну "встал" входной поток данных, а кто "будить" то все это будет? Казалось бы ответ должен быть очевиден. Будить будет IN или OUT токен от хоста. По нему DMA-автомат проверит готовность буфера и осуществит транзакцию, если это возможно. Цитата(sergeeff @ Jan 30 2011, 18:31) А если вы пользуете USART с DMA? Какие там NACK'и? Нет, увы, единого подхода к решению этой проблемки. Вот только не надо валить все в одну кучу. Изначально мы говорили о DMA применительно к USB. И вдруг откуда-то вылезли "страшные" кэши, 1024-байтные выравнивания, 32-х битный PDC и прочее не буду говорить что.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|