从8/16位向32位图形MCU升级的技巧
是我开始尝试移植第12章中代码的时候了:“黑屏”确实是一件有趣的事情。用PIC24,我能够演示SPI端口是如何的简单,只需要三只电阻器,几个中断,以及一些创新就可以产生一个复合视频信号,特别是可以将任意的电视机转换成单色显示器。要产生一个视频信号,需要中断代码与外设之间的精密协调。实际上,因为即便是在输出定时上只差一个时钟周期,在显示器屏幕的左侧就会产生可见的抖动(所有的竖直线都变得像锯齿一样),故训练结果将是用于中断“决策”的一个理想放大镜,这是PIC架构传统上一直出众的特性。然而不幸的是,根据定义,指令预取和存储器缓存机制都是非确定的。本文引用地址://m.amcfsurvey.com/article/173681.htm
经过一段苦思冥想,我最终明白了。我在试图做不应该做的事情!32位内核是为了提高性能而设计的。其使命是C代码的运行尽可能地快,而把实时严格的工作留给外设。特别是,DMA外设是一个非常好的工具。
最终,我想出了如何利用定时器直接产生复合视频信号,并将DMA数据传输同步到SPI端口的方法。这种新方案提供了确定性的定时,而且还将CPU的开销减少了大约25%到5%。几个小时工作后,我完成了2D和3D视频演示并运行,还加上了动画,从高清显示一直到单显VGA(实例见图3和图4)。
图3:用PIC32所产生的3D图形。
图4:用PIC32所产生的不规则几何图形。
开发PIC32很快变成一件令人上瘾的事情,结果是很好的回报,那就是让我完成了一本有关32位器件新书的写作之旅!PIC32与早先的16-bit PIC24微控制器的兼容性是那样的无缝。这款新的MIPS内核的速度和性能给我留下了深刻的印象,大大扩展了任何先前的PICMCU都无法实现的应用范围。
表1:PIC24F AD1CON寄存器的并排比较。
评论