您好,欢迎来电子发烧友网! ,新用户?[免费注册]

您的位置:电子发烧友网>电子元器件>发光二极管>

点阵信息转化规则 - LED大屏幕异步控制器实现方案

2011年11月14日 17:23 《微计算机信息》 作者:王有乾,佘焱,姜建 用户评论(0
4.2 点阵信息转化规则:

  由于窗口大小可以任意设置, 窗口的位置可以任意摆放。

  所以对于单个窗口而言, 它在显存中的映射可能并非是字(2byte)对齐的。以图4 为例, 在一个大小为160(宽)×96(高)的屏幕上开设一个左上角坐标为(20,16), 大小为86×47 的窗口, 则此窗口第一行的前4 个像素点在显存中的映射为地址是0x83000282 和0x83000283 的两个字节的低4 位, 所以这个窗口在显存中的映射并不是字对齐的。由于MCU 只能以字(2byte)为单位对显存进行操作, 所以PC 软件在对该窗口进行点阵信息转换时, 如果直接对区域1 (窗口的实际大小)进行转换存储,则在对该窗口进行特技处理时会存在大量的位运算, 这样会大大降低运算效率, 从而影响特技效果的显示, 这样就很难满足用户对特技显示效果的要求。

  

 

  为了解决上述问题, 可以将区域1 横向扩展成起点坐标为(16,16), 大小为96×47 的区域2。易知, 区域2 在显存中的映射是字对齐的。为了避免运算时的位操作, PC 软件在对区域1 进行点阵信息转换时, 可按区域2 来进行, 只是需将区域1 的扩展部分的数据全填为1。这样处理会牺牲掉一小部分FLASH 存储器空间, 但却可避免特技处理时大量的位运算, 从而大大提高运算效率, 因此这样做是值得的。

  4.3 缓存数据的组织方案:

  由于MCU 只能对显存进行写操作, 而在进行特技运算时,往往需要前一帧信息才能得到下一帧的信息。所以, 首先, 需要在缓存中划分出一块和显存大小相等, 地址一一对应的区域screen 用于保存整屏幕的前一帧信息。

  

 

  又由于MCU 对显存只能进行字操作, 并且多个窗口之间可能会出现区域重叠, 所以如果各窗口的特技运算都直接在screen 区域上进行, 则窗口重叠部分信息可能会发生混乱。因此如图5 所示, 也需要在缓存中为每个窗口划分出一块存储器空间(area 1, area 2, ..., area n), 用于保存本窗口显示的前一帧信息。这样在特技运算时, 首先要在area 区域中对各窗口数据进行运算得到各窗口的下一帧信息, 然后将area 区域中数据写入该窗口在screen 区域中的相应地址以保存整屏幕最新一帧信息, 最后把screen 中相应数据写入显存从而完成显示。

  4.4 软件设计:

  基于上述方案, MCU 程序的设计变得非常简洁。程序结构如图6 所示, 控制器上电后, 首先进行系统初始化, 然后从FLASH 中读取屏参数, 进行参数初始化。接着建立任务TaskCONtrol, TaskControl 拥有比各窗口显示任务都要高的优先级, 它主要用于对各窗口显示任务进行实时管理。每隔一段时间TaskControl 就要对reset 标志进行一次查询, 如果reset=1, 它会删除原先建立的各窗口显示任务, 然后从FLASH 中读取新的窗口个数, 依此建立新任务, 将每个窗口的显示交由单个窗口显示任务来控制。

  

 

  

非常好我支持^.^

(1) 100%

不好我反对

(0) 0%

( 发表人:小兰 )

      发表评论

      用户评论
      评价:好评中评差评

      发表评论,获取积分! 请遵守相关规定!