РадиоКот :: Тест TFT LCD 320x480 на Cortex А8 bare metal
Например TDA7294

РадиоКот >Статьи >

Теги статьи: LCDДобавить тег

Тест TFT LCD 320x480 на Cortex А8 bare metal

Автор: Tambovskiy_Volk26
Опубликовано 07.05.2015
Создано при помощи КотоРед.

 

Данная статья нацелено на то чтобы убедить новички что программирование Bare metal на ARM Cortex A8, без всякого ОС, uBoot, Linux и т.п. ни с чем не труднее программирования обычных атмег, даже если микросхема китайская и вместо прочитания документации часто приходится узнать что то с дизассемблером что то по экспериментированию в тёмной комнате (да, документация А13 наверное не самое полное но я всё таки шучю :) ).

Код написано так чтобы оно было максимально коротким и понятным. В статье описано следующие:
1. Логика работы типичных TFT LCD с интерфейсом 8080
2. Загрузка Bare metal кода и зажигание светодиода на плате Allwinner A13
3. Пример прорисовки изображения
4. Запуск А13 на 864мггц и оценка максимальной скорости программной прорисовки кадров через порта "D"

Программные требования для скомпилировании кода на LinuxMint 17.1 64bit:
gcc-arm-none-eabi, libnewlib-arm-none-eabi, ncurses-dev, build-essential

Коротко об использовании кода:
1. Убедитесь что все программные требования на ПК установлены
2. В случае необходимости заменить в build.sh значение of для dd, стандартно оно /dev/sdb
3. Вставьте MicroSD и запустите build.sh
4. Подключите LCD к Olinuxino-A13 Micro по указанной схеме
5. Вставьте карту в плате и подключите питания 5в, LCD должен засветится

Прикрепленные файлы:
01.zip - Исходники
02.zip - Оригинал документации присланной производителем
02.png - Схема подключения

Ссылки для покупки:
LCD (TFT1P4705-E) - https://www.aliexpress.com/item/3-5-inch-HD-TFT-LCD-Screen-with-Touch-Panel-D51E5TA7601-320-480/1898486701.html
Olinuxino-A13 Micro - https://www.olimex.com/Products/OLinuXino/A13/A13-OLinuXino-MICRO/open-source-hardware
Также потребуется адаптер 5в или шнур Mini USB (для питания)

Детально:
1. Логика работы интерфейса 8080 с TFT LCD
Подключение:

В моём случае оно выглядела так:

Логика:

2. Загрузка Bare metal кода и зажигание светодиода на плате
Для запуска Си кода ЦПУ надо указывать стек, что и делаем на ассемблере в start.s, после чего переходим к исполнению функции main. В файле linkerxyina.ld ставим код от start.s в начале всего кода, для того чтобы ЦПУ сначала выполняла его, иначе инициализация стека не заработает. Дальше всё дело делает main.c. Обычно настраиваем порты и ставим бит в PortG Pin9 и оранжевый светодиод загорится. Это сделано в функции "turn_on_led()", для его запуска откомментируите строку "turn_on_led();" в функцие main. В папке tools есть одна необходимая программа "mksunxiboot", скрипт build.sh после завершения make вызывает его чтобы сделать файл release.bin, release.bin это file.bin с добавленным заголовком загрузчика, то есть если на MicroSD ЦПУ не найдёт этого заголовка то оно не будет выполнять программу. "mksunxiboot" программа на открытых исходниках. Файла release.bin скрипт build.sh пишет на MicroSD командой "sudo dd if=bin/release.bin of=/dev/sdb bs=1024 seek=8", оно пишет после восьмого блока потому что это и есть адрес от куда ЦПУ начинает считывание, а не с самой начальной ячейки памяти MicroSD.

3. Пример прорисовки изображения
смотрим код в main.c. А результат выглядит так:

Смотрим по видео со всех сторон сюда>> https://my.mail.ru/mail/tambovskiy_volk26/video/_myvideo/4.html
4. Запуск А13 на 864мггц и оценка максимальной скорости программной прорисовки кадров через порта "D"
Запускается ЦПУ на 864мггц функцией "void clock_init()", если откомментировать "clock_init();" в функции main то ЦПУ запустится на 24мггц

Видно как курсор заменяет красный цвет с синим на дисплее.
Смотрим по видео со всех сторон сюда>> https://my.mail.ru/mail/tambovskiy_volk26/video/_myvideo/3.html
скорость прорисовки как видно низкое, примерно 4 кадра в секунду и это при том что процессор ни чем другим не загружён, от сюда ясно что для пройгривания видео или анимации необходима использовать встроенный LCD контроллер, но пример программной прорисовки наглядно объясняет логику работы 8080 интерфейса и научит самую основу работы с Cortex A8 на Bare Metal.

*Извиняюсь если в тексте грамматические ошибки, есть причина. :)


Файлы:
Архив ZIP
Архив ZIP


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

16 6 5

Эти статьи вам тоже могут пригодиться: