RTOS предоставляет полный набор драйверов экрана, поддерживающих экраны форматов RGB, i8080, SPI и DBI.
(1) интерфейс RGB
Интерфейс RGB также называется интерфейсом HV (горизонтальная синхронизация и вертикальная синхронизация) на платформе Allwinner. Некоторые ЖК-экраны поддерживают расширенные функции, такие как настройка гаммы, формата пикселей и т. д., но сам протокол RGB не поддерживает передачу других данных, кроме данных изображения, поэтому ЖК-экран нельзя настроить через контакты RGB, поэтому я получил экран с интерфейсом RGB. , либо команда инициализации не требуется, либо на этом экране будут представлены дополнительные контакты для настройки SoC, такие как SPI и I2C. Экраны RGB бывают разных форматов, с разной разрядностью и разными тактовыми циклами. В следующей таблице показана разница между разрядностью и периодом тактовой частоты.
разрядность | количество тактов | Количество цветов и формат | Параллельный\Последовательный RGB |
---|---|---|---|
24 bits | 1 cycle | 16.7M colors, RGB888 | параллельный |
18 bits | 1 cycle | 262K colors, RGB666 | параллельный |
16 bits | 1 cycle | 65K colors, RGB565 | параллельный |
6 bits | 3 cycles | 262K colors, RGB666 | сериал |
6 bits | 3 cycles | 65K colors, RGB565 | сериал |
сериал RGB даотносительнопараллельный RGB Это не означает, что для отправки данных используется только одна линия. Для отправки данных одного пикселя требуется всего несколько тактов. Тогда вот так. RGB интерфейс Сразудасериал RGB。
(2) экран I8080
Экран интерфейса Intel 8080 (также известный как интерфейс MCU) — это очень старый протокол, который обычно используется на экранах с очень маленьким разрешением.
Существует 6 типов управляющих контактов:
I8080 в соответствии интерфейс скорости передачи данных 9.08.16.18, даже какая ступня ссылка, даже если разрядность одинаковая, даже из Приколоть не та, тоже хотелось бы учесть из фактора да RGB Формат.
(3) Экран SPI
SPI LCD — это экран, который использует шину SPI для передачи данных изображения и отображается только на экранах с очень низким разрешением. Вообще говоря, перед открытием экрана требуется инициализация.
panel.c
и panel.h
。в переменных глобальной структуры panel_array
середина Новый Добавлен только что strcut __lcd_panel
изуказатель переменной。panel.h
середина新增 strcut __lcd_panel
из заявления.Makefile
документвdisp-objs
середина Новый Добавлен только чтодрайвер экрана.osys_config.fex
в lcd0
узел..
├── Kconfig
├── Makefile
├── disp
│ ├── Kconfig
│ ├── Makefile
│ ├── de # Display Engine Драйвер слоя, включая управление ипоказывать слой
│ │ ├── Makefile
│ │ ├── bsp_display.h
│ │ ├── disp_capture.c
│ │ ├── disp_capture.h
│ │ ├── disp_device.c
│ │ ├── disp_device.h
│ │ ├── disp_display.c
│ │ ├── disp_display.h
│ │ ├── disp_enhance.c
│ │ ├── disp_enhance.h
│ │ ├── disp_features.c
│ │ ├── disp_features.h
│ │ ├── disp_hdmi.c
│ │ ├── disp_hdmi.h
│ │ ├── disp_lcd.c
│ │ ├── disp_lcd.h
│ │ ├── disp_manager.c
│ │ ├── disp_manager.h
│ │ ├── disp_private.c
│ │ ├── disp_private.h
│ │ ├── disp_smart_backlight.c
│ │ ├── disp_smart_backlight.h
│ │ ├── disp_tv.c
│ │ ├── disp_tv.h
│ │ ├── disp_vdevice.c
│ │ ├── disp_vdevice.h
│ │ ├── include.h
│ │ └── lowlevel_v2x # DISP Драйвер низкого уровня, аппаратное обеспечение Регистрация Взаимодействие
│ │ ├── Makefile
│ │ ├── de_ase.c
│ │ ├── de_ase_type.h
│ │ ├── de_bws.c
│ │ ├── de_bws_type.h
│ │ ├── de_ccsc.c
│ │ ├── de_clock.c
│ │ ├── de_clock.h
│ │ ├── de_csc.h
│ │ ├── de_csc_type.h
│ │ ├── de_dcsc.c
│ │ ├── de_dsi.c
│ │ ├── de_dsi.h
│ │ ├── de_dsi_28.c
│ │ ├── de_dsi_type.h
│ │ ├── de_dsi_type_28.h
│ │ ├── de_eink.c
│ │ ├── de_eink.h
│ │ ├── de_enhance.c
│ │ ├── de_enhance.h
│ │ ├── de_fcc.c
│ │ ├── de_fcc_type.h
│ │ ├── de_fce.c
│ │ ├── de_fce_type.h
│ │ ├── de_feat.c
│ │ ├── de_feat.h
│ │ ├── de_gsu.c
│ │ ├── de_gsu_type.h
│ │ ├── de_hal.c
│ │ ├── de_hal.h
│ │ ├── de_lcd.c
│ │ ├── de_lcd.h
│ │ ├── de_lcd_sun50iw10.c
│ │ ├── de_lcd_type.h
│ │ ├── de_lti.c
│ │ ├── de_lti_type.h
│ │ ├── de_peak.c
│ │ ├── de_peak_type.h
│ │ ├── de_rtmx.c
│ │ ├── de_rtmx.h
│ │ ├── de_rtmx_type.h
│ │ ├── de_scaler.h
│ │ ├── de_scaler_table.c
│ │ ├── de_scaler_table.h
│ │ ├── de_smbl.c
│ │ ├── de_smbl.h
│ │ ├── de_smbl_tab.h
│ │ ├── de_smbl_type.h
│ │ ├── de_vep.h
│ │ ├── de_vep_table.c
│ │ ├── de_vep_table.h
│ │ ├── de_vsu.c
│ │ ├── de_vsu_type.h
│ │ ├── de_wb.c
│ │ ├── de_wb.h
│ │ ├── de_wb_type.h
│ │ ├── disp_al.c
│ │ ├── disp_al.h
│ │ ├── disp_eink_data.c
│ │ ├── disp_eink_data.h
│ │ ├── disp_waveform.c
│ │ ├── disp_waveform.h
│ │ ├── rtmx_eink.c
│ │ └── rtmx_eink.h
│ ├── dev_disp.c # DISP общественный порт
│ ├── dev_disp.h
│ ├── disp_debug.c
│ ├── disp_debug.h
│ ├── disp_sys_intf.c
│ ├── disp_sys_intf.h
│ ├── lcd # LCD Драйвер панели, включая кастомную первую разначало химический контроль, контроль последовательности включения
│ │ ├── Kconfig
│ │ ├── S6D7AA0X01.c
│ │ ├── S6D7AA0X01.h
│ │ ├── VVX07H005A10.c
│ │ ├── VVX07H005A10.h
│ │ ├── WilliamLcd.c
│ │ ├── WilliamLcd.h
│ │ ├── b080uan01_mipi1200x1920.c
│ │ ├── b080uan01_mipi1200x1920.h
│ │ ├── cl40bc1019_cpu.c
│ │ ├── cl40bc1019_cpu.h
│ │ ├── cpu_gg1p4062utsw.c
│ │ ├── cpu_gg1p4062utsw.h
│ │ ├── default_eink.c
│ │ ├── default_eink.h
│ │ ├── default_panel.c
│ │ ├── default_panel.h
│ └── wtq05027d01.h
├── soc # SoC драйвер специализации слоев
│ ├── Kconfig
│ ├── Makefile
│ ├── VVX07H005A10_mipi_config.c
│ ├── disp_board_config.c
│ ├── disp_board_config.h
│ ├── he0801a068_mipi_config.c
│ ├── platform_resource.c
│ ├── platform_resource.h
│ ├── sun20iw2.c
└── tv # TV водить машину,R128Нетиспользовать ├── Makefile
├── de_tve_sun8iw11.c
├── de_tve_sun8iw7.c
├── de_tve_v1.c
├── de_tvec.h
├── drv_tv.c
├── drv_tv.h
├── gm7121.c
├── tv_ac200.c
├── tv_ac200.h
├── tv_ac200_lowlevel.c
└── tv_ac200_lowlevel.h
Для тех, которые не требуют инициализации RGB экран (обычно 40PIN, 50PIN) используйте default_panel.c
lichee/rtos‑hal/hal/source/disp2/disp/lcd/default_panel.c
Некоторым ЖК-панелям требуется запись инициализации IIC, SPI или особые требования к включению и выключению питания, а также необходимость написания специализированных драйверов экрана.
lichee/rtos‑hal/hal/source/disp2/disp/lcd/
Среди них «модель чипа», например r128s3, и «название платы», например pro, замените их в соответствии с реальной ситуацией.
плата/модель чипа/название платы/конфигурации/
Код, связанный с ЖК-дисплеем, включен в модуль драйвера дисплея. Выполните команду для входа в основной интерфейс конфигурации меню и выполните следующие действия:
Добавление нового экрана обычно требует следующих шагов:
panel.c
и panel.h
,Когда пользователь «Добавить новый экран» запускает,дануждаться Исправлятьэтотдваиндивидуальныйдокументиз,нуждаться добавляет переменную структуры экрана к глобальной переменной структуры Panel_arrayсередина.lcd_source.c
и lcd_source.h
,этотдваиндивидуальныйдокумент Реальностьсейчасизда给драйвер экранаиспользоватьизфункцияинтерфейс,Например, выключатель питания,gpio,интерфейс чтения dsi,использовать户Нетнуждаться Исправлять Тольконуждатьсяиспользовать。Makefile
документ.мы можем открыть lichee/rtos‑hal/hal/source/disp2/disp/lcd/default_panel.c
В качестве примера драйвера экрана в конце файла:
struct __lcd_panel default_panel = {
/* panel driver name, must mach the lcd_drv_name in sys_config.fex */
.name = "default_lcd",
.func = {
.cfg_panel_info = LCD_cfg_panel_info,
.cfg_open_flow = LCD_open_flow,
.cfg_close_flow = LCD_close_flow,
},
};
default_panel
изстановитьсячлен name
и lcd_driver_name
Должен быть последовательным, этот индивидуальный связан с тем, сможет ли водитель найти указанный документ.
func
становиться член из первый раз начало изменять, этот внутри большинство хозяин хотеть Реальность сейчас три индивидуальный раз настраивать письмо число。LCD_cfg_panel_info
, LCD_open_flow
и LCD_close_flow
。
LCD_open_flow
и LCD_close_flow
Это называется функцией переключения экрана. Функция коробки, например. LCD_power_on
,сказатьдля Действия по включению и выключению экранафункция.LCD_panel_init
и LCD_panel_exit
этотнекоторыйфункция Можетдлянулевой。Функция LCD_open_flow будет вызываться только один раз во время инициализации системы. Выполнение каждой функции LCD_OPEN_FUNC заключается в регистрации соответствующей функции шага открытия экрана и ее выполнении в первую очередь, но функция шага открытия экрана не выполняется немедленно.
Прототип функции:
static __s32 LCD_open_flow(__u32 sel)
Часто используемые функции:
static __s32 LCD_open_flow(__u32 sel)
{
LCD_OPEN_FUNC(sel, LCD_power_on,10);
LCD_OPEN_FUNC(sel, LCD_panel_init, 50);
LCD_OPEN_FUNC(sel, sunxi_lcd_tcon_enable, 100);
LCD_OPEN_FUNC(sel, LCD_bl_open, 0);
return 0;
}
Как и выше, четырехкратный вызов LCD_OPEN_FUNC регистрирует четыре функции обратного вызова, соответствующие четырем процессам открытия экрана. Сначала зарегистрируйтесь и сначала выполните. Фактически, пользователь сам решает, сколько функций зарегистрировать, если это разумно.
Зарегистрируйте функцию шага открытия экрана в процессе открытия экрана. Помните, что это регистрация, а не выполнение!
Прототип функции:
void LCD_OPEN_FUNC(__u32 sel, LCD_FUNC func, __u32 delay)
Описание параметра:
func
указатель этой функции,Что类型да:void (*LCD_FUNC) (__u32 sel)
,Пользовательская изфункция также должна использовать унифицированную форму. например:
void user_defined_func(__u32 sel)
{
// do something
}
delay
Это время задержки после выполнения этого шага. Единица времени — миллисекунды.
Второй параметр LCD_OPEN_FUNC — это длительность задержки двух шагов до и после, в мс. Обратите внимание, что значение здесь должно быть заполнено в соответствии с правилами руководства по экрану. Случайное заполнение может привести к некорректной инициализации экрана или к сбою. долго включать и выключать экран, что влияет на удобство использования.
и LCD_open_flow
Соответствует LCD_close_flow
,它использовать于注册关экранфункция.использовать LCD_CLOSE_FUNC
Для регистрации функции сначала зарегистрируйтесь и сначала выполните. Это просто для регистрации функции обратного вызова, а не для ее немедленного выполнения.
static s32 LCD_close_flow(u32 sel)
{
/* close lcd backlight, and delay 0ms */
LCD_CLOSE_FUNC(sel, LCD_bl_close, 0);
/* close lcd controller, and delay 0ms */
LCD_CLOSE_FUNC(sel, sunxi_lcd_tcon_disable, 50);
/* open lcd power, than delay 200ms */
LCD_CLOSE_FUNC(sel, LCD_panel_exit, 100);
/* close lcd power, and delay 500ms */
LCD_CLOSE_FUNC(sel, LCD_power_off, 0);
return 0;
}
Настроенные параметры расширения TCON, такие как гамма-функции и функции цветового отображения.
Прототип функции:
static void LCD_cfg_panel_info(__panel_extend_para_t *info)
Расширенные параметры TCON можно настроить только в файле экрана. Определение параметров:
Модулятор частоты кадров ЖК-дисплея, FRM предназначен для решения проблемы глубины цвета, вызванной уменьшением PIN-кода. Формат пикселей некоторых ЖК-экранов имеет глубину цвета 18 бит (RGB666) или глубину цвета 16 бит (RGB565). Рекомендуется включить функцию FRM и. компенсируйте глубину цвета с помощью дизеринга, благодаря чему дисплей достигает эффекта глубины цвета 24 бита (RGB888). Как показано на рисунке ниже, верхний рисунок представляет собой ЖК-дисплей с глубиной цвета RGB66, а нижний рисунок — это дисплей после включения сглаживания. После включения сглаживания цветовой градиент становится чрезмерно плавным.
Соответствующие значения настроек параметров:
0:RGB888 ‑‑ RGB888 direct
1:RGB888 ‑‑ RGB666 dither
2:RGB888 ‑‑ RGB565 dither
Lcd Gamma Correction Enable, соответствующее значение установки соответствующего значения:
0:LCD из Gamma Функция коррекциизакрытия
1:LCD из Gamma Функция калибровки включена
установлен на 1 Когда необходимо настроить драйвер экрана lcd_gamma_tbl[256]
Сделайте задание.
Lcd Color Map Enable, установлен на 1 когда, необходимо lcd_cmap_tbl [2][3][4]
Сделать задание Lcd Color Map Table
。
Каждый пиксель имеет три единицы: R, G и B. Каждые четыре пикселя представляют собой выборку, всего 12 вариантов. Первое измерение массива представляет нечетные и четные строки, второе измерение представляет RGB пикселя, а третье измерение представляет номер пикселя. Содержимое массива представляет содержимое, сопоставленное с позицией.
LCD CMAP — это функция вывода сопоставления пикселей, которую необходимо настраивать только для ЖК-экранов со специальным расположением пикселей.
LCD CMAP определяет 4 пикселя в каждой строке как общую единицу, и каждый пиксель делится на 3 маленьких единицы: R, G и B, всего 12 маленьких единиц. Определив отношение сопоставления с помощью lcd_cmap_tbl, каждая маленькая единица вывода может быть произвольно сопоставлена с одной из 12 маленьких единиц.
__u32 lcd_cmap_tbl[2][3][4] = {
{
{LCD_CMAP_G0,LCD_CMAP_B1,LCD_CMAP_G2,LCD_CMAP_B3},
{LCD_CMAP_B0,LCD_CMAP_R1,LCD_CMAP_B2,LCD_CMAP_R3},
{LCD_CMAP_R0,LCD_CMAP_G1,LCD_CMAP_R2,LCD_CMAP_G3},
},
{
{LCD_CMAP_B3,LCD_CMAP_G2,LCD_CMAP_B1,LCD_CMAP_G0},
{LCD_CMAP_R3,LCD_CMAP_B2,LCD_CMAP_R1,LCD_CMAP_B0},
{LCD_CMAP_G3,LCD_CMAP_R2,LCD_CMAP_G1,LCD_CMAP_R0},
},
};
Как указано выше, три верхние строки представляют расположение пикселей строк с нечетными номерами, а три нижних строки представляют расположение пикселей строк с четными номерами;
Каждые четыре пикселя представляют собой единицу измерения, первый столбец представляет первую карту пикселей каждых четырех пикселей, второй столбец представляет вторую карту пикселей каждых четырех пикселей и так далее.
Как определено выше, выходной формат пикселей показан на рисунке ниже.
Менять TCON
модуль RGB
в R сумма компонентов B Часть.
0:Нет变
1:МенятьRсумма компонентовBмасса
нуждаться gamma Коррекция, или цветовое отображение, в sys_config.fex
серединабудет соответствоватьмодульиз enable
Настройки параметров 1,lcd_gamma_en
, lcd_cmap_en
,и заполните таблицу 3 индивидуальных коэффициентов,lcd_gamma_tbl
, lcd_cmap_tbl
,Примечание: гамма,Шаблон предоставляет 18 значение точки перегиба сегмента, а затем интерполировать все значения (255 индивидуальный). В соответствующую таблицу можно добавлять подпункты, чтобы дополнить детали. cmap_tbl Размер фиксированный, размер таблицы нельзя уменьшить или увеличить. Окончательный сгенерированный gamma Запись таблицы состоит из rgb три gamma состоит из ценностей, каждая из которых учитывает 8бит. В настоящее время предлагается из шаблонов середина, три gamma Значения те же.
прототип функции
(миллисекундный уровень)
s32 sunxi_lcd_delay_ms(u32 ms)
(микросекундный уровень)
s32 sunxi_lcd_delay_us(u32 us)
Включите контроллер ЖК-дисплея и начните обновление ЖК-дисплея.
void sunxi_lcd_tcon_enable(u32 screen_id)
Выключите контроллер ЖК-дисплея и прекратите обновление данных.
void sunxi_lcd_tcon_disable(u32 screen_id)
Включите подсветку, операция sys_config.fex
середина lcd_bl
настроен gpio
。
void sunxi_lcd_backlight_enable(u32 screen_id)
Выключите подсветку, операция sys_config.fex
середина lcd_bl
настроен gpio
。
void sunxi_lcd_backlight_disable(u32 screen_id)
Включить ШИМ-подсветку, при включении pwm будет выводиться pwm форма волны。Соответствуетlcd_pwm_ch
Соответствующая дорога pwm。
s32 sunxi_lcd_pwm_enable(u32 screen_id)
Отключить подсветку ШИМ при включении pwm будет выводиться pwm форма волны。Соответствует lcd_pwm_ch
Соответствующая дорога pwm。
s32 sunxi_lcd_pwm_disable(u32 screen_id)
Открыть Lcd
источник питания, управляемый sys_config.fex
в lcd_power/lcd_power1/lcd_power2
。( pwr_id
Определить индекс мощности)
void sunxi_lcd_power_enable(u32 screen_id, u32 pwr_id)
закрытие Lcd
источник питания, управляемый sys_config.fex
в lcd_power/lcd_power1/lcd_power2
。( pwr_id
Определить индекс мощности)
void sunxi_lcd_power_disable(u32 screen_id, u32 pwr_id)
Настройка ЖК-io
прототип функции
s32 sunxi_lcd_pin_cfg(u32 screen_id, u32 bon)
Конфигурация lcd
из data/clk
ждать pin
,переписываться sys_config.fex
в lcdd0‑lcdd23/lcddclk/lcdde/lcdhsync/lcdvsync
。
параметр:
Драйвер дисплея предоставляет для использования 5 функций интерфейса. следующее:
настраивать CPU экраниз Укажите регистрдляобозначениеизценить。
прототип функции
void sunxi_lcd_cpu_write(__u32 sel, __u32 index, __u32 data)
{
sunxi_lcd_cpu_write_index(sel, index);
sunxi_lcd_cpu_wirte_data(sel, data);
}
Шина 8080 оснащена двумя отдельными операциями копирования.
sunxi_lcd_cpu_write_index
Реальностьсейчас Первыйиндивидуальный写действовать,этотчас PIN ступня RS (A1) имеет низкий уровень, а содержимое данных шины является параметром index изценить。sunxi_lcd_cpu_wirte_data
Реальностьсейчасвторойиндивидуальный写действовать,этотчас PIN ступня RS (A1) имеет высокий уровень, а содержимое данных шины является параметром. data изценить。настраивать CPU Экран представляет собой специальный регистр.
void sunxi_lcd_cpu_write_index(__u32 sel,__u32 index)
параметр:
настраивать CPU экранзарегистрироватьсяизценитьдляобозначениеизценить
void sunxi_lcd_cpu_write_data(__u32 sel, __u32 data)
параметр:
Операция чтения
s32 tcon0_cpu_rd_24b_data(u32 sel, u32 index, u32 *data, u32 size)
параметр:
PIN-вывод LCD_GPIO выводит высокий или низкий уровень
s32 sunxi_lcd_gpio_set_value(u32 screen_id, u32 io_index, u32 value)
параметр:
используется только для этого GPIO определениедлявыходизситуация。
Установите PIN-код LCD_GPIO в режим ввода или вывода.
s32 sunxi_lcd_gpio_set_direction(u32 screen_id, u32 io_index, u32 direction)
параметр:
одинчастьэкраннуждатьсяруководитьпервый Разначало операцию, на шаге открытия экрана Функциясередина соответствует LCD_panel_init
Функция, предоставляющая несколько способов экранирования изпервых разначало. для CPU экран, через 8080 Автобус из режима,использованияизда LCDIO(PD,PH)руководитьпервый выдающийся。этотдобрыйпервый режим разначализации, ее возбуждение по шине, определение положения ступня CPU Экран соответствует. для SPI/IIC первый выдающийсяиз LCD,использоватьнезависимыйизIOпервый выдающийся。
общее использование GPIO Аналоговый способ первый выдающийся SPI Экран,Чтосередина SPI Симуляция выглядит так
#define spi_scl_1 sunxi_lcd_gpio_set_value(0, 3, 1) // Конфигурация lcd_gpio_3 для SCL
#define spi_scl_0 sunxi_lcd_gpio_set_value(0, 3, 0)
#define spi_sdi_1 sunxi_lcd_gpio_set_value(0, 2, 1) // Конфигурация lcd_gpio_2 для SDI
#define spi_sdi_0 sunxi_lcd_gpio_set_value(0, 2, 0)
#define spi_cs_1 sunxi_lcd_gpio_set_value(0, 1, 1) // Конфигурация lcd_gpio_1 для CS
#define spi_cs_0 sunxi_lcd_gpio_set_value(0, 1, 0)
static void spi_write_cmd(u8 value)
{
int i;
spi_cs_0;
spi_scl_0;
spi_sdi_0;
spi_scl_1;
spi_scl_0;
for (i = 0; i < 8; i++) {
if (value & 0x80)
spi_sdi_1;
else
spi_sdi_0;
value <<= 1;
spi_scl_1;
spi_scl_0;
}
spi_cs_1;
}
static void spi_write_data(u8 value)
{
int i;
spi_cs_0;
spi_scl_0;
spi_sdi_1;
spi_scl_1;
spi_scl_0;
for (i = 0; i < 8; i++) {
if (value & 0x80)
spi_sdi_1;
else
spi_sdi_0;
value <<= 1;
spi_scl_1;
spi_scl_0;
}
spi_cs_1;
}
Тогда вы можете позвонить spi_write_cmd(u8 value)
и spi_write_data(u8 value)
Функция записывает команду инициализации.
Вы также можете использовать экран инициализации аппаратного SPI, код следующий:
static int spi_init(void)
{
int ret = ‑1;
struct spi_master *master;
master = spi_busnum_to_master(1);
if (!master)
{
lcd_fb_wrn("fail to get master\n");
goto OUT
}
spi_device = spi_alloc_device(master);
if (!spi_device)
{
lcd_fb_wrn("fail to get spi device\n");
goto OUT;
}
spi_device‑> bits_per_word = 8;
spi_device‑> max_speed_hz = 50000000; /*50MHz*/
spi_device‑> mode = SPI_MODE_0;
ret = spi_setup(spi_device);
if (ret)
{
lcd_fb_wrn("Faile to setup spi\n");
goto FREE;
}
lcd_fb_inf("Init spi1:bits_per_word:%d max_speed_hz:%d mode:%d\n", spi_device‑> bits_per_word,
spi_device‑> max_speed_hz, spi_device‑> mode);
ret = 0;
goto OUT;
FREE:
spi_master_put(master);
kfree(spi_device);
spi_device = NULL;
OUT:
return ret;
}
static int comm_out(unsigned int sel, unsigned char cmd)
{
struct spi_transfer t;
if (!spi_device)
return ‑1;
DC(sel, 0);
memset(&t, 0, sizeof(struct spi_transfer));
t.tx_buf = &cmd;
t.len = 1;
t.bits_per_word = 8;
t.speed_hz = 24000000;
return spi_sync_transfer(spi_device, &t, 1);
}
Первый звонок spi_init
пара функций spi
аппаратное обеспечениеруководитьпервый разначалоизменять,spi_init
Функцию можно разделить на несколько этапов. Первый — получить. master
;в соответствии с Реальностьмеждународноеаппаратное обеспечениедажеловить,выбирать spi
(кодсерединавыбирать了 spi1
),еслиэтотодин步返разошибка сказала spi
Не так хорошо, как Конфигурация. Шаг второй наладки spi device
,этотвнутривключатьбольшинствобольшая скорость,spi
Режим передачи содержит количество битов на отдельное слово. большинство используется после настройки spi_setup
Заканчивать master
и device
из ассоциации.
comm_out
это spi
Пример передачи, ядро да spi_sync_transfer
функция.
когда мы Конфигурация Параллельный интерфейс При использовании RGB это не требуется в разделе конфигурации. 24 немного, 18 Бит и 16 Немного, большинство большойразрядность, что это за ссылка pin mux форма, если LCD Сам экран поддерживает коэффициент изразрядности. SoC Поддержите изразрядность меньше, конечно вы можете выбрать только сторону с меньшим изрядностью.
потому чтодля Нетнуждатьсяпервый разначалоизменять,RGB Проблемы с интерфейсом возникают редко, поэтому сосредоточьтесь на lcd из timing изразумности, то есть далcd_ht, lcd_hspw, lcd_hbp, lcd_vt, lcd_vspw и lcd_vbp этотиндивидуальныйсвойствоизрациональность。
Внизлапшадатипичный Параллельный интерфейс RGB sys_config.fex Конфигурация Пример,Чтосерединаиспользоватьнулевой行把Конфигурацияточкастановиться Несколькоиндивидуальныйчасть
;--------------------------------------------------
;Parallel RGB LCD
;--------------------------------------------------
[lcd0]
; Part 1
lcd_used = 1
lcd_driver_name = "default_lcd"
; Part 2
lcd_if = 0
; Part 3
lcd_x = 480
lcd_y = 480
lcd_width = 150
lcd_height = 94
lcd_rb_swap = 0
lcd_dclk_freq = 21
lcd_hv_clk_phase = 1
; Part 4
lcd_backlight = 150
lcd_pwm_used = 1
lcd_pwm_ch = 5
lcd_pwm_freq = 5000
lcd_pwm_pol = 1
; Part 5
lcd_hbp = 80
lcd_ht = 648
lcd_hspw = 8
lcd_vbp = 10
lcd_vt = 522
lcd_vspw = 2
lcd_lvds_if = 0
lcd_lvds_colordepth = 1
lcd_lvds_mode = 0
lcd_frm = 1
lcd_io_phase = 0x0000
lcd_gamma_en = 0
lcd_bright_curve_en = 0
lcd_cmap_en = 0
deu_mode = 0
lcdgamma4iep = 22
smart_color = 90
; Part 6
;LCD_D2-LCD_D7
lcd_gpio_4 = port:PA00<8><0><3><0>
lcd_gpio_5 = port:PA01<8><0><3><0>
lcd_gpio_6 = port:PA02<8><0><3><0>
lcd_gpio_7 = port:PA03<8><0><3><0>
lcd_gpio_8 = port:PA04<8><0><3><0>
lcd_gpio_9 = port:PA05<8><0><3><0>
;LCD_D10-LCD_D15
lcd_gpio_10 = port:PA11<8><0><3><0>
lcd_gpio_11 = port:PA10<8><0><3><0>
lcd_gpio_12 = port:PA08<8><0><3><0>
lcd_gpio_13 = port:PA07<8><0><3><0>
lcd_gpio_14 = port:PA06<8><0><3><0>
lcd_gpio_15 = port:PA09<8><0><3><0>
;LCD_D18-LCD_D23
lcd_gpio_16 = port:PA12<8><0><3><0>
lcd_gpio_17 = port:PA13<8><0><3><0>
lcd_gpio_18 = port:PA14<8><0><3><0>
lcd_gpio_19 = port:PA15<8><0><3><0>
lcd_gpio_20 = port:PB03<8><0><3><0>
lcd_gpio_21 = port:PB02<8><0><3><0>
;LCD_VSYNC, LCD_HSYNC, LCD_DCLK, LCD_DE
lcd_gpio_0 = port:PA18<8><0><3><0>
lcd_gpio_1 = port:PA19<8><0><3><0>
lcd_gpio_2 = port:PA20<8><0><3><0>
lcd_gpio_3 = port:PA21<8><0><3><0>
сериал RGB даотносительнопараллельный RGB Это не означает, что для отправки данных используется только одна линия. Для отправки данных одного пикселя требуется всего несколько тактов. Тогда вот так. RGB интерфейс Сразудасериал RGB。
То же, что и Параллельный интерфейс Как и в случае с RGB, настройку среды проводить не требуется. интерфейс RGB,Когда вы это сделаете, просто установите аппаратное обеспечение и правильно ловите.
этотвнутринуждаться Уведомлениеизда,Для интерфейса,SoC Для завершения одного индивидуального цикла требуется в общей сложности три цикла нуждатьсятри. пиксель, поэтому, когда мы настраиваем время, нуждаться в удовлетворении
lcd_dclk_freq*3=lcd_ht*lcd_vt60
,илиlcd_dclk_freq=lcd_ht/3*lcd_vt*60
Или 3 разlcd_ht
Или 3 разlcd_dclk_freq
。
Экран интерфейса Intel 8080 (также известный как интерфейс MCU) — это очень старый протокол, обычно используемый на экранах с очень маленьким разрешением.
Приколотьизконтрольступняиметь 6 добрый:
Приколоть | Описание функции |
---|---|
Сигнал выбора чипа CS | Определите, работает ли чип. |
Сигнал выбора регистра RS | Низкий указывает на выбор index или status Регистр, высокий уровень означает выбор регистра управления. Реальностьмеждународная сценасерединагенералловить SoC из LCD_DE контакт (контакт включения данных). |
Команда данных WR различает сигнал | То есть записывайте тактовый сигнал, обычно подключаемый к SoC из LCD_CLK ступня. (Низкий уровень означает запись данных) |
Сигнал чтения данных RD | Считайте тактовый сигнал, обычно подключенный к SoC из LCD_HSYNC ступня. (Низкий уровень означает чтение данных) |
RESET | Сброс ЖК-дисплея (сброс с помощью фиксированной серии команд 0 1 0) |
Data | Двусторонние данные |
I8080 в соответствии с Data изчисло据разрядностьинтерфейсиметь 9.08.16.18, даже какая ступня ссылка, даже если разрядность одинаковая, даже из Приколоть не та, тоже хотелось бы учесть из фактора да rgb Формат.