Page 1 of 1

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

PostPosted: Wed, 30.03.2016 18:12:36
by TS-Labs
Ссылки:
Полная версия (на языке Шекспира и Набокова)
Утилиты, эмуляторы

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 в общее ОЗУ в указанный формат битмапа, заполнять/копировать память.

(продолжение следует...)

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

PostPosted: Wed, 30.03.2016 18:23:44
by g0blinish
язык Эзопа :D

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

PostPosted: Thu, 31.03.2016 08:31:30
by AndyD
TS-Labs wrote:Дисплей-лист (ДЛ) является набором инструкций видеопроцессора (ВП) (как по мне, вполне себе ассемблер)

Наглядно можно посмотреть и не только, как это работает в эмуляторе фт8хх EVE Screen Editor http://www.ftdichip.com/Support/Utilities.htm

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

PostPosted: Thu, 31.03.2016 08:47:59
by TS-Labs
Да, спасибо. Добавил в начало.

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

PostPosted: Mon, 02.05.2016 10:35:54
by WBC
off: растем! :)
Image

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

PostPosted: Mon, 02.05.2016 16:19:49
by TS-Labs
Неплохо, надо раскручиваться )

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

PostPosted: Mon, 02.05.2016 16:34:22
by psb
в CV незабудь добавить.

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

PostPosted: Mon, 02.05.2016 16:52:50
by g0blinish
по всей стране началось?