将SDK中的HDMI代码拷贝到bsp目录下,这里包含ipu目录和hdmi目录两个目录,hdmi的测试程序会调用ipu的内容。
1.修改代码中的头文件,加入如下内容:
#define __SYLIXOS_KERNEL #include "config.h" #include <linux/compat.h> #include "SylixOS.h" |
2.修改代码中的printf为printk;
3.修改makefile将ipu和hdmi的代码加入makefile的srcs源码文件,编译修改文件使之无错误提示。
4.将hdmi_test例程加入bspInit文件,删除与音频相关的内容和设置,由于中断设置也仅仅与音频数据相关,因此将中断代码也一并删除。
5.添加hdmi的时钟设置代码如下:
myHDMI_info.video_mode->mPixelClock = 2700; /* added by --sylixos */ |
在文件../hdmi_tx_phy.c中的函数hdmi_phy_configure内可以看到设置设置可选范围,包含2520、2700、5400、7200、7425、10800、14850。
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的驱动文件,只需要保留其中的open、close、GetVaiInfo、GetScrInfo和DevCreate函数即可。修改其中的参数。将_gHdmiDev.LCDD_pvFbBase = LCD_pFbBase;并在GetScrInfo函数中付给系统此地址指针。
8.此时将裸奔程序和DevCreate一起运行,既可以完成fb0设备的出现,此时可以使用/dev/fb0操作显示器显示需要的画面
9.整理代码,使之符合驱动规范和代码规范。
10.目前的状态仅仅是实现了简单的现实,音频、显示器参数获取功能还没有添加,后续根据需要逐步完善。
文章评论(0条评论)
登录后参与讨论