Думаю придете к тому же что и я :) Скорости spi для цветного дисплея даже с таким разрешением недостаточно если не поменять логику отрисовки - например 5-10 раз в секунду по таймеру отрисовывать экран а не синхронизировать содержимое виртуального буфера с gram при каждом изенении.
хороший совет но эти tft с параллельным интерфейсом и подключить его к обсуждаемой плате к EBI нереально. Если сделать драйвер на gpio то процессор будет только тем и заниматься что гонять данные контроллеру tft :)
starterkit Недавно перешел на ядро 2.6.28.1 и решил вернуться к эксперименту с lcd и spi :) Так вот - при выделении памяти для буфера с которого идет передача по spi в lcd
par->scr = kzalloc(MEM_LEN*2, GFP_KERNEL | GFP_DMA);
добавил флаг для аллокатора GFP_DMA - скорости отрисовки это не добавило но зато на порядки разгрузило процеесор - не знаю пока с чем это связано - с тем что ядро обновленное или с тем что с этим флагом pdc стал работать правильно. За правильную работу pdc говорит тот факт что lcd зависает как и положено на частотах выше 20 МГц. Вообще у него предел порядка 6 МГц но в интернете находил что нормально работает на 20 - так и выходит :)
В ядре есть драйвер framebuffer для ks108 - 64x64, он умеет работать с составным дисплеем (по моему до 4x4 - 256х256).
linux-2.6.28.1/drivers/video/arcfb.c
что-то мне подсказывает что это тоже самое что и ks0108 и в вашем случае стоят два контроллера ks0108х2 - 128x64. Только нужно его будет на gpio переделывать - на нашей плате к ebi не зацепиться...
Попробовал записать видео - файл получается огромный и камера не фокусируется с близкого расстояния - ничего там вообще не понятно. Маловат экранчик. Вообще сейчас вроде нормально все работает. я не смог запустить xorg - он не запускается на таком маленьком и нестандартном разрешении, разбираться стало лень...
Посмотрел описание - я ошибался , он уже на gpio написан, так что изменения будут минимальные - достаточно указать свои адреса ввода-вывода для данных и управления.
ну ладно, вместо outb я напишу что надо, подрыгаю ногами. а как быть с обработкой прерывания? тупо выбросить и все?
и где берут разные xorg для графики? компилить из исходников? =)
Зачем выбрасывать - at91 в linux поддерживает irq на gpio. Смотреть исходники драйверов на gpio где используются прерывания.
я в свое время даже не стал интересоваться когда не заработало - а у меня разрешение экрана в два раза больше :) Куда там xorg :) Через fb многие программы напрямую умеют работать - mplayer, links помоему умеет, потом qt, gtk умеют без xorg напрямую через fb вывод, directfb - в общем xorg не особо и нужен. Если самому что-то писать под fb - не проблема с графическим выводом - экран для программиста представлен как внешняя память - открыл устройство и пиши туда :) Есть ещекитайский minigui - я им еще не пользовался http://www.minigui.org/ но описание многообещающее причем есть готовые апликухи - она как раз для таких нестандартных экранов мобильных устройств расчитана.
Можно частично напрямую с регистрами портов at91 работать - например для вывода данных в порт и так будет проще (по адресу dio_addr в драйвере - использовать __raw_writel или at91_sys_write) а частично использовать надстройку linux gpio - например при работе с прерываниями - чтобы облегчить жизнь. В качестве примера с прерываниями на gpio можно взять вот это
linux-2.6.28.1/drivers/input/keyboard/gpio_keys.c
например
В arcfb_probe до вызова request_irq назначить нужный пин как вход и смапить его на irq. Потом в обработчике прерываний заменить
ctl2status = ks108_readb_ctl2(par);
if (!(ctl2status & KS_INTACK)) /* not arc generated interrupt */
return IRQ_NONE;
простым
if(!gpio_get_value(unsigned gpio)) ....
а на кой мне прерывание если я вводом не пользуюсь? кто мне мешает в процедуре отрисовки просто ногами подрыгать. статус дисплея я читать не собираюсь, задержками обойдусь.
и еще вопрос, как туда консоль отправить? =)
Так у нас ос многозадачная :) Это не микроконтроллер и не дос где процессор занят монопольно. При использовании irq пока дисплей занят процесс замораживается и ядро занято другими задачами.
Это вообще просто - вот кусок моего конфига
Думаю тут все понятно. Консоль в разделе Console display driver support. И в /etc/inittab добавить например такое
tty1::respawn:/sbin/getty 38400 tty1 linux
Я выкладывал свои конфиги в ветке openwrt - там все есть.