Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: uClinux + TFT-LCD через PPI
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
Giekelberri
Здравствуйте!

Возникла насущная задача - вывод графической информации на TFT дисплей.
Система uClinux работает на отладочной плате tcm-bf537.
TFT дисплей имеет свой контроллер, передача данных осуществляется по параллельному интерфейсу PPI.

Вопрос вот в чем:
временная характеристика контроллера TFT дисплея порядка 100 наносекунд, в то время как
минимальная разрешающая способность uClinux (из функции clock()) минимум 10 миллисекунд.
Разница в 2 порядка, что неприемлемо.
Как правильно организовать обмен данными по параллельному интерфейсу PPI? Поделитесь, пожалуйста, любой информацией.
cpl
Цитата(Giekelberri @ Oct 25 2011, 14:28) *
Здравствуйте!

Возникла насущная задача - вывод графической информации на TFT дисплей.
Система uClinux работает на отладочной плате tcm-bf537.
TFT дисплей имеет свой контроллер, передача данных осуществляется по параллельному интерфейсу PPI.

Вопрос вот в чем:
временная характеристика контроллера TFT дисплея порядка 100 наносекунд, в то время как
минимальная разрешающая способность uClinux (из функции clock()) минимум 10 миллисекунд.
Разница в 2 порядка, что неприемлемо.
Как правильно организовать обмен данными по параллельному интерфейсу PPI? Поделитесь, пожалуйста, любой информацией.


Несовсем понятно как передаете по PPI. Побайтно ?
ДМА используете ?
Giekelberri
Цитата(cpl @ Oct 25 2011, 14:30) *
Несовсем понятно как передаете по PPI. Побайтно ?
ДМА используете ?


8 бит данных выставляются на шину PPI и по тактирующим сигналам записываются в память дисплея TFT.
и так, пока все изображение не запишется в память дисплея TFT.

ДМА не использую.


kurtis
1. Можно посмотреть как это сделано у других. Например, у производителя платы должны быть исходники.
2. Возможно то что вам нужно, уже кто-то когда-то реализовывал, можно поискать в архивах почтовых рассылок (гугль это умеет).
3. Я не знаю по поводу многозадачности в ядре ucLinux, может ли один процесс в ядре, втеснить другой, но чисто теоретически, если многозадачность не вытесняющая, то можно все сделать в одном процессе, а когда уже передача закончена, то возвращать управление планировщику.
И возможно, вы немного путаете sleep() и delay(). Первая передает управление планировщику, и уже тот дальше решает когда возвращать управление процессу, а первая просто ждет заданное количество времени.
cpl
Цитата(Giekelberri @ Oct 25 2011, 14:41) *
8 бит данных выставляются на шину PPI и по тактирующим сигналам записываются в память дисплея TFT.
и так, пока все изображение не запишется в память дисплея TFT.

ДМА не использую.


Так непойдет smile3046.gif
Тут только ДМА !
Посмотрите пример tft
остается только под себя переделать.

Надо стараться избегать ногадрыганья под линуксом иначе все умрет,
в качестве эксперимента попробуйте вывести меандр на gpio из user space и померить частоту.

Giekelberri
Цитата(cpl @ Oct 25 2011, 14:51) *
Так непойдет smile3046.gif
Тут только ДМА !
Посмотрите пример tft
остается только под себя переделать.

Надо стараться избегать ногадрыганья под линуксом иначе все умрет,
в качестве эксперимента попробуйте вывести меандр на gpio из user space и померить частоту.


Про ногадрыганья я с вами абсолютно согласен.

В теории вывод изображения на LCD происходит так:
1. Изображение загружается в память. Причем в контроллере ПДП (прямого доступа к памяти) устанавливается
начальный адрес в памяти, размер изображения в байтах и т.д.
2. По тактирующим импульсам, генерируемых BlackFin'ом, идет
- начало записи
- выставление 8 бит на PPI,
- и т.д.
3. Затем инкрементирование текущего адреса в контроллере ПДП и снова пункт2, пока не будет передано все изображение.

Interface protocol на мой дисплей:
Нажмите для просмотра прикрепленного файла

И это все согласуется c документацией BlackFin Hardware reference:
Нажмите для просмотра прикрепленного файла

Но не понятно как реализовать на uClinux синхроимпульсы, установление значений контроллера ПДП...
cpl
Помотрите пример+схему все станет понятно.
Уже есть готовый драйвер посмотрите как реализовано и переделайте под себя.
Нужно выставить: свое разрешение, свой инит.
(там все достаточно просто, в первом приближении обычный набор подпрограмм работы с железом как в и без линукса, только задаются специфические функции через которые ядро и работает между железом и узерспасе)

DMA запускается в 2D т.е. передача идет весь кадр полностью.
Передали весь кадр прерывание DMA, перезагрузка на передачу нового кадра и т.д.
Giekelberri
Спасибо!

Нашел драйвер
./blackfin-linux-dist/linux-2.6.x/drivers/video/bfin537-lq035.c

для вот этого дисплея
http://docs.blackfin.uclinux.org/doku.php?...w:cards:tft-lcd

В настройках ядра находится:
Device Drivers -> Graphics support -> Support for frame buffer devices -> SHARP LQ035Q1DH02 TFT LCD
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.