Цитата(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
Обратите внимание на применение развернутого цикла, только так удалось добиться нужной скорости и стабильной частоты.