PICO 的 VGA/TV 驱动库 PicoVGA (2)
[复制链接]
PicoVGA主要功能
- 使用 PIO0 模块,使用具有透明度的 1 个基本层和 3 个覆盖层
- R3G3B2 格式的 8 位输出
- VGA 显示器输出为 256x192 至 1280x960 分辨率
- 在PAL或NTSC隔行模式下输出分辨率高达1024x576或848x480
- 近 30 帧缓冲格式:8/4/2/1 位图形、磁贴、文本、特殊格式(图表)
- 有限bit位的文本模式和图形格式调色板
- 不同格式的帧缓冲区可以在图像中以条带和段的形式组合在一起
- RLE 图像压缩(适合绘图)
- 具有可选关键颜色的透明度模式
- 覆盖层中的硬件精灵
- 层输出仅到指定输出引脚(彩色平面)
- 根据指定的分辨率和时间自动配置视频模式
- 根据所需的分辨率自动超频处理器
- 库使用处理器的第二个内核,第一个内核保留给主程序
- 附加 PWM 音频输出(不是必要)
这里是一个以隔行模式输出到电视的例子,从VGA连接器到SCART电视连接器。VGA/SCART减少到只包含一个简单的连接器引脚连接,可能还有一个用于消隐信号的电阻器。
PicoVGA库使用规则
Pico上的图像生成受处理器利用率限制,程序必须遵循它。使用PicoVGA库时,需要记住以下几个原则:
库总是在处理器的第二个核上运行,程序总是在第一个核上运行。渲染图像会使CPU内核完全过载,并且通常无法用于其他用途。核心功能的分离还有一个优点,即核心之间不相互影响,不需要相互锁定。第一个核心简单地使用对帧缓冲区的写操作,第二个核心显示帧缓冲区的内容,而不在它们之间进行任何通信。这使得整体工作更容易和更快。
如果第二个核心不繁忙(例如,当显示仅使用DMA传输传输的8位图形时),它也可以用于主程序工作。但是,应考虑到一些限制:第二个核心中的程序不应使用中断(它会干扰渲染功能),应谨慎使用插值单元(渲染功能不保存其状态),并且不得禁用中断。
一条重要的规则是,PicoVGA库访问的所有数据必须存储在RAM中。外部闪存速度慢,不能用于渲染功能。例如,如果要显示flash图像,则必须首先将其复制到RAM中的缓冲区,然后将指向图像的RAM副本的指针传递给呈现函数。如果将指向flash中图像的指针传递给它,那么访问flash的速度慢将导致视频丢失。除了图像,这也适用于字体和瓷砖模式。
在安排屏幕布局时,必须考虑有限的渲染速度。有些模式渲染速度非常快(例如,使用DMA从帧缓冲区传输8位图形),有些模式渲染强度非常高:例如,以慢速模式渲染精灵。当使用渲染时,某些视频可能无法在要求的时间内足够快地渲染,视频图像将中断(失去同步)。在这种情况下,有必要使用其他模式,或减少渲染区域(添加其他更快的模式,例如在屏幕两侧添加平铺控件),降低屏幕分辨率或提高CPU时钟速度。视频是分开呈现的,因此它始终只是一个视频线上的内容,视频线之间不会相互影响。例如,可以通过将所有精灵水平相邻放置(最具挑战性的情况)来测试精灵渲染的速度,并检查视频同步是否失败。
使用DMA传输时也必须小心。DMA用于将数据传输到PIO。尽管传输使用FIFO缓存,但使用不同的DMA信道可能会导致渲染DMA信道延迟,从而导致视频丢失。例如,当RAM中的大数据块被快速传输时,DMA可能发生过载。然而,最大的负载是来自闪存的数据DMA传输。在这种情况下,DMA通道等待通过QSPI从flash读取数据,从而阻塞DMA呈现通道。
CPU时钟频率也必须服从图像发生器。在初始化视频节点之前,库将计算所需的系统时钟频率,以便定时符合要求,并且处理器速度足以满足所需的图像分辨率。最好先打印出计算出的时钟频率,以便在控制台上进行检查。可以禁止库改变系统时钟,或者仅规定某个范围,在这种情况下,某些模式可能无法访问(或者视频图像可能中断)。
图像缓冲区必须对齐到4字节(32位CPU字),图像段必须水平对齐到4像素-这是指段的水平位置、宽度、对齐(wrapx)和偏移(offx)。对齐不适用于垂直方向。此限制是必要的,因为图像信息是使用32位DMA传输传输到PIO控制器的,并且必须与32位字对齐。一个32位字包含4个像素(1个像素包含8位),因此图像中的水平数据也必须与4个像素对齐。因此,您不能以1像素的增量对图像进行精细的水平滚动(该限制不适用于垂直滚动),而只能以4像素的增量进行。例外是慢精灵,这是软件渲染到视频线,因此可以滚动1像素的增量。类似地,该限制不适用于将软件渲染到帧缓冲区(例如,可以将图像渲染到任何坐标的视频存储器)。
|