|
DMA - для чего он и как его использовать |
|
|
|
Feb 16 2007, 12:39
|

читатель даташитов
   
Группа: Свой
Сообщений: 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. Одновременно сдвигаются и регистр приема, и регистр передачи.
|
|
|
|
|
Feb 16 2007, 12:53
|
Частый гость
 
Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429

|
Цитата(Kitsok @ Feb 16 2007, 13:46)  Вот допустим, я так сделал железо, что один и тот-же ChipSelect у меня работает и на передачу и на прием (разнос по сигналами MOSI/MISO). Запускаю я одновременно и передачу и прием. SPI может дупелксно и передавать и принимать? SPI работает в дуплексном режиме. По каждому тактовому сигналу один битик передается и один принимается.
|
|
|
|
|
Feb 20 2007, 01:03
|
Местный
  
Группа: Свой
Сообщений: 211
Регистрация: 9-11-06
Пользователь №: 22 136

|
Цитата(Karl @ Feb 16 2007, 12:53)  SPI работает в дуплексном режиме. По каждому тактовому сигналу один битик передается и один принимается. А вот тут возникает интересный вопрос с ChipSelect - если в процессе передачи я меняю адрес устройства для приема, то что будет, старый PCS так и останется активным и новый PCS станет активным, или нет?
|
|
|
|
|
Feb 20 2007, 06:54
|
Частый гость
 
Группа: Свой
Сообщений: 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) с помощью регистров управления выбором корпуса. Если исходить из размера выделяемой под буфера памяти, это не самый оптимальный способ, но он предоставляет очень эффективные возможности для обмена данных с несколькими периферийными устройствами без занятия процессора.
|
|
|
|
|
Feb 20 2007, 12:23
|
Местный
  
Группа: Свой
Сообщений: 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 мс ждем пока все данные улетят в вывод, потом столько-же, пока данные прилетят со ввода. Что делать - не понятно...
|
|
|
|
|
Feb 20 2007, 18:01
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|