一、准备OSD图片
step1 打开OSDsolution_273b
step2 选择RLE菜单下的from-bitmap
step3 添加需要生成的OSD图片,勾选生成选项
1.选择需要制作成OSD的原始bmp格式的图片,需要时8位颜色深度的图片
2.选择生成文件的保存路径,自己设置
3.勾选BGR+attr模式
4.勾选生成 .bin,.info,.luts文件选项
5.点击start,生成对应的文件
其中,10.RLE是生成的OSD文件的数据部分,10.LUTS是生成的OSD文件的色表部分
step4 选择选择RLE菜单下的fcombine选项,合成需要下载到flash中去的bin文件
1.点击add按钮,添加刚刚生成的数据图片文件*.rle
2.点击add按钮,添加刚刚生成的色表文件,*.luts
3.点击make按钮,选择保存路径,将会生成对应的文件
其中,生成的bin文件就是要下载到flash中去的文件,info文件是对bin文件结构的注释
图片数据的起始地址为offsetout,长度为0x004c67,色表文件的起始地址为offsetout+0x004c67,长度为0x000400
其中,offsetout的值需要我们再下一步下载bin文件至flash的过程中进行指定,0x004c67+offset的地址在后面代码加载色表的过程中会使用到。
至此,需要显示的OSD文件就制作准备完毕。
二、下载OSD至硬件Flash中
step1 打开tw调试工具,选择transfer 菜单下firmware upgrade选项,选择IIC-SPI选项,
占位图片
选择下载的起始地址,点击ok
注意,如果使用的是TW8836的内部MCU,0x00000-0x40000之间的地址时用来存放代码的,OSD图片需要存储在0x40000之后的地址之内。如果使用的是外部的MCU,则没有此限制
三、在MCU中添加代码,主要完成的工作是通过TW8836的SPI总线将flash中的LUTS色表文件加载到TW8836内部的两张色表中去
调用了四个函数:
TW88xx_SPI_Init():该函数主要是将FLASH的通信模式设置为QAUD MODE,涉及到的寄存器主要由page4中的,0xC0-0xC9
McuSpiClkSet(1,2,0):该函数主要是设置TW8836通过SPI总线与FLASH通信时所需要的时钟信号,配置为PLL,108M,涉及的寄存器为page4中的0xE0和0xE1
SpiOsdEnable(1):该函数主要是打开TW8836的OSD功能,涉及的寄存器为page4的0x00
SpiOsdLoadLUT_AB(3,1,0,1024):该函数完成加载色表的具体动作。主要完成OSD色表位置的指定和色表数据传输时所需DMA通到的配置
其中的四个参数
@param1:将要显示的窗口号
@param2:色表指针增加模式
@param3:指定的色表的偏移量:对于LUTA来说,可以分为两个256字节大小的LUT,所以偏移量可以为0,也可以为256
@param4:配置的DMA通道的大小
@parm5:前文准备OSD图片中讲到的合成文件的LUT地址偏移量
程序启动后,可以通过TW8836调试工具,检查以上四个函数所涉及的寄存器是否配置正确
占位图片
四、调用显示
找到需要显示窗口在8836中对应的OSD设置寄存器,完成OSD起始位置、大小等信息的配置,也可以通过调试工具来验证功能是否准确。