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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> SAM9260 и SPI, хитрая передача данных
Zelepuk
сообщение Feb 20 2011, 15:52
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Есть нужда связать АЦП и AT91SAM9260.

АЦП имеет 8 каналов причём 4 из них передаёт по одной ноге по SPI, а 4 других по другой ноге по SPI.
При этом для всего этого хозяйства используется один CLK и один CS.

Итого имеем 2 последовательных канала данных SPI + CLK и CS.

На ARM9 планирую использовать SPI0 и SPI1.

Как сделать программно работу по двум MISO, одному CLK и CS?

Можно ли прсото указать в инициализации одинаковые параметры для обоих SPI и при этом не использовать CLK и СS одного из каналов, завязав АЦП на CLK и CS только одного из SPI на ARM9?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 20 2011, 16:15
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Zelepuk @ Feb 20 2011, 18:52) *
Можно ли прсото указать в инициализации одинаковые параметры для обоих SPI и при этом не использовать CLK и СS одного из каналов, завязав АЦП на CLK и CS только одного из SPI на ARM9?

Нет, так нельзя.

Можно сконфигурировать один SPI как master, а второй как slave. Или добавить немного внешней логики, и обойтись одним на удвоенной частоте.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Feb 20 2011, 16:47
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Если один как master, а второй как slave будет, то что мне это даст? можно по-подробнее?
Go to the top of the page
 
+Quote Post
scorp2011
сообщение Feb 20 2011, 17:12
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 29-01-11
Пользователь №: 62 559



Цитата(Zelepuk @ Feb 20 2011, 19:47) *
Если один как master, а второй как slave будет, то что мне это даст? можно по-подробнее?

Мастер генерирует CLK(ну CS не проблема) и принимает сразу данные с одного канала. Slave будет подключен на прием со второго канала. CLK для slave берется от мастера а выход просто в воздухе.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Feb 20 2011, 18:07
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Вы бы указали что за АЦП.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Feb 21 2011, 05:15
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



АЦП AD7606. Только никак даташит не могу перевести нормально, вроде можно там по одной линии данные передовать, но какие для этого условия надо соблюсти - непонятно.
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Feb 21 2011, 07:12
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



Можно. Просто даете 128 клоков, а не 64.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Feb 21 2011, 08:29
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Простите за наглость, но правильно ли японял что для этого АЦП частота подаваемая на CONVSTA/B определяет частоту дискретизации?
или же просто положительный фронт задаёт старт преобразования и далее АЦП сам тактирует выборку?

До того как связался с этим Д/Ш думал что знаю английский((
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Feb 21 2011, 10:03
Сообщение #9


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Цитата
Conversion Start Input A, Conversion Start Input B. Logic inputs. These logic inputs are used to initiate conversions on the analog input channels.
For simultaneous sampling of all input channels, CONVST A and CONVST B can be shorted together, and a single convert start signal can be applied.
Alternatively, CONVST A can be used to initiate simultaneous sampling: V1, V2, V3, and V4 for the AD7606; V1, V2, and V3 for the AD7606-6; and V1 and V2 for the AD7606-4. CONVST B can be used to initiate simultaneous sampling on the other analog inputs: V5, V6, V7, and V8 for the AD7606; V4, V5, and V6 for the AD7606-6; and V3 and V4 for the AD7606-4. This is possible only when oversampling is not switched on. When the CONVST A or CONVST B pin transitions from low to high, the front-end track-and-hold circuitry for the respective analog inputs is set to hold.


Перводчик Гугла.
Цитата
Преобразование Start Input, конверсии Start Input В. Логические входы.

Эти логические входы используются для установки на преобразование аналоговых входных каналов.
Для одновременного отбора проб всех входных каналов, CONVST и CONVST B могут касаться друг друга, и одного сигнала запуска преобразования могут быть применены.
Кроме того, CONVST могут быть использованы для одновременного начала выборки: V1, V2, V3 и V4 для AD7606, V1, V2, V3 для AD7606-6, V1 и V2 для AD7606-4. CONVST B могут быть использованы для одновременного начала выборки на других аналоговых входов: V5, V6, V7 и V8 для AD7606, V4, V5 и V6 для AD7606-6, V3 и V4 для AD7606-4. Это возможно только тогда, когда передискретизации не включен. Когда CONVST или CONVST переходов B контактный от низкого до высокого, передний конец трека и удерживать схемы для соответствующих аналоговых входов устанавливается провести.




--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Feb 21 2011, 10:08
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Значит по положительному фронту происходит тот самый HOLD в схеме track-and-hold. сталобыть на CONVSTA/B надо подавать сигнал с частотой 200 кГц, если я хочу осуществить выборку с такой частотой?

Сообщение отредактировал Zelepuk - Feb 21 2011, 10:57
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Feb 21 2011, 11:55
Сообщение #11


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



У вас там есть сигнал занятости, сигнал готовности. По ним надо ориентироваться. Ибо все равно по ним ориентироваться при считывании...


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение Feb 22 2011, 08:24
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Необходимо осуществить передачу данных по SPI.
Данные принимаются с АЦП в последовательном виде (16-битные слова)
Как я смог понять из Д/Ш на контроллер то нужно разрешить прерывания от SPI по завершению приёма.
Так, когда передача завершилась, то входим в прерывание,в котором копируем значение из приёмного регистра SPI в переменную в программе.

Начало и конец приёма осуществляется как я понял через сигнал CS.
За одну операцию (по CS) АЦП передаёт в порт SPI восемь 16-битных слов.

Тогда выходит, что после окончания передачи(по CS) мы получим в приёмном регистре только последнее (из 8-ми слов) 16-битное слово.

Как осуществляется выборка по одному слову из регистра? Опишите пожалуйста механизм.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Feb 22 2011, 08:37
Сообщение #13


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Очень просто.
Настраиваем порт на 16 битное слово.
Ждем готовности (хоть поллингом, хоть по прерыванию)
Ставим руками CS.
Запускаем чтение - читается первые 16 бит. Сохраняем их где-нибудь.
Запускаем чтение - ... вторые...
....
Убираем CS.

При желании можно запрограммировать прямой доступ, чтобы эта операция выполнялась автоматически. (Я бы не стал без особой нужды).


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
TigerSHARC
сообщение Feb 22 2011, 10:16
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Цитата(DpInRock @ Feb 22 2011, 11:37) *
Очень просто.
Настраиваем порт на 16 битное слово.
Ждем готовности (хоть поллингом, хоть по прерыванию)
Ставим руками CS.
Запускаем чтение - читается первые 16 бит. Сохраняем их где-нибудь.
Запускаем чтение - ... вторые...
....
Убираем CS.

При желании можно запрограммировать прямой доступ, чтобы эта операция выполнялась автоматически. (Я бы не стал без особой нужды).


Спасибо! Очень познавательно.
Вот меня интересует по-подробнее начиная с "Запускаем чтение".Интересна логика процесса отлавливания этих битов.
Получается какой-то счётчик битов надо организовывать?
Или, наверное, нужно просто каждые 16 клоков SPI-порта скидывать содержимое регистра приёма в переменную?
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Feb 22 2011, 10:53
Сообщение #15


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Вы бы почитали бы про SPI как таковой.
У SPI программируется длина слова.
В вашем случае 16 бит (Ибо разрядность канала 16 бит).
SPI - система ты мне - я тебе. Чтобы что-то получить надо что-то дать. Даже если нечего дать и некуда дать - все равно надо дать.

Запуск чтения - это ЗАПИСЬ в регистр данных SPI любых данных. Например, 0.
SPI отправляет эти данные в наружу.
ОДНОВРЕМЕННО принимает данные снаружи.
По истечении 16 тактов - завершает работу. И говорит - готово, брателло. Типо, читай из регистра данных.
Ты - читаешь.

В это время, пока ты размышляешь что с этим 16 битным словом сделать - АЦП - ничего не делает. Пока нет клоков ( а их нет) - он замер.

Теперь следующее чтение.
Опять пишем что-либо в регистр данных SPI....


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 00:56
Рейтинг@Mail.ru


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