查看: 412|回复: 0
打印 上一主题 下一主题

广东36选7开奖走势图: [原创] 【野火i.MX RT1052】9.i.Maxrt1052之2D图形处理器pxp

[复制链接]

11选5每天赚200元不难 www.ery8a.cn

主题

好友

1563

积分

进士

  • TA的每日心情
    擦汗
    昨天 09:36
  • 签到天数: 133 天

    连续签到: 1 天

    [LV.7]常住居民III

    跳转到指定楼层
    楼主
    发表于 2018-6-16 13:10:46 |只看该作者 |倒序浏览
    本帖最后由 小马哥-1650185 于 2018-6-16 16:37 编辑

         PXP 是 NXP 设计的一种高性能的 2D 图形处理微构架。用于图像数据发送到 LCD 或者 TV编码器之前的数据处理,例如图像缩放、旋转等。为无 SDRAM 和基于 SRAM 的系统提供占用内存最小的图像数据优化和性能。
       ? PXP 能将以下内容组合到一个处理引擎中:
    -图像缩放;
    -图像色彩转换;
    -图像旋转;
    -alpha 混合;
    -颜色键算法;
    -像素校正。
    ? PXP 由多个流水线块组成,共同完成复杂算法或组合操作。

    PXP结构图
    QQ截图20180616161027.jpg


    配置步骤
    ? 选择 PXP 时钟源,配置时钟频率;
    ? 使能 PXP 时钟;
    ? 复位 PXP 外设;
    ? 根据要操作的具体内容配置 PXP 相应控制寄存器;
    ? 设置输入缓冲区配置,包括输入像素格式,输入缓冲区地址等;
    ? 设置输出缓冲区配置,包括输出像素格式,输出模式等;
    ? 如果使用中断需要置位相应中断位,并使能中断号;
    ? 若对中断优先级有要求,配置中断优先级;
    ? 填充要进行数据处理的缓冲数据区;
        将数据区的地址填入 PXP 相应寄存器;
    ? 使能 PXP 进行数据处理。

    官方sdk有如下几个demo

    QQ截图20180616163404.jpg
    气质:
        blend:利用 PXP 进行图形混合操作;
    ? flip: 利用 PXP 进行图形翻转操作;
    ? queue:利用 PXP 命令队列进行图形翻转操作;
    ? rotate:利用 PXP 进行图形旋转操作;
    ? scale:利用 PXP 进行图形缩放操作;  


    通过调用官方库 #include "fsl_pxp.h"配置pxp,
    1. void LCD_PXP_Config(void)
    2. {
    3.     PXP_Init(APP_PXP);

    4.     /* PS configure. */
    5.     const pxp_ps_buffer_config_t psBufferConfig = {
    6.         .pixelFormat = kPXP_PsPixelFormatRGB888,
    7.         .swapByte = false,
    8.         .bufferAddr = (uint32_t)s_psBufferPxp,
    9.         .bufferAddrU = 0U,
    10.         .bufferAddrV = 0U,
    11.         .pitchBytes = APP_PS_SIZE * APP_BPP,
    12.     };

    13.     PXP_SetProcessSurfaceBackGroundColor(APP_PXP, 0U);

    14.     PXP_SetProcessSurfaceBufferConfig(APP_PXP, &psBufferConfig);

    15.     /* Disable AS. */
    16.     PXP_SetAlphaSurfacePosition(APP_PXP, 0xFFFFU, 0xFFFFU, 0U, 0U);

    17.     /* Output config. */
    18.     outputBufferConfig.pixelFormat = kPXP_OutputPixelFormatRGB888;
    19.     outputBufferConfig.interlacedMode = kPXP_OutputProgressive;
    20.     outputBufferConfig.buffer0Addr = (uint32_t)s_frameBuffer[0];
    21.     outputBufferConfig.buffer1Addr = 0U;
    22.     outputBufferConfig.pitchBytes = APP_IMG_WIDTH * APP_BPP;
    23.     outputBufferConfig.width = APP_IMG_WIDTH;
    24.     outputBufferConfig.height = APP_IMG_HEIGHT;

    25.     PXP_SetOutputBufferConfig(APP_PXP, &outputBufferConfig);

    26.     /* Disable CSC1, it is enabled by default. */
    27.     PXP_EnableCsc1(APP_PXP, false);
    28. }
    复制代码
    图像缩放的显示

    1. void APP_Scale(void)
    2. {
    3.     uint8_t curLcdBufferIdx = 1U;

    4.     float downScaleStart = 0.5f;
    5.     float downScaleEnd = 4.0f;
    6.     float downScaleStep = 1.01f;
    7.     float downScaleFact;
    8.     uint16_t outputWidth, outputHeight;

    9.     for (;;)
    10.     {
    11.         for (downScaleFact = downScaleStart; downScaleFact <= downScaleEnd; downScaleFact *= downScaleStep)
    12.         {
    13.             outputWidth = (uint16_t)((float)APP_PS_SIZE / downScaleFact);
    14.             outputHeight = (uint16_t)((float)APP_PS_SIZE / downScaleFact);

    15.             /* Prepare next buffer for LCD. */
    16.             PXP_SetProcessSurfaceScaler(APP_PXP, APP_PS_SIZE, APP_PS_SIZE, outputWidth, outputHeight);
    17.             PXP_SetProcessSurfacePosition(APP_PXP, APP_PS_ULC_X, APP_PS_ULC_Y, APP_PS_ULC_X + outputWidth - 1U,
    18.                                           APP_PS_ULC_Y + outputHeight - 1U);

    19.             outputBufferConfig.buffer0Addr = (uint32_t)s_frameBuffer[curLcdBufferIdx];

    20.             PXP_SetOutputBufferConfig(APP_PXP, &outputBufferConfig);

    21.             PXP_Start(APP_PXP);

    22.             /* Wait for process complete. */
    23.             while (!(kPXP_CompleteFlag & PXP_GetStatusFlags(APP_PXP)))
    24.             {
    25.             }

    26.             PXP_ClearStatusFlags(APP_PXP, kPXP_CompleteFlag);

    27.             /* Now new frame is ready, pass it to LCDIF. */
    28.             ELCDIF_SetNextBufferAddr(APP_ELCDIF, (uint32_t)s_frameBuffer[curLcdBufferIdx]);

    29.             /*
    30.              * The new frame is not loaded untill current frame display finished. So
    31.              * wait until current frame finished.
    32.              */
    33.             ELCDIF_ClearInterruptStatus(APP_ELCDIF, kELCDIF_CurFrameDone);
    34.             while (!(kELCDIF_CurFrameDone & ELCDIF_GetInterruptStatus(APP_ELCDIF)))
    35.             {
    36.             }

    37.             /* Switch to the other LCD buffer. */
    38.             curLcdBufferIdx ^= 1U;
    39.         }
    40.     }
    41. }
    复制代码

    在主函数中,

    1.     /* 初始化LED */
    2.     LED_GPIO_Config();
    3.    
    4.     /* 初始化LCD */
    5.     LCD_Init(LCD_INTERRUPT_DISABLE);
    6.    
    7.     RGB_LED_COLOR_BLUE;

    8.     LCD_PXP_Config();
    9.    
    10.     LCD_Test();

    11.     APP_Scale();
    复制代码

    正常情况下,按照例程中的说明文档连接好 LCD 之后,编译下载PXP 例程到 RT1052 开发板,一个三色的正方形大小在有规律的改变。



    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /5 下一条

    手机版|11选5每天赚200元不难

    GMT+8, 2018-8-12 01:52 , Processed in 0.090827 second(s), 13 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  11选5每天赚200元不难  苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001056号

    Powered by Discuz!

    返回顶部
  • 金正恩夜游新加坡:希望学习新加坡发展经济 2019-01-19
  • 如果火箭夏天没有组建三巨头 保罗就没有降薪的理由了 2019-01-19
  • 最值得年轻人关注的SUV 实力全面曝光 2019-01-19
  • 美国再挑贸易战,中方强力回击,全球市场跌声一片 2019-01-19
  • 穿越千年 感受秦风全国百家重点网媒记者漫步酉阳桃花源 2019-01-18
  • 国务院出台六项举措吸引外资 扩大农业制造业开放 2019-01-18
  • 凝聚着中国智慧中国创造的中国核电将创造更多的中国辉煌。 2019-01-18
  • 回复@老老保老张工:各级计委啊!虽然有时候也征求企业的意见,但仅仅是作为制订计划的参考,权重微乎其微…… 2019-01-17
  • 中年“胖胖”10年前行动不便 动物园为红毛猩猩做中医点穴 2019-01-17
  • 【健康解码】手足口病的这些,年轻爸妈一定要知道 2019-01-17
  • 香港旅游重现精彩前景可期 2019-01-16
  • 中央统战部举办第二期网络人士理论研讨班 2019-01-16
  • 【“健”识早知道】“垃圾睡眠”比失眠还可怕?四招助你一夜好眠! 2019-01-16
  • 本帖关键部分已被残酷删除。 2019-01-16
  • 2017“大地飞歌”门票热销 电子票卡可乘公交地铁 2019-01-15
  • 662| 659| 975| 215| 853| 444| 928| 785| 580| 391|