导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

    还是AMOLED MIPI屏实时亮度调节的问题

    T Series
    2
    2
    899
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • P
      planevina LV 3 最后由 xiaowenge 编辑

      我在用T113-s3 ,tina 2.x ,驱动mipi的amoled屏,并尝试实时调整亮度

      首先我绑定了 .set_bright函数
      static int lcd_set_bright(u32 sel, u32 bright)
      {
      u8 para2 = bright & 0xff;
      sunxi_lcd_dsi_dcs_write_2para(sel, 0x51, 0x00, para2);
      return 0;
      }
      然后一调用亮度调节,屏幕亮度虽然调节了但立即卡死了

      经查询得知亮度调节需要在LP模式下进行
      于是我修改为
      static int lcd_set_bright(u32 sel, u32 bright)
      {
      sunxi_lcd_dsi_mode_switch(sel, 0, 1); //进入LP模式
      u8 para2 = bright & 0xff;
      sunxi_lcd_dsi_dcs_write_2para(sel, 0x51, 0x00, para2);
      sunxi_lcd_dsi_mode_switch(sel, 0, 0); //进入高速模式
      return 0;
      }

      症状依旧。
      在追踪了sunxi_lcd_dsi_mode_switch 函数后我发现
      de/lowlever_v2x/de_dsi.c 文件里面根本没实现 dsi_mode_switch函数,如下
      __s32 dsi_mode_switch(__u32 sel, __u32 cmd_en, __u32 lp_en)
      {
      return 0;
      }

      反而是 de/lowlever_v2x/de_dsi_28.c文件里面实现了
      __s32 dsi_mode_switch(__u32 sel, __u32 cmd_en, __u32 lp_en)
      {
      /for video mode only/
      /switch between low power mode and high speed mode/
      dsi_dev[sel]->dsi_cmd_ctl.bits.gen_sw_0p_tx_lp = lp_en;
      dsi_dev[sel]->dsi_cmd_ctl.bits.gen_sw_1p_tx_lp = lp_en;
      dsi_dev[sel]->dsi_cmd_ctl.bits.gen_sw_2p_tx_lp = lp_en;
      dsi_dev[sel]->dsi_cmd_ctl.bits.gen_sr_0p_tx_lp = lp_en;
      dsi_dev[sel]->dsi_cmd_ctl.bits.gen_sr_1p_tx_lp = lp_en;
      dsi_dev[sel]->dsi_cmd_ctl.bits.gen_sr_2p_tx_lp = lp_en;
      dsi_dev[sel]->dsi_cmd_ctl.bits.dcs_sw_0p_tx_lp = lp_en;
      dsi_dev[sel]->dsi_cmd_ctl.bits.dcs_sw_1p_tx_lp = lp_en;
      dsi_dev[sel]->dsi_cmd_ctl.bits.dcs_sr_0p_tx_lp = lp_en;
      dsi_dev[sel]->dsi_cmd_ctl.bits.max_rd_pkg_size_lp = lp_en;
      dsi_dev[sel]->dsi_cmd_ctl.bits.gen_lw_tx_lp = lp_en;
      dsi_dev[sel]->dsi_cmd_ctl.bits.dcs_lw_tx_lp = lp_en;

      /*command mode use dbi interface*/
      /*video mode use dpi interface*/
      if (cmd_en) {
      	dsi_dev[sel]->dsi_cfg1.bits.dpi_src = 0;
      	dsi_delay_ms(16);
      	dsi_dev[sel]->dsi_vid_ctl0.bits.video_mode_en = 0;
      	dsi_dev[sel]->dsi_cmd_ctl.bits.cmd_mode_en = 1;
      } else {
      	dsi_dev[sel]->dsi_cmd_ctl.bits.cmd_mode_en = 0;
      	dsi_dev[sel]->dsi_vid_ctl0.bits.video_mode_en = 1;
      	dsi_dev[sel]->dsi_cfg1.bits.dpi_src = 1;
      }
      return 0;
      

      }

      但问题在于,T113 S3 属于 de_dsi.c ,他编译不调用28的那个版本。
      我尝试将28的那个版本的函数拷贝过去,编译出错,因为结构体不一样,de_dsi.c 这边的结构体没有那几个成员,不如说全部都不一样

      问题进入死胡同,后来我在论坛搜索到之前大佬2年前的帖子
      https://bbs.aw-ol.com/topic/1852/oled的mipi屏幕实时亮度改变问题/5?_=1729702801269&lang=zh-CN

      大佬后来用中断实现了调节过程,但由于缺乏几个函数,我对中断这种底层东西一无所谓
      就想问问,目前T113 平台要调节OLED亮度,要怎样才能实现呢

      感激不尽

      T 1 条回复 最后回复 回复 引用 分享 0
      • T
        TEVET LV 7 @planevina 最后由 编辑

        @planevina 仿照ESD扫描读取寄存器的方式修改即可。 我帖子中有修改后调用的过程,可以试试看。目前点的几个OLED都没问题。

        1 条回复 最后回复 回复 引用 分享 0
        • Moved from MR Series by  xiaowenge xiaowenge 
        • 1 / 1
        • First post
          Last post

        Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

        行为准则 | 用户协议 | 隐私权政策