框图:
TW8836 FONT LUT有16位64表格,16位颜色有5位MSB红色值、6位MSB绿色值和5位MSB蓝色值组成。1BPP字使用第一个16位LUT区域,它是固定的,用户不能更改1BPP的起始位置。但是,2/3/4BPP FONT可以将起始LUT位置分配给4个边界(使用R308[3:0]),它也可以使用前16个LUT区域。
前16个LUT具有默认的RGB值,并且这些默认的16个LUT值在16,32,48位置被复制。
从0到31的LUT具有9个等级(0-8)的alpha混合效果,8个Fosd 窗口可以分配不同的alpha混合值。
1.1、默认颜色值
TW8836有一个默认颜色值。
表1.1默认调色板颜色值
注1:不准确的值,需要更新
注2:TW8836使用新的颜色顺序,它与TW8832不同
注3:如果用户覆盖它,TW8835将无法恢复默认调色板颜色值
用户可以替换默认的颜色值,使用一下功能更改调色板的颜色值
#define PAGE3_FOSD 3
void FontOsdSetPaletteColor(int8u index ,int16u color)
{
WriteTW88Page(PAGE3_FOSD);
WriteTW88(0x0C,index | ((ReadTW88(0x0C)&0xC0))); //写index索引值
WriteTW88(0x0D,(int8u)(color>>8));
WriteTW88(0x0E,(int8u)color);
}
1.2、选择调色板索引
1BPP字体的前景/背景可以使用位于调色板0-15上的16中颜色之一进行索引,因此,1BPP字体使用16中颜色组。
2/3/4BPP字体使用4/8/16色,可以在调色板表上重新映射。
1.2.1/1BPP映射
1BPP字体只有两个值,一个用于前景色,另一个用于背景色。在调色板中黑色的真实含义是值0,白色是值1,为了清除器件,本文档使用黑色作为背景,白色作为前景。
用户可以分配前16个LUT颜色的背景和前景的索引值。R308用于字体属性,高半字节用于背景索引值(值0b),d低半字节用于前景色(值1b)。
1.2.2、多BPP
TW8836不仅支持1BPP(BitPerPixel),还支持2/3/4BPP字体。2BPP使用4中颜色,3BPP使用8中颜色,4BPP使用16中颜色。2/3/4BPP调色板分组为4/8/16中颜色,TW8836可以在具有63个索引的调色板中分配该颜色组的开始。
如果Firmware(FW)具有2BPP字体并且将组颜色索引的开始分配为56并且调色板56具有白色值,则调色板57具有红色值,调板58具有绿色并且调色板59具有蓝色,字体图像在以下实例中,LED面板上显示的内容将更改为右边的内容。
要使用多BPP字体,TW8836必须分配Multi_BPP索引的开始。
例如,如果FW的字体设置为96个1BPP字体,10个3BPP字体,2个4BPP字体,则寄存器值为R305[3:1]=000b,R305[7:0]=0x60,R393[7:0]=0x60,R394[7:0]=0x7E。
此外,必须为每个窗口启用Multi_bpp启用标志才能使用Multi_bpp.
当用户分配OSDRAM数据(OSDRAM地址和属性)时,根据Multi_BPP寄存器的开始,TW8836将属性数据解析为两种不同的含义。
如果OSDRAM地址用于Multi_BPP,则它将使用低半字节作为Multi_BPP字体的调色板组索引的开始。
多BPP的R308上的LUT偏移值将乘以4用于只是调色板表上的位置,如果用户想要索引16-23作为3BPP字体,则R308中的偏移值将为4。
嘿嘿……此处仅提供相关函数名:
//---------------------------------
// OSDFont.C headervoid FOsdSetAccessMode(int8u mode);
//---------------------------------
// FontOsd Palette
//---------------------------------
void FOsdSetPaletteColor(int8u index, int16u color, int8u vdelay);
void FOsdSetPaletteColorArray(int8u index, int16u *array, int8u size, int8u vdelay);
void FOsdSetDefPaletteColor(int8u mode);
void FOsdInitBpp3AlphaTable(int8u fCalculate);
void FOsdDefaultLUT( void );
void FOsdDumpPalette(int8u winno);