威视锐ZYNQ开发板-ZingSK高清视频接口实例--HDMI
[复制链接]
1. 概述 ZingSK开发套件采用核心板加底板的方式,方便用户使用自定义的低成本的底板. ZingSK配套的底板也拥有丰富的接口, ZingSK外观如图1. 图1 本实例主要介绍底板上高清多媒体接口HDMI的使用,并通过软硬件协同设计的方法来实现彩条输出. 通过ZYNQ内部的Cortex处理器(PS部分)配置HDMI芯片SiI934,再通过 ZYNQ内部的PL部分去产生彩条显示到HDMI显示器上.框图如图3所示. 图2 实例程序主要由三部分组成,嵌入式平台的搭建,硬件语言部分与软件C程序部分. 嵌入式平台的搭建,主要是配置ZYNQ,如DDR3的配置,程序固化方式(SD卡, NAND Flash, SPI Flash),调试接口串口的配置以及IIC控制器的配置;硬件语言部分主要是完成HDMI的时序,并给出彩条的数据;软件C程序主要完成IIC控制器的初始化,以及发送HDMI芯片的配置数据,使SiI9134正常工作; 2. 快速启动 HDMI显示可通过以下几步来完成测试. 1.准备工作, a. 带HDMI接口的显示器一台; b. 6V-2A电源; c. ZingSK开发套件; 2.将提供的附件,启动文件boot.bin复制到TF中; 3.将ZingSK的启动模式调成TF卡模式,如下图; 图3 4. 插上电源,通过HDMI线连接板卡与显示器,并上电; 5. 显示器可观察到彩条,如图5; 图4 3. 嵌入式平台搭建 本实例主要是演示软硬件协同设计的流程,所以将工程分为三部分去 实现,嵌入式平台的搭建,硬件设计与软件设计; 使用XPS,配置ZYNQ的处理器PS部分,外设中选择下图. 图5 选择UART0为了输出调试信息,选择IIC0是使用该控制器来配置HDMI输出芯片SiI9134; 其它都为默认配置,根据板卡实际的DDR3芯片,配置DDR3控制器,作为程序的内存空间;如图7 图6 4. 硬件设计 硬件设计主要是指使用HDL语言进行的FPGA逻辑资源(PL部分)的设计. 主要为将PS的模块加入,再加入一个hdmi_color_bar的模块,顶层文件内容下: ////////////////////////////////////////////////////////////////////////////////// module hdmi_top( LED_4bits_GPIO_IO_O_pin, // hdmi interface mclk, pdata, pclk, hdmi_iic_sda, hdmi_iic_clk ); input mclk; output [15:0] pdata; output pclk; output [3:0] LED_4bits_GPIO_IO_O_pin; inout hdmi_iic_sda; inout hdmi_iic_clk; IIC_HDMI_stub u1 ( .processing_system7_0_MIO(), .processing_system7_0_PS_SRSTB_pin(), .processing_system7_0_PS_CLK_pin(), .processing_system7_0_PS_PORB_pin(), .processing_system7_0_DDR_Clk(), .processing_system7_0_DDR_Clk_n(), .processing_system7_0_DDR_CKE(), .processing_system7_0_DDR_CS_n(), .processing_system7_0_DDR_RAS_n(), .processing_system7_0_DDR_CAS_n(), .processing_system7_0_DDR_WEB_pin(), .processing_system7_0_DDR_BankAddr(), .processing_system7_0_DDR_Addr(), .processing_system7_0_DDR_ODT(), .processing_system7_0_DDR_DRSTB(), .processing_system7_0_DDR_DQ(), .processing_system7_0_DDR_DM(), .processing_system7_0_DDR_DQS(), .processing_system7_0_DDR_DQS_n(), .processing_system7_0_DDR_VRN(), .processing_system7_0_DDR_VRP(), .LED_4bits_GPIO_IO_O_pin(LED_4bits_GPIO_IO_O_pin), .ps7_I2C0_SDA ( hdmi_iic_sda ), .ps7_I2C0_SCL ( hdmi_iic_clk ) ); hdmi_color_bar u2( .mclk(mclk), .pdata(pdata), .pclk(pclk) ); Endmodule ////////////////////////////////////////////////////////////////////////////////// 子模块hdmi_color_bar的编写,主要根据HDMI的时序来描述,视频数据给不同的常量,即显示彩条;图8 为HDMI的时序; 图7 5. 软件设计 主要是通过C程序来控制IIC控制器,发送HDMI芯片的配置数据,调试时 还可以读回芯片的数据,检查芯片是否正常工作; 软件中主要的C程序如下,具体函数请参阅官方手册; //初始化IIC控制器 XIicPs_LookupConfig(…); XIicPs_CfgInitialize(…); //设置IIC时钟频率 XIicPs_SetSClk(…); //发送数据 iic_writex(… ); IIC要发送的数据,需要查阅SiI9134的手册,需要将用到的寄存器全部配置,整理的配置数据如下; SiI9134有两个寄存器,需要分别配置; 对于0x72为基址的寄存器,数据如下,前8位为寄存器地址,后16位为配置数据; {0x05, 0x00, 0x01}, //soft reset {0x05, 0x00, 0x00}, // {0x08, 0x00, 0xfd}, //enable hs/vs {0x40, 0x00, 0x58}, //create HS pulses {0x44, 0x00, 0x2c}, //width of the HS {0x46, 0x00, 0x02}, //create VS pulses {0x47, 0x00, 0x05}, //width of the VS {0x48, 0x00, 0x00}, //8bit mode,BT.601 {0x4a, 0x00, 0x01} //enable embedded sync 对于0x7a为基址的寄存器数据下, {0x2f, 0x00, 0x21}, //HDMI mode {0x3e, 0x00, 0x03}, //CEA-861D InfoFrame {0x40, 0x00, 0x82}, {0x41, 0x00, 0x02}, {0x42, 0x00, 0x0d}, {0x43, 0x00, 0xe7}, //checksum {0x44, 0x00, 0x20}, {0x45, 0x00, 0x68}, {0x46, 0x00, 0x00}, {0x47, 0x00, 0x00}, {0x3d, 0x00, 0x07} //nomal mode 6. 实例小结 本实例通过软硬件协同设计的方法,控制ZingSK的HDMI输出,主要利用 PS的IIC控制器,通过C语言来配置HDMI芯片,并通过硬件描述语言实现HDMI时序,将两者结合,最终将彩条输出到HDMI显示器上.
|