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

 
 
 
Reply to this topicStart new topic
> Разработка параллельного синхронного интерфейса, arm 23xx
SmileGobo
сообщение Feb 28 2011, 07:26
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 7-12-10
Пользователь №: 61 451



Необходимо разработать параллельный синхронный интерфейс 6 разрядов данные, 1 разряд синхросигнал. Для этого я использовал быстрые порты ввода вывода и таймер(для установления частоты синхросигнала 640 КГц). Пробовал выдавать данные с использованием прерывания таймера и без. В обоих случаях не удается добиться четкой частоты, при добавлении кода на заполнения буффера или контроля счетков, частота начинает уплывать - длительность синхроимпульсов не четкая. Возможны ли другие пути решения задачи?
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 28 2011, 08:05
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Синхросигнал должен вырабатываться таймером без вмешательства процессора (функция PWM или что-то в этом духе). Данные тоже желательно выдавать без процессора, при помощи DMA.
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Feb 28 2011, 15:52
Сообщение #3


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Цитата(SmileGobo @ Feb 28 2011, 02:26) *
Необходимо разработать параллельный синхронный интерфейс 6 разрядов данные, 1 разряд синхросигнал. Для этого я использовал быстрые порты ввода вывода и таймер(для установления частоты синхросигнала 640 КГц). Пробовал выдавать данные с использованием прерывания таймера и без. В обоих случаях не удается добиться четкой частоты, при добавлении кода на заполнения буффера или контроля счетков, частота начинает уплывать - длительность синхроимпульсов не четкая. Возможны ли другие пути решения задачи?
А она действительно нужна -- четкость дилтельности синхроимпульсов? И если нужна, какой допустимый джиттер?

640 килогерц -- круто. У вас всего < 120 клоков на каждый пакет данных. Прерывания тут естественно не катят. Синхроклок от PWM, и обновления данных на выходе по флагу прерывания от PWM. Но без собственно прерываний -- все должно делаться в основном цикле, который должен быть вылизан до предела.

Правда, какую-либо еще осмысленную задачу этот процессор уже не вытянет. Если еще эти данные надо как-то нетривиально генерировать, то надо делать буфер на внешнем устройстве. Пик или CPLD. Вываливать данные наружу через DMA, а внешний буфер уже их будет выплевывать с нужной скоростью. И только отслеживать в софте заполненность внешнего буфера.

Сообщение отредактировал ar__systems - Feb 28 2011, 16:38
Go to the top of the page
 
+Quote Post
SmileGobo
сообщение Mar 1 2011, 07:45
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 7-12-10
Пользователь №: 61 451



Цитата
А она действительно нужна -- четкость длительности синхроимпульсов? И если нужна, какой допустимый джиттер?

Нужна очень! Необходимо соблюдать четко синхросигнал - 640 КГц и данные 320 отклонения в пределах 3%.

Проблема еще в том что синхросигнал имеет такую структуру ....1010101010101010001010101.... - эта так называемая вырезка генерируется с частотой 8КГц

Цитата
640 килогерц -- круто. У вас всего < 120 клоков на каждый пакет данных.
А как вы расчитали что менее 120 клоков? я работаю на частоте 72Мгц

Вы говорите об использовании DMA, когда я выдавал данные через SSP проблем не было завязать его с DMA, а куда привязывать DMA в случае параллельного интерфейса,возможно его связать с портом вывода?
Go to the top of the page
 
+Quote Post
scifi
сообщение Mar 1 2011, 09:10
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(SmileGobo @ Mar 1 2011, 10:45) *
Проблема еще в том что синхросигнал имеет такую структуру ....1010101010101010001010101.... - эта так называемая вырезка генерируется с частотой 8КГц

Такие вырезки желательно внешней логикой формировать. Наверняка можно два выхода PWM скомбинировать при помощи одной логической ячейки и получить желаемое.

Цитата(SmileGobo @ Mar 1 2011, 10:45) *
А как вы расчитали что менее 120 клоков? я работаю на частоте 72Мгц

72000000 / 640000 = 112.5

Цитата(SmileGobo @ Mar 1 2011, 10:45) *
Вы говорите об использовании DMA, когда я выдавал данные через SSP проблем не было завязать его с DMA, а куда привязывать DMA в случае параллельного интерфейса,возможно его связать с портом вывода?

Если сообщите марку МК, придётся меньше гадать.
Go to the top of the page
 
+Quote Post
SmileGobo
сообщение Mar 1 2011, 11:07
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 7-12-10
Пользователь №: 61 451



Прошу прощения сразу не догадался сказать марку - lpc2378 NXP. В целом эта программа пойдет и на 68 процессор
Собственно я еще раз погонял на осциллографе без логического анализатора, и вроде как частота выдерживается, так что вопрос исчерпан.
Единственное хотелось бы узнать как связать порт ввода/вывода и DMA и на сколько это возможно.
Спасибо за уделенное внимание

Сообщение отредактировал SmileGobo - Mar 1 2011, 11:08
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Mar 1 2011, 14:00
Сообщение #7


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Цитата(SmileGobo @ Mar 1 2011, 02:45) *
Проблема еще в том что синхросигнал имеет такую структуру ....1010101010101010001010101.... - эта так называемая вырезка генерируется с частотой 8КГц

Можно и без внешней. Ставите счетчик и в нужные моменты времени меняте Duty Cycle у PWM.

Без внешнего буфера DMA вам не поможет.

Более разумный и простой вариант все (данные и клок) валить DMA в UART на частоте 6.4МГц, а оттуда каким-то десериализатором распараллеливать.

Сообщение отредактировал ar__systems - Mar 1 2011, 14:38
Go to the top of the page
 
+Quote Post
Dron_Gus
сообщение Mar 1 2011, 15:02
Сообщение #8


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

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



Цитата(ar__systems @ Mar 1 2011, 17:00) *
Более разумный и простой вариант все (данные и клок) валить DMA в UART на частоте 6.4МГц, а оттуда каким-то десериализатором распараллеливать.

Тогда уж SPI. И валить на сдвиговый регистр с защелкой.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
InsolentS
сообщение Mar 2 2011, 06:31
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897



Цитата(SmileGobo @ Feb 28 2011, 12:26) *
Необходимо разработать параллельный синхронный интерфейс 6 разрядов данные, 1 разряд синхросигнал. Для этого я использовал быстрые порты ввода вывода и таймер(для установления частоты синхросигнала 640 КГц). Пробовал выдавать данные с использованием прерывания таймера и без. В обоих случаях не удается добиться четкой частоты, при добавлении кода на заполнения буффера или контроля счетков, частота начинает уплывать - длительность синхроимпульсов не четкая. Возможны ли другие пути решения задачи?

Делаю тоже самое на LPC, только 16бит и частота 8 МГц (!) для управления TFT экраном (без встроенного контроллера). Тактовую частоту (2штуки) выдаю ШИМом, а ногами махаю в ассемблерной вставке:
Код
;функция, посылающая на экран 320 слов из буфера
ClkPulseBuff    STMFD SP!, {R1-R4}
                LDR R1,=FRAMEDELAY                
                LDR R4,=FIO0PINU

;задержка перед началом строки
FrameDelay1     SUBS R1,R1,#1
                BNE  FrameDelay1

;вывод данных

                GBLA    count
count           SETA    0
                WHILE   count<320
count           SETA    count+1

                LDRH R2,[R0],#2        
                STRH R2,[R4]      

                WEND                    

                LDMFD SP!, {R1-R4}
                BX  LR

Вызывается так
Код
extern void ClkPulseBuff(unsigned short *buff);


Важно чтобы порты были подключены по-порядку и, желательно, были выровнены по байту или слову, например, P0.15 - P0.31

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


--------------------
Курильщик даташитов со стажем
Go to the top of the page
 
+Quote Post
SmileGobo
сообщение Mar 4 2011, 16:32
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 7-12-10
Пользователь №: 61 451



Спасибо за советы буду пробовать
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 5 2011, 00:22
Сообщение #11


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Можно поставить в помощь внешний более простой контроллер, который только и будет тем заниматься, что принимать поток данных по SPI и разворачивать в 6-ти битный интерфейс.
Разгрузите свой ARM, а то если дергать ногами - будет у вас 80% ресурсов проца на фигню эмуляцию интерфейса уходить.
Go to the top of the page
 
+Quote Post

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

 


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


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