转载地址:https://www.cnblogs.com/jamiechen/p/4186005.html

/// A panel struct type used to specify the panel attributes, and settings from Board layout
typedef struct
{
const char *m_pPanelName; ///< PanelName 屏的名称
//
// Panel output
//
MS_U8 m_bPanelDither :1; ///< PANEL_DITHER, keep the setting

  //Sub BK VOP_36(不同芯片,此值可能不一样),bPanelDither=1->0x2D05,bPanelDither=0->0x2D00
APIPNL_LINK_TYPE m_ePanelLinkType :4; ///< PANEL_LINK

  //Sub BK VOP_44(不同芯片,此值可能不一样),LVDS=0x11,RSDS=0x00

///
// Board related setting
///
MS_U8 m_bPanelDualPort :1; ///< VOP_21[8], MOD_4A[1], PANEL_DUAL_PORT, refer to m_bPanelDoubleClk

MS_U8 m_bPanelSwapPort :1; ///< MOD_4A[0], PANEL_SWAP_PORT, refer to "LVDS output app note" A/B channel swap

MS_U8 m_bPanelSwapOdd_ML :1; ///< PANEL_SWAP_ODD_ML

  //蒙上灰
MS_U8 m_bPanelSwapEven_ML :1; ///< PANEL_SWAP_EVEN_ML

  //蒙上灰
MS_U8 m_bPanelSwapOdd_RB :1; ///< PANEL_SWAP_ODD_RB

  //缺色
MS_U8 m_bPanelSwapEven_RB :1; ///< PANEL_SWAP_EVEN_RB

  //缺色

MS_U8 m_bPanelSwapLVDS_POL :1; ///< MOD_40[5], PANEL_SWAP_LVDS_POL, for differential P/N swap

  //正负极性切换
MS_U8 m_bPanelSwapLVDS_CH :1; ///< MOD_40[6], PANEL_SWAP_LVDS_CH, for pair swap

  //双通道切换
MS_U8 m_bPanelPDP10BIT :1; ///< MOD_40[3], PANEL_PDP_10BIT ,for pair swap

MS_U8 m_bPanelLVDS_TI_MODE :1; ///< MOD_40[2], PANEL_LVDS_TI_MODE, refer to "LVDS output app note"

  //说明当前的屏是不是TI mode

///
// For TTL Only
///
MS_U8 m_ucPanelDCLKDelay; ///< PANEL_DCLK_DELAY

MS_U8 m_bPanelInvDCLK :1; ///< MOD_4A[4], PANEL_INV_DCLK

MS_U8 m_bPanelInvDE :1; ///< MOD_4A[2], PANEL_INV_DE

MS_U8 m_bPanelInvHSync :1; ///< MOD_4A[12], PANEL_INV_HSYNC

MS_U8 m_bPanelInvVSync :1; ///< MOD_4A[3], PANEL_INV_VSYNC

///

// Output driving current setting
///
// driving current setting (0x00=4mA, 0x01=6mA, 0x02=8mA, 0x03=12mA)
MS_U8 m_ucPanelDCKLCurrent; ///< define PANEL_DCLK_CURRENT

  //Sub VOP_??[6:7](不同芯片,此值可能不一样),
MS_U8 m_ucPanelDECurrent; ///< define PANEL_DE_CURRENT

  //Sub VOP_??[4:5](不同芯片,此值可能不一样),
MS_U8 m_ucPanelODDDataCurrent; ///< define PANEL_ODD_DATA_CURRENT

  //Sub VOP_??[2:3](不同芯片,此值可能不一样),
MS_U8 m_ucPanelEvenDataCurrent; ///< define PANEL_EVEN_DATA_CURRENT

  //Sub VOP_??[0:1](不同芯片,此值可能不一样),

///
// panel on/off timing
///
MS_U16 m_wPanelOnTiming1; ///< time between panel & data while turn on power

MS_U16 m_wPanelOnTiming2; ///< time between data & back light while turn on power

MS_U16 m_wPanelOffTiming1; ///< time between back light & data while turn off power

MS_U16 m_wPanelOffTiming2; ///< time between data & panel while turn off power

///

// panel timing spec.
///
// sync related
MS_U8 m_ucPanelHSyncWidth; ///< VOP_01[7:0], PANEL_HSYNC_WIDTH

MS_U8 m_ucPanelHSyncBackPorch; ///< PANEL_HSYNC_BACK_PORCH, no register setting, provide value for query only,

///< not support Manuel VSync Start/End now
///< VOP_02[10:0] VSync start = Vtt - VBackPorch - VSyncWidth
///< VOP_03[10:0] VSync end = Vtt - VBackPorch
MS_U8 m_ucPanelVSyncWidth; ///< define PANEL_VSYNC_WIDTH

MS_U8 m_ucPanelVBackPorch; ///< define PANEL_VSYNC_BACK_PORCH

// DE related

MS_U16 m_wPanelHStart; ///< VOP_04[11:0], PANEL_HSTART, DE H Start (PANEL_HSYNC_WIDTH + PANEL_HSYNC_BACK_PORCH)

MS_U16 m_wPanelVStart; ///< VOP_06[11:0], PANEL_VSTART, DE V Start

MS_U16 m_wPanelWidth; ///< PANEL_WIDTH, DE width (VOP_05[11:0] = HEnd = HStart + Width - 1)

MS_U16 m_wPanelHeight; ///< PANEL_HEIGHT, DE height (VOP_07[11:0], = Vend = VStart + Height - 1)

// DClk related

MS_U16 m_wPanelMaxHTotal; ///< PANEL_MAX_HTOTAL. Reserved for future using.
MS_U16 m_wPanelHTotal; ///< VOP_0C[11:0], PANEL_HTOTAL
MS_U16 m_wPanelMinHTotal; ///< PANEL_MIN_HTOTAL. Reserved for future using.

MS_U16 m_wPanelMaxVTotal; ///< PANEL_MAX_VTOTAL. Reserved for future using.
MS_U16 m_wPanelVTotal; ///< VOP_0D[11:0], PANEL_VTOTAL
MS_U16 m_wPanelMinVTotal; ///< PANEL_MIN_VTOTAL. Reserved for future using.

MS_U8 m_dwPanelMaxDCLK; ///< PANEL_MAX_DCLK. Reserved for future using.
MS_U8 m_dwPanelDCLK; ///< LPLL_0F[23:0], PANEL_DCLK ,{0x3100_10[7:0], 0x3100_0F[15:0]}
MS_U8 m_dwPanelMinDCLK; ///< PANEL_MIN_DCLK. Reserved for future using.

///< spread spectrum
MS_U16 m_wSpreadSpectrumStep; ///< move to board define, no use now.
MS_U16 m_wSpreadSpectrumSpan; ///< move to board define, no use now.

MS_U8 m_ucDimmingCtl; ///< Initial Dimming Value
MS_U8 m_ucMaxPWMVal; ///< Max Dimming Value
MS_U8 m_ucMinPWMVal; ///< Min Dimming Value

MS_U8 m_bPanelDeinterMode :1; ///< define PANEL_DEINTER_MODE, no use now
E_PNL_ASPECT_RATIO m_ucPanelAspectRatio; ///< Panel Aspect Ratio, provide information to upper layer application for aspect ratio setting.
/*
*
* Board related params
*
* If a board ( like BD_MST064C_D01A_S ) swap LVDS TX polarity
* : This polarity swap value =
* (LVDS_PN_SWAP_H<<8) | LVDS_PN_SWAP_L from board define,
* Otherwise
* : The value shall set to 0.
*/
MS_U16 m_u16LVDSTxSwapValue;
APIPNL_TIBITMODE m_ucTiBitMode; ///< MOD_4B[1:0], refer to "LVDS output app note" 当颜色不对的时候,就可以调整这个设定来试验
APIPNL_OUTPUTFORMAT_BITMODE m_ucOutputFormatBitMode; //Define panel output format bit mode.The default value is 10bit,because 8bit panel can use 10bit config and 8bit config.But 10bit panel(like PDP panel) can only use 10bit config.And some PDA panel is 6bit.

MS_U8 m_bPanelSwapOdd_RG :1; ///< define PANEL_SWAP_ODD_RG
MS_U8 m_bPanelSwapEven_RG :1; ///< define PANEL_SWAP_EVEN_RG
MS_U8 m_bPanelSwapOdd_GB :1; ///< define PANEL_SWAP_ODD_GB
MS_U8 m_bPanelSwapEven_GB :1; ///< define PANEL_SWAP_EVEN_GB

  //Sub MOD_??[2:5],Odd_RG:bit3,Odd_GB:bit2,Even_RG:bit5,Even_GB:bit4

/**
Others
*/
MS_U8 m_bPanelDoubleClk :1; ///< LPLL_03[7], define Double Clock ,LVDS dual mode
MS_U32 m_dwPanelMaxSET; ///< define PANEL_MAX_SET
MS_U32 m_dwPanelMinSET; ///< define PANEL_MIN_SET

  //这个值会限定FPLL LOCK的范围,也就是LPLL_D5D6D7

  //1.reg_frame_lpll_en:LPLL_18[3]=0

  //2.reg_lpll_set调整:手动调整SET(BK31_1E,1F,20)值,观察OSD是否异常找出Max/Min SET,写入代码需要除2.
APIPNL_OUT_TIMING_MODE m_ucOutTimingMode; ///<Define which panel output timing change mode is used to change VFreq for same panel 目前有三种选择:E_PNL_CHG_DCLK, E_PNL_CHG_HTOTAL, E_PNL_CHG_VTOTAL, 后面两者都是为了保持DCLK不变而修改HTOTAL/VTOTAL.
MS_U8 m_bPanelNoiseDith :1; ///< PAFRC mixed with noise dither disable
PanelType;

【名词解释】

Port swap:

  只用在dual port (FHD在板子上有两组LVDS),将两个LVDS互换

Channel swap:

  一个LVDS里面有很多channel,

     6bit: CH0  CH1  CH2  CLK

      8bit: CH0  CH1  CH2  CLK  CH3

    10bit: CH0  CH1  CH2  CLK  CH3  CH4

  以8bit为例,Channel swap enable后会有以下行为:

    CH0 <-> CH3、CH1 <-> CLK、CH2 <-> CH2 ,就是水平交换

Polarity swap:

  每个Channel 都有 Even(P)、Odd(M) 两个极性,Polarity swap就是将每个channel里的两个极性交换。以8bit为例:

  CH0P <-> CH0M,CH1P <-> CH1M,CH2P <-> CH2M,CLKP <-> CLKM,CH3P <-> CH3M

【配置介绍】 文档位置:《Panel.c》

(1) 屏的接口类型设置 

  如果屏的接口类型为LVDS,则相关代码如下:

  LINK_LVDS,  //BOOL m_ePanelLinkType :2;         //PANEL_LINK

(2) 屏接口数据线的位数设置

  如果屏的接口数据线为8位双口,则相关代码如下:

  1,   //BOOL m_bPanelDither :1;   //PANEL_DITHER // 8/6 bits panel [0:6   1:8 bits panel]

  1,  //BOOL m_bPanelDualPort :1;  //PANEL_DUAL_PORT    0 // [0:单口  1:双口]

  寄存器地址:MOD_4A[1](0x3200的94的第1bit)

 (3) 屏的尺寸设置(宽度x高度)

  如果屏的尺寸为1024X768,则相关代码如下:

1024,           //WORD m_wPanelWidth;           //PANEL_WIDTH

  768,        //WORD m_wPanelHeight;              //PANEL_HEIGHT

 (4) 用于定义屏的高低(MSB/LSM)位奇偶特性交换;

  0, //BOOL m_bPanelSwapOdd_ML :1;   //PANEL_SWAP_ODD_ML

  0, //BOOL m_bPanelSwapEven_ML :1;   //PANEL_SWAP_EVEN_ML

(5) 用于定义屏的红蓝奇偶特性交换

  0,          //BOOL m_bPanelSwapOdd_RB   :1;   //PANEL_SWAP_ODD_RB

  0,          //BOOL m_bPanelSwapEven_RB  :1;   //PANEL_SWAP_EVEN_RB

(6) 交换位选择(A,B口交换)

  0,  // swap port

  如果此屏为单口,则这个值一定要置1,双口就无所谓,0或1都可以,不影响.对应寄存器(0x3200的94的第0bit)

(7) TI_MODE反就改这两个

  1,          //BOOL m_bPanelLVDS_TI_MODE :1;   //PANEL_LVDS_TI_MODE

  对应寄存器(PANEL_LVDS_TI_MODE:MOD_40[2]即0x3200的80的第2bit;)

(8) 

  TI_8BIT_MODE,              //8bit  ti bit mode 屏的位数选择,8位,10位,6位,选择对应的即可

  8bit ti bit mode: 0x3200的96的第0、1bit,

  0,1bit空位10bit屏

  0空,1有是8bit屏

  0有,1有是10bit屏

(9) 定义影像行方向和场方向的起始位置

  104+24,      //WORD m_wPanelHStart; //PANEL_HSTART             (PANEL_HSYNC_WIDTH + PANEL_HSYNC_BACK_PORCH)

  3+6,        //WORD m_wPanelVStart; //PANEL_VSTART             (PANEL_VSYNC_WIDTH + PANEL_VSYNC_BACK_PORCH)

  (HSTART参照寄存器sub_bank=10,  102F08)   PANEL_HSTART=((U16)PANEL_HSYNC_WIDTH+PANEL_HSYNC_BACK_PORCH)

  (VSTART参照寄存器sub_bank=10,  102F0C)   PANEL_VSTART=((U16)PANEL_VSYNC_WIDTH + PANEL_VSYNC_BACK_PORCH)

(10)  此值相当于HSTART和VSTART,有时候屏未满屏就可以改动此值. 

  24,   //BYTE m_ucPanelHSyncBackPorch;   //PANEL_HSYNC_BACK_PORCH

  6,   //BYTE m_ucPanelBackPorch;   //PANEL_VSYNC_BACK_PORCH

(11) HTOTAL:单位时间行扫描的次数

  2048, //WORD m_wPanelMaxHTotal;   //PANEL_MAX_HTOTAL

  1344, //WORD m_wPanelHTotal;   //PANEL_HTOTAL

  1054, //WORD m_wPanelMinHTotal;   //PANEL_MIN_HTOTAL

  此值非常关键,常影响屏的显示效果,如上下缺线、白屏、闪动、VGA某些模式拉丝、OSD底部显示缺边等都可以调它)

  (HTOTAL参照寄存器sub_bank=10,  102F18, 102F19)

(12) VTOTAL:单位时间列扫描的次数

  1024,    //WORD m_wPanelMaxVTotal;   //PANEL_MAX_VTOTAL

  806,     //WORD m_wPanelVTotal;              //PANEL_VTOTAL

  776,   //WORD m_wPanelMinVTotal;   //PANEL_MIN_VTOTAL

  (VTOTAL参照寄存器sub_bank=10,  102F1A, 102F1B)

(13) 

  81,   //DWORD m_dwPanelMaxDCLK;   //PANEL_MAX_DCLK

  65,     //DWORD m_dwPanelDCLK;              //PANEL_DCLK

  50,   //DWORD m_dwPanelMinDCLK;   //PANEL_MIN_DCLK

  无信号时,显示不正确,一般调整这里可以解决,还有当PC是好的,其他信号源的台标显示不正常闪动,就可以改动此值.

  PANEL_DCLK= (((U32)PANEL_HTOTAL*PANEL_VTOTAL*60)/1000000) Bank 31的20

(14) 定义同步信号的行宽、列高

  104,         //BYTE m_ucPanelHSyncWidth;   //PANEL_HSYNC_WIDTH

  3,          //BYTE m_ucPanelVSyncWidth;   //PANEL_VSYNC_WIDTH

  PANEL_HSYNC_WIDTH和PANEL_VSYNC_WIDTH有时候图象只显示了一半,就可以调这两个,V方向和H方向.

(15) 屏的时钟和极性

0x00,       //BYTE m_ucPanelDCLKDelay;   //PANEL_DCLK_DELAY

0,          //BOOL m_bPanelInvDCLK  :1;   //PANEL_INV_DCLK

0,          //BOOL m_bPanelInvDE        :1;   //PANEL_INV_DE

0,          //BOOL m_bPanelInvHSync :1;   //PANEL_INV_HSYNC

0,          //BOOL m_bPanelInvVSync :1;   //PANEL_INV_VSYNC

  这些是屏的时钟和极性 ,比如有些屏某些位置会出现那种雪花点或躁点,你就可以试着调这里.

(16)  屏的上电/下电时序

  30,   //BYTE m_ucPanelOnTiming1; //PANEL_ON_TIMING1  // time between panel & data while turn on power

  500, //BYTE m_ucPanelOnTiming2; //PANEL_ON_TIMING2  // time between data & back light while turn on power

  150, //BYTE m_ucPanelOffTiming1; //PANEL_OFF_TIMING1  // time between back light & data while turn off power

  30,  //BYTE m_ucPanelOffTiming2; //PANEL_OFF_TIMING2 // time between data & panel while turn off power

  当时序不匹配的时候可能出现上/下电白屏

(17)  屏的电流

  // driving current setting (0x00=4mA, 0x01=6mA, 0x02=8mA, 0x03=12mA)

  0x01,   //BYTE m_ucPanelDCKLCurrent; //PANEL_DCLK_CURRENT // DCLK current

  0x01,   //BYTE m_ucPanelDECurrent;  //PANEL_DE_CURRENT   // DE signal current

  0x01,   //BYTE m_ucPanelODDDataCurrent;//PANEL_ODD_DATA_CURRENT//odd data current

  0x01,  //BYTEm_ucPanelEvenDataCurrent;//PANEL_EVEN_DATA_CURRENT//evendata current

  有些屏需要的电流要大,你就可以在这里修改

(18) 

  MS_U32 m_dwPanelMaxSET;         ///<  define PANEL_MAX_SET

  MS_U32 m_dwPanelMinSET;         ///<  define PANEL_MIN_SET

  SET=216*5242888*8/(7*DCLK)

  注意DCLK的值要设置为单组的DCLK的值,即如果是双位屏,要除以2

(19) 调节三星屏的时候以及6BIT屏有时要用到

  OUTPUT_10BIT_MODE,          //10bit ti bit mode

  这个调节三星屏的时候以及6BIT屏有时要用到 具体寄存器为:0x3200的92的bit6,bit7

(20) 选择屏的clock数

  1,          //   double clock

  如果是双位屏要设置为1,单位屏选0,否则屏会显示不正常,0x3100的06

附录:MSTAR系列寄存器值

Chance favors the prepared mind.

【屏类型结构体定义PanelType】 文档位置:《apiPNL.h》相关推荐

  1. 做结构化怎样选择文档类型

    有朋友问,公司决定使用结构化写作的方法来编写公司和设备的文档资料,那应该选择什么文档类型呢?怎样才能够产出有质量的文档? 今天就这个话题,谈谈我的看法. - 1 - 什么是文档类型 在结构化写作中,文 ...

  2. OpenGL ES着色器语言之语句和结构体(官方文档第六章)内建变量(官方文档第七、八章)...

    OpenGL ES着色器语言之语句和结构体(官方文档第六章) OpenGL ES着色器语言的程序块基本构成如下: 语句和声明 函数定义 选择(if-else) 迭代(for, while, do-wh ...

  3. Go 学习笔记(14)— 结构体定义、实例化、初始化、匿名结构体、结构体访问、结构体作为形参、结构体指针

    Go 语言中没有 "类" 的概念,也不支持 "类" 的继承等面向对象的概念.Go 语言不仅认为结构体能拥有方法,且每种自定义类型也可以拥有自己的方法. 1. 结 ...

  4. C#中结构体定义并转换字节数组

    ref: https://www.cnblogs.com/dafanjoy/p/7818126.html C#中结构体定义并转换字节数组 最近的项目在做socket通信报文解析的时候,用到了结构体与字 ...

  5. 结构体定义小的放前面_编程C语言进阶篇——自定义数据类型:结构体

    一.结构体 定义方法: 结构名 变量名 特点: 两个同类型的结构变量可以相互赋值,但是结构变量之间不能使用"<","=="等运算符,如果使用则需要对运算符 ...

  6. C/C++中struct结构体定义变量的3种方法及初始化

    本博客整理自http://blog.csdn.net/zunfo/article/details/51494631 1.struct结构体定义 1.1.先定义结构体,然后再定义结构体变量 struct ...

  7. C++ 线性表的结构体定义(顺序表和链式表)

    线性表的结构体定义: 1.顺序表的结构体定义 typedef struct {int data[maxSize];int length;} Sqlist; 2.单链表结点的结构体定义 typedef ...

  8. C语言结构体学生基本资料,用结构体定义10个学生基本信息

    用结构体定义10个学生基本信息,用到结构体.子函数.文件等的相关知识. /* ************************************************* 2.1.用结构体定义1 ...

  9. RadarApp结构体定义

    消息结构体定义及说明 数据类型 一.帧类型定义 1.1 控制帧 1.1.1 控制帧帧头定义 1.1.2 控制帧类型(ucDataType) 1.2 数据帧类型 1.2.1 数据帧帧头定义 1.2.2 ...

  10. c++结构体总结(结构体定义,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,结构体中 const使用场景)

    看完b站黑马程序员之后的借鉴和笔记 1.什么是结构体,有什么作用? 在C/C++中,结构体是用户定义的数据类型.它可以把几种不同类型的数据项集合成结构体这样一个单一类型. 2. 结构体定义和使用 #i ...

最新文章

  1. SAP HANA是什么
  2. 一阶电路误差分析_读图学电路原理为什么交流调理电路会产生滞后,直流偏置又是什么...
  3. Rafy 框架 - 幽灵插件(假删除)
  4. mysql断网_断网的情况上如何访问本机的mysql
  5. 使用 js 设置组合快捷键,支持多个组合键定义,还支持 React
  6. DolphinPHP
  7. CodeForces 48C D - The Race (Fraction,数学)
  8. 小数点保留若干位小数 %.*f
  9. Java BufferedReader
  10. setTimeout/setInterval伪异步
  11. 解决Linux操作系统下SSH等终端乱码问题
  12. JS中Ajax的方法和应用
  13. java调用高拍仪获取图像_使用Java调用摄像头进行拍照源码
  14. 用javascript源码打印页面
  15. 《阵列信号处理及MATLAB实现》绪论、矩阵代数相关内容总结笔记
  16. 《张志俊揭秘太极拳》读书摘编
  17. Meta-RL之Optimization as a Model for Few-Shot Learning
  18. 领导问“你这块表多少钱?”缺心眼说价钱,不懂这4个话术惹麻烦
  19. 《2015互联网安全年报》,移动端成重灾区,黑灰产日益成熟
  20. 【C++】抽象和类(2)--如何实现类成员函数?

热门文章

  1. AutoSar FlashDriver
  2. android 树莓派 图片,Android Things:树莓派3上手就是这么简单
  3. python学生成绩管理系统实验报告心得_学生成绩管理系统心得体会
  4. 【c++】c++基础入门
  5. 工业软件巨头解读:西门子是一家软件公司,达索是一家“3D体验”公司
  6. 地球子午圈和卯酉圈曲率半径计算公式
  7. Zemax中控制曲率半径
  8. 【多多情报通】看完让人焕然大悟的6种拼多多店铺玩法
  9. 哈曼推出Savari MECWAVE:超低时延边缘计算平台提供交钥匙式互联服务
  10. 计算机英语读法语音,英语语音朗读技巧