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

 
 
> Разработка параллельного синхронного интерфейса, 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
 
Start new topic
Ответов
InsolentS
сообщение Mar 2 2011, 06:31
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 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



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 07:39
Рейтинг@Mail.ru


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