Программирование FT812 (краткая шпаргалка)

Железо, связанное с TS-Conf

Postby TS-Labs » Wed, 30.03.2016 18:12:36

Ссылки:
Полная версия (на языке Шекспира и Набокова)
Утилиты, эмуляторы

1. Обмен данными с FT812 происходит по SPI. Последовательность действий такая: опустить CS_n, переслать от 1 и более байт (при отсылке байта в девайс автоматически принимается байт от девайса), поднять CS_n. Это называется транзакция.

2. Транзакции с FT812 бывают трёх типов и различаются по старшим (6 и 7) битам первого байта транзакции:
- чтение памяти (00),
- запись памяти (10),
- команда (01).

3. Чтение памяти:
- байт 0: старший байт адреса (биты 0-5 это биты адреса 16-21, биты 6-7 = 00),
- байт 1: средний байт адреса (биты 0-7 - биты адреса 8-15),
- байт 2: младший байт адреса (биты 0-7),
- байт 3: 0 (нужен для того, чтоб чип успел прочитать первый байт),
- байт 4 и далее: посылается 0, принимается содержимое памяти.
После каждого байта адрес автоматически инкрементируется, так что за одну транзакцию можно прочитать все 4МБ.

4. Запись памяти:
- байт 0: старший байт адреса (биты 0-5 это биты адреса 16-21, биты 6-7 = 10) (т.е. 3 байта для записи по адресу памяти 0х000000 будут 0х80 0х00 0х00).
- байт 1: средний байт адреса (биты 0-7 - биты адреса 8-15),
- байт 2: младший байт адреса (биты 0-7),
- байт 3 и далее: данные для записи в память.
После каждого байта адрес автоматически инкрементируется.

5. Команды:
- байт 0: команда (биты 6 и 7 установлены в 01, т.е. все команды могут иметь значения 0х40-0х7F).
Единственное исключение из данного правила - команда ACTIVE, которая выглядит, как чтение байта по адресу 0 и служит для пробуждения чипа из спячки.

6. В FT812 память по разным адресам служит для разных целей.
0х000000 - RAM_G, 1МБ: ОЗУ общего назначения, хранить битмапы, палитру, аудиосэмплы, FIFO для передачи данных,
0х300000 - RAM_DL, 8кБ: дисплей-лист,
0х302000 - RAM_REG, 4кБ: регистры,
0х308000 - RAM_CMD, 4кБ: фифо сопроцессорных команд.

7. Дисплей-лист (ДЛ) является набором инструкций видеопроцессора (ВП) (как по мне, вполне себе ассемблер), которые ВП выполняет на каждой строке видеоизображения. По результатам обработки ДЛ строится пиксельный буфер видеостроки, который и выводится на экран. ДЛ общий для всего кадра, и хотя его теоретически его можно менять на произвольной строке, я не представляю, зачем это может понадобиться.
ДЛ оборудован аппаратным теневым буфером, на который переключается в начале нового кадра. Отображаемый в данный момент ДЛ недоступен для записи/чтения. Пока CPU наполняет ДЛ для следующего кадра, в текущем кадре отображается теневой.
Все инструкции ДЛ 32-битные, т.е. ДЛ состоит из 2048 инструкций. Врядли ВП успеет выполнить их все, если набить ДЛ битмапами с линейной фильтрацией, но продуктивность ВП все же впечатляет. В самом простом случае ВП рисует 16 пикселей за 1 такт 60МГц, в худшем случае - 1 пиксель за 4 такта. Последней инструкцией ДЛ обязан стоять END, который означает конец рисования (и дисплей-листа) и отображение пиксельного буфера строки.
ДЛ оснащен также командами JUMP, CALL и RET с глубиной стека 4. Имеются также команды типа push и pop для сохранения графического контекста, глубина этого стека также 4.

8. Типы объектов, которые способен отобразить ВП при помощи ДЛ следующие:
- битмапы (десятка форматов), опционально с линейной фильтрацией, к которым возможно применение матрицы преобразования (поворот, масштабирование, обрезка),
- графические примитивы (линии, круги) с точностью 1/16 пикселя (а следовательно, с антиалайсингом),
- блиттер, позволяющий производить арифметические операции над пикселями по маске и заданным условиям.

9. Палитра в FT812 находится в общем ОЗУ, занимает 1024 байт и хранится в форматах RGB565 или ARGB8 (дада, 8 бит альфа). Используется для 8-битных палитровых битмапов.

10. Сопроцессор (не путать с видеопроцессором!) служит для рисования всяких полезных виджетов по заранее запрограммированным на фабрике говнокодам. Результатом его работы является готовый кусок ДЛ с указанного адреса в оном. Также умеет распаковывать JPG в общее ОЗУ в указанный формат битмапа, заполнять/копировать память.

(продолжение следует...)
Last edited by TS-Labs on Thu, 31.03.2016 08:47:35, edited 1 time in total.
User avatar
TS-Labs
 
Posts: 5398
Joined: Thu, 26.07.2012 01:29:56

Postby g0blinish » Wed, 30.03.2016 18:23:44

язык Эзопа :D
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby AndyD » Thu, 31.03.2016 08:31:30

TS-Labs wrote:Дисплей-лист (ДЛ) является набором инструкций видеопроцессора (ВП) (как по мне, вполне себе ассемблер)

Наглядно можно посмотреть и не только, как это работает в эмуляторе фт8хх EVE Screen Editor http://www.ftdichip.com/Support/Utilities.htm
User avatar
AndyD
 
Posts: 280
Joined: Thu, 21.05.2015 21:32:38

Postby TS-Labs » Thu, 31.03.2016 08:47:59

Да, спасибо. Добавил в начало.
User avatar
TS-Labs
 
Posts: 5398
Joined: Thu, 26.07.2012 01:29:56

Postby WBC » Mon, 02.05.2016 10:35:54

off: растем! :)
Image
--wbcbz7
User avatar
WBC
 
Posts: 302
Joined: Fri, 19.09.2014 10:23:23
LOCATION: omsk XOR nsk

Postby TS-Labs » Mon, 02.05.2016 16:19:49

Неплохо, надо раскручиваться )
User avatar
TS-Labs
 
Posts: 5398
Joined: Thu, 26.07.2012 01:29:56

Postby psb » Mon, 02.05.2016 16:34:22

в CV незабудь добавить.
User avatar
psb
 
Posts: 715
Joined: Tue, 30.12.2014 23:22:32

Postby g0blinish » Mon, 02.05.2016 16:52:50

по всей стране началось?
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01


Return to Hardware

Who is online

Users browsing this forum: No registered users and 1 guest

x