Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SPI - ADC7888
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
dea-kga
Нужно считывать данные с ADC7888 (8 каналов) по SPI. Хочу использовать PDC. Сделал масивчик команд для АЦП переключения мультиплексора (первый байт номер канала второй что угодно). Проблема заключается в том, что для АЦП после обмена двумя байтами, нужно откидывать NPCS0 и делать задержку пока АЦП делает преобразования следующего канала, а потом все по новой.
Пробую с PDC так он махом пуляет все команды для 8 каналов и никакие NPCS0 не откидывает пока не перегонит все что у него есть.
Можно ли с PDC это сделать? Понимаю, что врукопашную можно
KAlex
Цитата(dea-kga @ Oct 3 2007, 10:40) *
Можно ли с PDC это сделать? Понимаю, что врукопашную можно

Так наверное нужно. Зачем использовать PDC для передачи 2 байт?
dea-kga
Я имею ввиду 8 каналов АЦП, 2 байта команда. Сделал массив[8] = команд поэтому и хочу использовать PDC. 1 прерывание лучше чем 8.
Вычитал что можно делать задержки между передачами. Пробовал работает а копыто NPCS0 не откидывает на время задержки.
aaarrr
Да, перемудрили товарищи из Атмела - поднять CS в таком режиме не получится.
Выходов два:
1. Сделать все руками.
2. Переключаться на другой CS между передачами. Решение кривое, конечно, но работает.
dea-kga
Похоже действительно придется все делать ручками smile3046.gif , а жать было бы красиво.
alexander55
Цитата(dea-kga @ Oct 3 2007, 10:40) *
Проблема заключается в том, что для АЦП после обмена двумя байтами, нужно откидывать NPCS0 и делать задержку пока АЦП делает преобразования следующего канала, а потом все по новой.

Я работал с AD7888, но делал, правда, на плисине, но смысл такой.
Инициализационный цикл.
1 цикл пустой по приему - выставляется MUX=0
2 цикл прием ADC0 - выставляется MUX=1
...
8 цикл прием ADC6 - выставляется MUX=7
9 цикл прием ADC7 - выставляется MUX=0
А затем без 1 цикла 2-9.
А если время терпит, то можно все делать по 2-9, а инициализационный цикл игнорировать.
dea-kga
В принципе так раньше и делал только на 51м.
Может кто то знает 8-канальное АЦП где преобразования начинаются не по копыту CS, а по команде.
_dem
А что мешает вставить "окна" в массиве с другим адресом CS ?

Код
The Variable Peripheral Selection allows buffer transfers with multiple peripherals without reprogramming
the Mode Register. Data written in SPI_TDR is 32 bits wide and defines the real data
to be transmitted and the peripheral it is destined to. Using the PDC in this mode requires 32-bit
wide buffers, with the data in the LSBs and the PCS and LASTXFER fields in the MSBs, however
the SPI still controls the number of bits (8 to16) to be transferred through MISO and MOSI
lines with the chip select configuration registers. This is not the optimal means in term of memory
size for the buffers, but it provides a very effective means to exchange data with several
peripherals without any intervention of the processor.


Пожертвовать памятью, но зато будет один запуск PDC

[ 2 байта для AD ] [ 2 байта окна для другого CS ] ... [ 2 байта окна для другого CS ] [ 2 байта AD ]

Буфер PDC должен быть 32битным
dea-kga
Попробую. Только как я понял придется делать массив [2байта АЦП | 2 байта CS][2 байта для другого ХХХ | 2 байта для другого CS][2 байта АЦП | 2 байта CS]...т.д. а потом выдергивать из приемного буфера через 1
_dem
да, примерно так.
по памяти получится в (2 + 4 * кол-во пустых циклов) раз неэффективнее
dea-kga
Спасибо за совет заработало 08.gif disco.gif 08.gif есть повод отметить геееть!!! beer.gif
_dem
smile.gifsmile.gifsmile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.