搞到这里有点头痛,想着不行就换MCU吧,无意间忽然想到电机控制MCU不是对速度要求挺高的嘛,于是就发现了这头怪兽— SH79F3213。32KB的FLASH、1.5KB的RAM、关键是有16KB的程序RAM,只要把前16K的CODE拷贝到里面就能以84M的主频的跑程序,芯片其它外围也挺丰富但我暂时用不到就不去管它了,没有硬件支持下刷屏幕MIPS才是王道!
芯片选定开始电路方案设计,彩色图片的数据量对51来说非常可观的,一幅全屏的RGB565数据就是153KB,与用单色屏习惯把字库和小图片防在CODE区不同,这种应用必须外扩存储器了。你没猜错,我又选了烂大街的W25Q系列,便宜才是王道嘛,手头有现成的W25Q16先顶上用吧。这里要吐槽一下MCU硬件SPI口,最快只能8分频,都什么年代了还这么慢,现在SPI口的FLASH都支持100M以上了。好在内核跑得快,我用软件模拟还不行嘛,最终软件模拟的SPI口做到20个指令周期取一字节并放到总线,同样时间你硬件SPI三位还没有传完,在此替中颖汗颜一下。
言归正传, 选P0、P4口做16位数据总线,因为这俩口排列规整方便布线,P2口给W25Q用(实际只用了6个PIN,为啥这样用可以想想),留了一个串口做图象文件下载和显示控制,其他控制IO就随便就近分配了。正好某配有免费打样券,PCB图画好就去做了。
PCB
板子回来焊接器件没啥好说的,参照卖家的例程做个驱动初始化,自己写了画点和字库显示文字的程序,文字显示很快是预料中,因为前景、背景色是相对固定两色刷就完了,有些卖家例程以单色刷屏速度吹嘘就更是糊弄人民群众了,这个总线数据都不用变拼命刷WR线就行了。
显示屏
重点到了!其实搞过TFT的(用开发板移植一下例程在我看来不能算搞过)都知道,刷图象速度的瓶颈是在取数据而不在刷总线,即使你用STM32,用上了DMA、FSMC限制你速度的依然是SPI总线上的存储器,前面提到了我用20个指令周期取到一字节数据并把它放到总线上,这样16位总线就需要40周期,再加上8080口的控制和循环指令,整屏刷下来平均51-52周期/像素,换算成刷新率大约21FPS,这个速度基本可以满足一般的工业产品显示需要了。当然最终产品还会有些中断程序的干扰,但做到18FPS以上应该没有任何难度。
屏幕亮了就好办,字符显示一切正常,但显示图片又出问题了,屏幕是花的!首先就怀疑自己写的PC端图片处理程序和BIN文件合并、拆分程序的问题,可检查了半天没问题啊,用示波器一看FLASH芯片只有一个脚在出数据可我用的是4I/O模式,难道芯片QE=0?(JV版本的应该出厂QE=1),找来几片同次买的芯片上编程器读状态字节,果然有部分QE=0的,甚至还有几片被烧了加密位,看来是又遇见奸商了,说是全新原装但就算是用拆机货也要正规点吧,好歹恢复到出厂状态算是拆机货的良心和底线了吧!也怪自己贪便宜,省钱办大事才是硬道理!
修改过QE状态后4I/O数据可以源源不断地输出了,按即定思路修改程序,一切顺利达到了42FPS刷新率,接下来继续优化刷屏循环,一条条指令一个个周期的抠,最终达到了71FPS的水平,连我自己也有些意外,当然此时MCU除了刷屏基本干不了其它大事了,下面是实测FLASH的片选引脚波形
上图中一个低电平周期刷一帧图象时间大约是14mS,每秒10帧图象,也就是每幅图象后有八十多毫秒可以做其它任何事,当然快速的即时性中断任务也可以随时执行,包括在刷屏期间对刷屏也基本没影响。这也验证了速度就是王道,什么同步也不用,刷屏期间中断也没事,只要你够快对显示就没有肉眼可见的影响。这次的动态图视频就不发了,大家也不想看广告对吧^_^