原创 I.MX6Q处理器HDMI驱动编写

2015-11-21 13:45 1152 20 20 分类: MCU/ 嵌入式 文集: SylixOS BSP开发

SDK中的HDMI代码拷贝到bsp目录下,这里包含ipu目录和hdmi目录两个目录,hdmi的测试程序会调用ipu的内容。

1.修改代码中的头文件,加入如下内容:

#define __SYLIXOS_KERNEL
#include "config.h"
#include <linux/compat.h>
#include "SylixOS.h"

2.修改代码中的printfprintk

3.修改makefileipuhdmi的代码加入makefilesrcs源码文件,编译修改文件使之无错误提示。

4.hdmi_test例程加入bspInit文件,删除与音频相关的内容和设置,由于中断设置也仅仅与音频数据相关,因此将中断代码也一并删除。

5.添加hdmi的时钟设置代码如下:

myHDMI_info.video_mode->mPixelClock = 2700;     /*  added by  --sylixos */

在文件../hdmi_tx_phy.c中的函数hdmi_phy_configure内可以看到设置设置可选范围,包含252027005400720074251080014850

6.使用API_VmmDmaAllocAlign函数获取一块连续内存用作framebuffer,代码如下:

LCD_pFbBase = API_VmmDmaAllocAlign(1600 * 900 * 2,  /*  调试用显示器大小  */

                       4 * 1024 * 1024); /*  4 MB 对齐地址  */

    if (LCD_pFbBase == LW_NULL) {

        return  (PX_ERROR);

    }

将代码disp_mem = CH23_EBA0;更换成disp_mem = LCD_pFbBase;操作地址LCD_pFbBase既可以操作framebuffer。这是使用如下代码可以在裸机程序中测试物理设置是否正常。

memset((void *)disp_mem, 0x88, 2 * 360 * 640);
memset((void *)(disp_mem + 0x96000), 0xAA, 2 * 360 * 640);
memset((void *)(disp_mem + 0x12C000), 0xFF, 2 * 360 * 640);
memset((void *)(disp_mem + 0x1C2000), 0x00, 2 * 360 * 640);

7.建立framebuffer

imx283中拷贝lcd fb的驱动文件,只需要保留其中的opencloseGetVaiInfoGetScrInfoDevCreate函数即可。修改其中的参数。将_gHdmiDev.LCDD_pvFbBase = LCD_pFbBase;并在GetScrInfo函数中付给系统此地址指针。

8.此时将裸奔程序和DevCreate一起运行,既可以完成fb0设备的出现,此时可以使用/dev/fb0操作显示器显示需要的画面

9.整理代码,使之符合驱动规范和代码规范。

10.目前的状态仅仅是实现了简单的现实,音频、显示器参数获取功能还没有添加,后续根据需要逐步完善。

文章评论0条评论)

登录后参与讨论
我要评论
0
20
关闭 站长推荐上一条 /2 下一条