Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SAM7S, CS на SPI
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Sagittarius
Здравствуйте.
Передаю-принимаю данные с АЦП (AD7924) по SPI. Если программно посылать то все хорошо. Если включить PDC то плохо. Проблема в том, что при использовании PDC выдается один общий CS на весь блок данных, а АЦП ждет отдельного CS-а на каждое слово. Собственно вопрос возможно ли такое на SAM7S и как? Или может в самом АЦП что подправить можно?
Спасибо.
KRS
Вообще настройки SPI позволяют дрегать CS в любом месте или после каждого слова, в даташите надо смотреть. ( там еще бит есть LAST_XFER). т.е. при совместном с DMA использовании надо включить режим с несколькими CS. Но можно вроде и после каждого слова что бы сам дергался ( это я уже не помню).

НО ГЛАВНОЕ!!! прочитайте ERRATA она у разных серий, разная и вроде в SAM7S как раз эта фича криво работает. что очень обидно.
В общем полноценно SPI в SAM7 не работает и глюки исправлять атмел не собирается, а просто их описывает.
singlskv
Цитата(Sagittarius @ Apr 30 2009, 23:27) *
Передаю-принимаю данные с АЦП (AD7924) по SPI. Если программно посылать то все хорошо. Если включить PDC то плохо. Проблема в том, что при использовании PDC выдается один общий CS на весь блок данных, а АЦП ждет отдельного CS-а на каждое слово. Собственно вопрос возможно ли такое на SAM7S и как? Или может в самом АЦП что подправить можно?
Спасибо.
а с какой частотой и через сколько каналов хотите оцифровывать ?
prottoss
Цитата(KRS @ May 1 2009, 03:57) *
НО ГЛАВНОЕ!!! прочитайте ERRATA она у разных серий, разная и вроде в SAM7S как раз эта фича криво работает. что очень обидно.
Это Вы зря говорите. SPI вполне полноценный, и нормально работает с использованием PDC. Криво сделано только аппаратное дергание выводами выборки NPCS. НО ни кто не мешает делать выборку слэйвов программно.

Цитата(Sagittarius @ May 1 2009, 03:27) *
Посмотрите вот здесь
http://electronix.ru/forum/index.php?act=S...=43&t=43130
singlskv
Цитата(prottoss @ May 1 2009, 06:19) *
Это Вы зря говорите. SPI вполне полноценный, и нормально работает с использованием PDC. Криво сделано только аппаратное дергание выводами выборки NPCS. НО ни кто не мешает делать выборку слэйвов программно.
вот у меня пока... все очень даже прямо работает(SAM7A3)
у меня часть транзакций по PDC (FRAM FM25xx) и часть c MBI5028(по ожиданию окончания передачи) и еще
74hc595(и по PDC и програмным опросом)
Часть транзакций с софтовым CS(MBI, 595), часть с аппаратным FM25xx.

Что я делаю не так ? И почему всегда работает ?
KRS
Цитата(singlskv @ May 1 2009, 22:54) *
Что я делаю не так ? И почему всегда работает ?

Да у меня тоже все работает, но на errata и для SAM7S и SAM7X я наткнулся и приходилось обходить софтом.
Самое обидное что атмел не выпускает новые ревизии чипов и не исправляет ошибки.
И в SAM7S и SAM7X баги разные.

LSATXFER например криво работает.
А если надо использовать PDC то смешать несколько устройств с разными форматами посылки и что бы аппаратно дергались CS в нужном месте невозможно ни на одном семействе у атмела!
singlskv
Цитата(KRS @ May 1 2009, 23:02) *
Да у меня тоже все работает, но на errata и для SAM7S и SAM7X я наткнулся и приходилось обходить софтом.
Самое обидное что атмел не выпускает новые ревизии чипов и не исправляет ошибки.
И в SAM7S и SAM7X баги разные.

LSATXFER например криво работает.
А если надо использовать PDC то смешать несколько устройств с разными форматами посылки и что бы аппаратно дергались CS в нужном месте невозможно ни на одном семействе у атмела!
Значит мне просто пока повезло... у меня большинство девайсов на SAM7A3, а там глюков пока не обнаружил biggrin.gif
Sagittarius
Цитата(singlskv @ May 1 2009, 00:09) *
а с какой частотой и через сколько каналов хотите оцифровывать ?

канал 1, просто такой АЦП был уже, под него и плату сделал. А мысль была по таймеру 1-5кГц запускать SPI через PDC на 8-16 выборок ~500ksps и потом обрабатывать результат. Но сам AD7924 тактируется от того же SPI и хочет получать отдельный CS на каждое слово. Так что пока 2 пути - либо в основном цикле программно все делать, тогда аппаратный CS нормально отрабатывает, либо через PDC посылать в 2 раза больше посылок, но каждую нечетную отправлять на другой, не используемый канал, тогда тоже будет для АЦП на каждое слово свой CS.
Dron_Gus
Не обязательно неиспользуемый. Можно их обьеденить и тогда не надо удваивать количество посылок.
Sagittarius
Цитата(Dron_Gus @ May 4 2009, 12:48) *
Не обязательно неиспользуемый. Можно их обьеденить и тогда не надо удваивать количество посылок.


неиспользуемый канал - имелось в виду PCS самого SPI-я. Если одно слово слать на адрес 0 а следующее (и не слово а байт для быстроты) на канал 1 то получается то что надо - на каждое слово для CS0 приходит свой импульс CS. Адрес 1 SPI просто сконфигурен но выход PIO к SPI не подключен.
Dron_Gus
Ну а если надо быстро гнать данные и нет возможности делать "ложные посылки", можно обьеденить два выхода CS с помошью двух диодов и резистора и получить нормальный строб между посылками на формально разные, но реально один и тот же CS.
singlskv
Цитата(Dron_Gus @ May 4 2009, 22:13) *
Ну а если надо быстро гнать данные и нет возможности делать "ложные посылки", можно обьеденить два выхода CS с помошью двух диодов и резистора и получить нормальный строб между посылками на формально разные, но реально один и тот же CS.

ИМХО, это тот случай когда можно поробовать режим Variable Chip Select(если он конечно не в erratа на данный чип)
Просто заполняем 2 SPI_CSRx так чтоб нужный CS всегда выбирался.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.