|
SAM9260 и SPI, хитрая передача данных |
|
|
|
Feb 20 2011, 17:12
|
Участник

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

|
Цитата(Zelepuk @ Feb 20 2011, 19:47)  Если один как master, а второй как slave будет, то что мне это даст? можно по-подробнее? Мастер генерирует CLK(ну CS не проблема) и принимает сразу данные с одного канала. Slave будет подключен на прием со второго канала. CLK для slave берется от мастера а выход просто в воздухе.
|
|
|
|
|
Feb 21 2011, 10:03
|

Гуру
     
Группа: Участник
Сообщений: 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)
|
|
|
|
|
Feb 22 2011, 10:16
|
Знающий
   
Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195

|
Цитата(DpInRock @ Feb 22 2011, 11:37)  Очень просто. Настраиваем порт на 16 битное слово. Ждем готовности (хоть поллингом, хоть по прерыванию) Ставим руками CS. Запускаем чтение - читается первые 16 бит. Сохраняем их где-нибудь. Запускаем чтение - ... вторые... .... Убираем CS.
При желании можно запрограммировать прямой доступ, чтобы эта операция выполнялась автоматически. (Я бы не стал без особой нужды). Спасибо! Очень познавательно. Вот меня интересует по-подробнее начиная с "Запускаем чтение".Интересна логика процесса отлавливания этих битов. Получается какой-то счётчик битов надо организовывать? Или, наверное, нужно просто каждые 16 клоков SPI-порта скидывать содержимое регистра приёма в переменную?
|
|
|
|
|
Feb 22 2011, 11:44
|
Знающий
   
Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195

|
В том то и дело, что АЦП шлёт данные в течении 128 клоков, сразу 8 слов по 16 бит. По временным диаграммам видно, что когда приходит CS (из "+" в "-") то АЦП шлёт 8 слов по 16 бит паралельно по одной линии в течении 128 клоков SCLK. Затем, CS идёт из "-" в "+". Вот и вся передача одного преобразования. Вот я и думаю как мне вытаскивать эти данные по 16 бит. Механизм какой-то нужен( Вот так выглядит операция чтения, только вместо 64 надо 128 клоков сделать, чтобы читать данные с одной ноги (вместо DoutA, DoutB)
Эскизы прикрепленных изображений
|
|
|
|
|
Feb 22 2011, 21:41
|

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

|
Это не тупизм. Это дебилизм. http://www.gaw.ru/html.cgi/txt/interface/spi/index.htmВы прочитайте свое сообщение. 1. Цитата Но, если настроено, что прерывания от SPI возникают после передачи данных 2. Цитата Когда же возникают эти прерывания? Сравните пункт 1 и 2. Сигнал CS (которым вы управляете) никакого отношения к SPI контроллеру вашего процессора не имеет. Цитата после того как убрали CS со слейва (т.е. через 128 клоков когда передали данные). Или каждые 16 клоков? А вот эта фраза говорит о том, что ваши представления об SPI, основанные на интуиции и догадках можно отправлять в мусорную корзину. Надо читать. Избежать чтения даташитов невозможно. --- В догонку. Все, что нужно для работы с этим АЦП описано на этих страницах (не только мной). Причем, досконально. Поверьте.
Сообщение отредактировал DpInRock - Feb 22 2011, 21:43
--------------------
On the road again (Canned Heat)
|
|
|
|
|
Feb 23 2011, 12:51
|
Знающий
   
Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195

|
Цитата(DpInRock @ Feb 22 2011, 11:37)  Настраиваем порт на 16 битное слово. как это осуществляется? В даташите нету. На стр.381 - это ясно, что как раз те биты по которым можно прерывание отслеживать
Сообщение отредактировал TigerSHARC - Feb 23 2011, 12:52
|
|
|
|
|
Feb 23 2011, 14:21
|

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

|
Чума. Страница 357. Начало описания. Цитата • Master or slave serial peripheral bus interface – 8- to 16-bit programmable data length per chip select – Programmable phase and polarity per chip select – Programmable transfer delays between consecutive transfers and between clock and data per chip select – Programmable delay between consecutive transfers Из этого следует, что длина программируется на каждый "chip select" отдельно. Длина 8..16 бит. Дальше ищите сущность "chip select". Там развернется основная борьба. Цитата На стр.381 - это ясно, что как раз те биты по которым можно прерывание отслеживать Вот только что именно ясно? Цитата The BITS field determines the number of data bits transferred. Более однозначной фразы сыскать трудно - "Поле определяет количество передаваемых бит". Какое еще в ... прерывание? Также обратите внимание на структуру регистра передачи SPI Цитата SPI Transmit Data Register Поле PCS. В нем указывается по какому именно "профилю" будет работать SPI. для конкретной передачи. Также обратите собственное внимание на то, что вы не будете использовать реальных пинов чипселекта SPI. (Хотя можете. Поле LASTXFER поможет убрать CS после передачи всех восьми слов, а не после передачи одного. Но для этого надо прочитать ВСЁ).
--------------------
On the road again (Canned Heat)
|
|
|
|
|
Feb 23 2011, 20:47
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(TigerSHARC @ Feb 23 2011, 23:29)  Если перевести - то это "указатель на экземпляр на AT91S_SPI" Можно на примере что это может быть? Это указатель на структуру AT91S_SPI, сама структура определена в хидере на процессор. Цитата(TigerSHARC @ Feb 23 2011, 23:29)  2)и что может означать такая конструкция как AT91C_BASE_AIC->AIC_SVR[source] = (unsigned int) handler; непонятна операция "->" и квадратные скобки после имени регистра AIC_SVR[source] AT91C_BASE_AIC - указатель на структуру AT91S_AIC. -> - оператор, позволяющий обратится к какому-либо члену структуры или union'а через указатель на структуру или union. AIC_SVR - массив, заключенный в структуре AT91S_AIC содержимое квадратных скобок - индекс в массива Цитата(TigerSHARC @ Feb 23 2011, 23:29)  Копаюсь в библиотеках атмеловских Вредного содержимого там многовато. Особенно для начинающих
|
|
|
|
|
Feb 24 2011, 11:50
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(TigerSHARC @ Feb 24 2011, 09:51)  рекомендуете писать с нуля всё? Да. Практической пользы в "библиотеках" ноль, а ляпов и несуразицы достаточно. Цитата(TigerSHARC @ Feb 24 2011, 09:51)  смотрю коды в IAR для AT91 - там всё через структуры и указатели. ... получается что нужно объявить кучу указателей сначала(pSdSpi, pSpiHw...) и потом через них обращаться к членам структур... может я чего то не понимаю и то что в исходниках в конечном итоге удобнее... Объявлять указатели не обязательно: Код AT91C_BASE_SPI0->SPI_CR = AT91C_SPI_SWRST; А можно и так: Код *AT91C_SPI0_CR = AT91C_SPI_SWRST;
|
|
|
|
|
Feb 24 2011, 12:22
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(TigerSHARC @ Feb 24 2011, 15:04)  Но что мы с ним делаем? здесь просто равно? что это значит? Записываем в регистр. Цитата(TigerSHARC @ Feb 24 2011, 15:04)  Просто сброс SPI? Именно. Вы бы взяли какую-нибудь книжку по "C". Тех же K&R, например.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|