Chinaunix首页 | 论坛 | 博客
  • 博客访问: 402929
  • 博文数量: 53
  • 博客积分: 1910
  • 博客等级: 中尉
  • 技术积分: 1130
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-10 14:56
文章分类

全部博文(53)

文章存档

2013年(1)

2012年(17)

2011年(33)

2010年(2)

分类: 嵌入式

2012-09-02 17:39:20

IPU(Image Process Unit)应该算是IMX的一个特色,值得仔细研究下,
下面主要是显示端口部分,IDMA CM有空再整理,
/****************
 * Display port *
 ****************/
 包含:
 DC - a display controller,
 DP - a display processor,
 DMFC - a display multi-FIFO controller
 DI - a display interface. The DI is instantiated twice to provide two symmetrical display
    interfaces.
* Display ports channels (P2713)
用于fb driver 的主要有下面3个channel:
分别为 MEM_BG_SYNC(23),MEM_FG_SYNC(27),MEM_DC_SYNC(28)
以及各自对应的DC channel,IDMA channel,alpha channel
如下图:
 
* 共2的DI,每个最多接3个 display,但两个DI 最多可以接4个dispaly
  每个DI 可以接两个的 异步设备,但只能有1个是串行传输数据的
  每个DI 可以接1个同步设备,异步设备如果是同步访问的作为同步设备
* Display Dual Mode
 这个mode 对同步接口的智能显示非常有用,数据只在它发生变化,或者DP 设置改变
 时才传送.

 *  Data starvation errors
   这种错误对于同步显示,发生在某个时间点需要位于DI的数据已经准备好,并被发生到显示器.
   但是不正常的情况可能发生,当系统重载并且IDMAC 不能读SDRAM中的数据并且提供给DMFC
   .Frame boundary errors
   .Error within a frame
   .Anti tearing errors
  * Display port's restrictions (P2717)
   通道使用的一些限制
 
/***************************
 * DC - Display Controller *
 ***************************/
   DC 控制和DI端口往来的flow,决定那些flow当前是active并且每个flow 在什么时候被active.
 对于激活的flow,从预先定义的source取数据,然后发到正确的DI
 
   DC core 使用微码(microcode),microcode是一组过程,过程中包含一些命令,并存储在template's memmory
 对于诸如 new frame, endof frame ,new line 等事件发生时,特定的过程(routine)被执行.
 这些过程指定DC 处理与display相关的data,address,commands 的方法
 比如microcode可以包含,data的mapping, 波形的属性等等.
 
 DC - Display Controller Block Diagram 图如下:

DC 模块中主要部分描述如下:
* New Frame control
 
  对于异步flow ,的new frame 控制,
    根据来自Frame Synchronization Unit(in CM sub-block)的请求完成调度
  对于同步flow, 根据本地时钟(in DI)生成的触发器完成调度
* Antitearing control
  anti tearing 机制就是使用1个信号指示display 刷新帧
* DI arbiter
  它的arbitrate的优先级是固定的:sync flow是最优先,接下来是AHB,最后是IDMAC的异步流
  同一优先级使用round-robin.
  如果有两个sync flow 在不同DI 上,那么可以 设置某个DI优先,通过设置
  DC General Register (IPU_DC_GEN) 的
  SYNC_PRIORITY_1 & SYNC_PRIORITY_5来实现
  DC channel 1和5必须有一个是high priotity (P3291)

* Source arbiter
  如果source 和target DI 被选择好,该单元就将请求和信号发到正确的triple buffer和
  正确的数据源
* Microcode processing unit(MPU)
  到DC的数据可以被附加一些信息,比如new frame,new line,new addr,  这些信息被
  MPU处理
 
  Microcode address generator 这个单元用来计算template memory中关联的过程的地址,
  并且arbitrate 同时发生的event,并选择event 进行处理
  每个event的优先级可以根据CHAN_PRIORITY_CHAN 来设置各通道的各event的prority
* DC template's fields description (P2725)
  Stop : 指示当前命令是过程的最后一条命令
  OPCODE:  命令
  OPRAND: 命令参数
  MAPPING: 指定输入,输出bit的map,该map对应到每个byte的offset和Mask
  WAVEFORM:
* DC template's commands description(P2727)
  主要命令有 HLG,WRG,HLOA,WROA,HLOD,WORD,等等

* 显示控制的生成器 (Display control's generator)
  总线映射单元(Bus Mapping Unit)
  microcode 的MAPPING 字段的值 为0-30 指向
  DC Mapping Configuration Register(IPU_DC_MAP_CONF_X)
  的某1组 MAPPING_PNTR_BYTE0_X, MAPPING_PNTR_BYTE1_X,
          MAPPING_PNTR_BYTE2_X
  MAPPING的值:
   0- no mapping . 32bit 按原来输出
   1- MAPPING_PNTR_BYTE0_0, MAPPING_PNTR_BYTE1_0,
      MAPPING_PNTR_BYTE2_0
      对应X =0
   30- 对应X=29
   然后MAPPING_PNTR_BYTE0_X, MAPPING_PNTR_BYTE1_X,
   MAPPING_PNTR_BYTE2_X , 每个都指向MD_OFFSET_
   MD_MASK_的组合
 
   MD_OFFSET_和MD_MASK_的组合为mapping的格式
   值位于register DC Mapping Configuration Register 15
   (IPU_DC_MAP_CONF_15)开始
   
/**************************************
 *DMFC - Display Multi FIFO Controller*
 **************************************/
它的模块图如下:
 
 
 
 
 管理多通道的FIFOs,主要有下面的client:
  IDMAC - both read and write
  DP - read only
  DC - both read and write
  IC - write only
  AHB - both read and write
 DP和DC 读通道是物理上连接到IDMAC或者IC 通道.
 IC 只能写DMFC.
 当输入来自IC,DMFc替换物理上连接到IDMAC的通道。
 
这些client 的关系从display port 图可以看得更清楚
下面对DMFC module 部分的描述:

 * FIFO allocation to channels
  物理内存被分为8段,对每个通道user必须使用DMFC_ST_ADDR定义在该段的start address。
  每个通道的fifo的size 通过DMFC_FIFO_SIZE 参数来分配
  如果fifo的size 大于IDMAC line的长度,这时对每个通道需要注意一些限制,
  对于每个通道,DMFC 能够存储最大的EOL indication 数如表:
  Table 45-25. DMFC's number of EOL indications(P2741)
  IDMAC 通道23 ,最大fifo size 为IDMAC的3行数据
   如果超过上面的的限制,必须设置wait4eot,但是这样的话会当DMFC 分析数据优先于
   发送数据时,会有性能的影响。
   通过设置DMFC_BURST_SIZE来设置IDMAC的burst size,必须对齐到2的指数值.
   并且burst size不能大于fifo的size
 * Arbitration between channels
   在各通道间的arbitration 完全硬件控制,IDMAC 通道最高优先级,然后是同步通道和异步通道

 * Watermark
   对每个通道,DMFC 能够生成watermark 信号, 信号发送到IDMAC 并且动态增加通道的优先级在IDMAC 仲裁的时候
   watermark功能通过DMFC_WM_EN使能,watermark信号在fifo 上的burst 加上已经请求的burst小于
   DMFC_WM_SET bit 所指定的值时被设置,反之清除

* DMFC IC Interface Control Register (IPU_DMFC_IC_CTRL) 中dmfc_ic_in_portDMFC input port
   当数据来自IC,那么IC通道替换IDMAC的通道连接到DMFC. 下面的值时可被IC通道替换的IDMAC通道
   000 CH28
   001 CH41
   100 CH23
   101 CH27
   110 CH24
   111 CH29
   比如设置为ch23时,如果数据从IC发来时,原来连接到DMFC上的CH23被替换成IC通道
 
   注意这句:
    The burst size of the channel coming from the IC should always be programmed to 4 words.
 
/*********************
 * Display Processor *
 *********************/
 DP处理图像发送到diplay的优先级别。
   1. DP 主要任务是执行2平面的复合。DP有2个input FIFOs用来放
     full plane和partial 平面。
   2. DP 还执行一些图像增强功能,比如gamma校正,颜色空间转换(RGB<->YUV)
DP 模块图如下:
 
 
  * The DP programming model
   DP 支持3个flow,1个同步flow,2个异步flow. 每个flow有一组register.
   DP_COM_CONF, 
     DP_COM_CONF_SYNC,
     DP_COM_CONF_ASYNC0,
     DP_COM_CONF_ASYNC1.
  * full pannel 和partial pannel:
    下图中关于partial and full pannel 通过IDMAC通道的FW,FH参数设置。
 
 

  * Combining Unit
    主要的复合操作有:
    local alpha blending,
    global alpha blending,
    use of key color.
    order of the planes (full is presented over the partial plane and vice versa)
    通过DP_COM_CONF Register设置复合mode,
    OP = BG*(1 - a) + FG*a
    register中DP_GWSEL bit定义BG pixel是选择full 还是partial plane.
    global Alpah被写到DP_GWAV field,
    color keying 设置定义在 DP_GWCKR, DP_GWCKG, DP_GWCKB

  * Color Space Conversion unit - CSC
    S=Ax+B
    x -> Clip(Round(S* 2^E)), S=Ax+B
    E is an exponent, assuming one of the following values: -1,0,1,2 (allowing weights up to 8).
    P2747 转换的矩阵和公式
  * Gamut mapping
   如果color 变换产生的值超过允许范围,就必须map回允许范围,支持2种算法,由 GAMUT_SAT_EN控制

  * Gamma correction
   DP_GAMMA_S_SYNC  和 DP_GAMMA_C_SYNC => gamma校正控制register

  * DC interface
    执行两个任务,
    1. 通过得到来自DC的请求,然后经过DP启动flow ,并且当DP准备好了就发送new frame请求给IDMAC
    2. 控制DP输出FIFO 并且通过握手机制发送数据到DC
  *  DP's flows management
   
 
阅读(8998) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~