TW8836字体OSD~第五节OSD Windows寄存器设置流程

内置OSD控制器基本寄存器设置流程示例

Step_1OSD字体大小配置

1、选择字体宽度为12或者16   -0x300(4)

2、设置字体高度 -0x390(4-0)

3、设置字体总数 -0x391(6-0)

Step_2: OSD窗口配置

Window#1 (0x310~0x31F),Window#2 (0x320~0x32F),

Window#3 (0x330~0x33F),Window#4 (0x340~0x34F),

Window#5 (0x350~0x35F),Window#6 (0x360~0x36F),

Window#7 (0x370~0x37F),Window#8 (0x380~0x38F)

Step_3: OSD颜色属性、字设置

1、启动OSD RAM访问 -0x304(0=0)

2、设置多色开始地址 -0x305(w3-1),0x30B(w7-0),0x393(w7-0),0x394(w7-0)

3、OSD RAM地址 -0X305(w0),0x306(w7-0)第一个地址是step_1_23窗口内容的起始地址

4、OSD RAM数据端口高(字体地址) -0x307数据自动写入上述地址、0x304(位5=0)选择低于256个字符(位5=1)选择高于256个字符

5、OSD RAM数据端口位18(边界效应)、位17(闪烁效应)、位16(高|256字符) -0x3044、位7和位5数据自动写入到上述地址

6、OSD RAM数据端口低(颜色属性) -0x308数据自动写入上述地址

7、重复3,4,56 -地址应该增加一个

Step_4: 颜色查找表设置

1、选择颜色查找表写入地址
-0x30C(位5-0
-BIT[5:0]6位指定查找表中的64个条目之一,每个条目的内容都是16位的RGB颜色
-65536中颜色可供选择,对于单色字体,OSD控制器在特定的时间只能访问其中的16

2、颜色查找表控制位设置

-0x30D(高字节),0x30E(低字节)
-查找表的数据通过0x30D0x30E访问

3、重复12来编程查找表的每个条目

Step_5: FONT_RAM_DATA设置(字体RAM

1、启动FONT RAM访问

2、字体RAM地址设置 -9位(h000-h1FF,-0x304(w5),0x309(w7-0)
-h000-h1FF:单个字体RAM(最多379个可编程字符)

3、字体RAM数据端口 -0x30A数据自动写入上述地址

4、对一个FONT RAM数据重复(327-内部地址自动增加1

5、新的FONT RAM地址设置 -9

6、重复3/4/5 -字体RAM地址应该增加一个

注意:对于字体RAM配置和字体位映射,请参阅详细描述第30

Step_6: OSD设置结束并启用OSD

1、OSD开启、关闭
启动控制 0:开;1:关 -0x30C(6 = 0)

2、OSD窗口使能 -0x310(w7=1)窗口1使能

此处提供我个人写的win1 OSD叠加显示汉字“森鹏”的窗口程序:

void InitWinno1(void) 
{
    int8u j;
    WaitVBlank(1);
    FOsdWinEnable(1,OFF) ;
    
    FOsdSetFontWidthHeight(16,16);
 
    FOsdWinInit(1);
    FOsdWinScreenXY(1,20,20);
    FOsdWinScreenWH(1,2,2);
    FOsdWinZoom(1,1,1); 
    FOsdWinSetOsdRamStartAddr(1, 0);   
    FOsdWinAlphaPixel(1,4,8);
    FOsdWinMulticolor(1,OFF);


    FOsdRamMemset(0,0,0x40,1);
    FOsdRamMemset(1,1,0x73,1);
    FOsdRamMemset(2,0,0x37,1);
    FOsdRamMemset(3,1,0x04,1);
    for(j = 0;j < 32;j = j+4) 
    { /*字模数组转换
      FosdGetFontRamTable[j]   =( (FOsdSetFontRamTable[j]&0x0F)<<4 )+( FOsdSetFontRamTable[j+1]&0x0F);
      FosdGetFontRamTable[j+1] =( FOsdSetFontRamTable[j+2]&0x0F )+( FOsdSetFontRamTable[j+3]&0x0F) ;
      FosdGetFontRamTable[j+2] =( FOsdSetFontRamTable[j]&0xF0 )+( FOsdSetFontRamTable[j+1] >> 4);
      FosdGetFontRamTable[j+3] =( FOsdSetFontRamTable[j+2]&0xF0 )+( FOsdSetFontRamTable[j+3] >> 4);
      */
      FosdGetFontRamTable[j]   =( FOsdSetFontRamTable[j]>>4 )+( FOsdSetFontRamTable[j+2]&0xF0);
      FosdGetFontRamTable[j+1] =( FOsdSetFontRamTable[j]&0x0F )+( FOsdSetFontRamTable[j+2]<<4);
      FosdGetFontRamTable[j+2] =( FOsdSetFontRamTable[j+3]&0xF0 )+( FOsdSetFontRamTable[j+1] >> 4);
      FosdGetFontRamTable[j+3] =( FOsdSetFontRamTable[j+1]&0x0F )+( FOsdSetFontRamTable[j+3] << 4);
      
      FosdGetFontRamTable1[j]   =( FOsdSetFontRamTable1[j]>>4 )+( FOsdSetFontRamTable1[j+2]&0xF0);
      FosdGetFontRamTable1[j+1] =( FOsdSetFontRamTable1[j]&0x0F )+( FOsdSetFontRamTable1[j+2]<<4);
      FosdGetFontRamTable1[j+2] =( FOsdSetFontRamTable1[j+3]&0xF0 )+( FOsdSetFontRamTable1[j+1] >> 4);
      FosdGetFontRamTable1[j+3] =( FOsdSetFontRamTable1[j+1]&0x0F )+( FOsdSetFontRamTable1[j+3] << 4);
    }
    
    FOsdDownloadFontBySerial(0,FosdGetFontRamTable,32,1);
    FOsdDownloadFontBySerial(1,FosdGetFontRamTable1,32,1);
    FOsdOnOff(ON,1);
    FOsdWinEnable(1,ON);
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值