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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> DMA - для чего он и как его использовать
HARMHARM
сообщение Feb 16 2007, 12:39
Сообщение #31


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Цитата(Kitsok @ Feb 16 2007, 10:46) *
Другой вопрос меня интересует, может доку не внимательно читал.

Вот допустим, я так сделал железо, что один и тот-же ChipSelect у меня работает и на передачу и на прием (разнос по сигналами MOSI/MISO).
Запускаю я одновременно и передачу и прием.
SPI может дупелксно и передавать и принимать?

The SPI is a full duplex serial interface, designed to be able to handle multiple masters and slaves connected to a given bus.
Это иэ доки на LPC2194.
Одновременно сдвигаются и регистр приема, и регистр передачи.
Go to the top of the page
 
+Quote Post
Karl
сообщение Feb 16 2007, 12:53
Сообщение #32


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Цитата(Kitsok @ Feb 16 2007, 13:46) *
Вот допустим, я так сделал железо, что один и тот-же ChipSelect у меня работает и на передачу и на прием (разнос по сигналами MOSI/MISO).
Запускаю я одновременно и передачу и прием.
SPI может дупелксно и передавать и принимать?


SPI работает в дуплексном режиме. По каждому тактовому сигналу один битик передается и один принимается.
Go to the top of the page
 
+Quote Post
Slonic
сообщение Feb 16 2007, 14:35
Сообщение #33


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 3-10-05
Из: Москва-Троицк
Пользователь №: 9 174



Подскажите, пожалуйста, можно ли использовать DMA в случае, когда мне необходимо принимать поток данных с 8-разрядной параллельной шины (быстрый АЦП)? Или это все работает только для внутренних переферийных устройств процессора?
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Feb 20 2007, 01:03
Сообщение #34


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Цитата(Karl @ Feb 16 2007, 12:53) *
SPI работает в дуплексном режиме. По каждому тактовому сигналу один битик передается и один принимается.


А вот тут возникает интересный вопрос с ChipSelect - если в процессе передачи я меняю адрес устройства для приема, то что будет, старый PCS так и останется активным и новый PCS станет активным, или нет?
Go to the top of the page
 
+Quote Post
Karl
сообщение Feb 20 2007, 06:54
Сообщение #35


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Цитата(Kitsok @ Feb 20 2007, 03:03) *
Цитата(Karl @ Feb 16 2007, 12:53) *


SPI работает в дуплексном режиме. По каждому тактовому сигналу один битик передается и один принимается.


А вот тут возникает интересный вопрос с ChipSelect - если в процессе передачи я меняю адрес устройства для приема, то что будет, старый PCS так и останется активным и новый PCS станет активным, или нет?


Изменяемый выбор периферийного устройства позволяет вести буферизованную передачу данных с различными периферийными устройствами без перепрограммирования содержимого регистра управления режимом работы. Информация записывается в передающий регистр данных словом в 32-битной ширины, и содержит передаваемые данные и номер периферийного устройства, которому они предназначены. При использовании контроллера ПДП периферии (PDC) в этом режиме необходимы 32 - битные буферы, с хранением данных в LSB и полями PCS и LASTXFER в MSB. Интерфейс может управлять количеством бит данных, передаваемых по линиям MISO и MOSI за один сеанс передачи (8 или 16) с помощью регистров управления выбором корпуса. Если исходить из размера выделяемой под буфера памяти, это не самый оптимальный способ, но он предоставляет очень эффективные возможности для обмена данных с несколькими периферийными устройствами без занятия процессора.
Go to the top of the page
 
+Quote Post
Kitsok
сообщение Feb 20 2007, 12:23
Сообщение #36


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136



Всем привет!

Вчера вперся в непонятную проблему, решения (кроме совсем тупого) пока не нашел.

Итак, вывод данных у меня сделан с помощью 74HC595, ввод - 74НС165.
Висят на одном CS, точноо, к '165 CS вообще не подключен.
В настройках CPOL=0, NCPHA = 1.

Делаю пока без PDC, потому что не могу элементарно найти глюк.

Отсылаю байт, жду, принимаю байт.
Отсылка работает нормально, '595 принимает байт, на выводах все, что нужно. А вот при приеме затесывается лишняя единичка в начале (LSB). Т.е. у '165 все входы подтянуты к земле, однако принимаю я 0х01.

Меняю CPOL=1, начинает работать ввод, но теряется один бит на выводе.

Учитался даташитов, не могу понять, что не так.

Тупое решение проблемы - раздельный вывод и ввод, т.е. менять CSR между циклом вывода и ввода. Но это значет, что прощай дуплекс, сначала 40 мс ждем пока все данные улетят в вывод, потом столько-же, пока данные прилетят со ввода.
Что делать - не понятно...
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Feb 20 2007, 17:21
Сообщение #37


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

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



А обьясните мне глупому по PDC у SAM7. Предположим хочу использовать его для чтения DataFlash. Но ведь чтоб пришел байт, нужно и послать байт. Значит для чтения нужно "гнать" какие-нить левые данныеи и "туда"? И абсолютно безразлично какие? Т.е. я могу настроить блок PDC на передачу на тот же буфер, что и приемник, например?


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 20 2007, 18:01
Сообщение #38


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Dron_Gus @ Feb 20 2007, 16:21) *
Значит для чтения нужно "гнать" какие-нить левые данныеи и "туда"? И абсолютно безразлично какие? Т.е. я могу настроить блок PDC на передачу на тот же буфер, что и приемник, например?
Да.


Цитата(Kitsok @ Feb 20 2007, 11:23) *
Отсылка работает нормально, '595 принимает байт, на выводах все, что нужно. А вот при приеме затесывается лишняя единичка в начале (LSB). Т.е. у '165 все входы подтянуты к земле, однако принимаю я 0х01.
Увы, так и есть. 595 защелкивает по фронту тактового импульса, 165 выдает первый бит по этому же фронту, т.е. уже после чтения в SPI. Вот и получается сдвиг на бит. К сожалению, в SPI нет режима, в котором данные выставляются по фронту а читаются по срезу. Можно включить инвертор в цепь CLK одного из регистров, может и поможет - надо помедитировать над времянкой.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
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 Текстовая версия Сейчас: 29th June 2025 - 17:41
Рейтинг@Mail.ru


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