总目录
《单片机—HLK-W801移植Nes模拟器(一)》
《单片机—HLK-W801移植Nes模拟器(二)》
《单片机—HLK-W801移植Nes模拟器(三)》
本章重点—优化显示
前两章完成之后,测试了一下刷新速率,达到了惊人的3帧每秒
提高主频
main函数中,有设置时钟分频的位置,尝试修改为最高
修改LCD初始
默认的ILI9341是竖屏,320*240的话,我们写数据,就需要进行截断处理,因为这个模拟器的每行是256个字符。
所以我们进行一下横屏,并且配置一下绘图范围的内存,我们就让它与模拟器提供的行buf一一对应,就避免了很多配置动作,只需要不停的写入就好了。
ILI9341_WR_REG(0x36); //set the model of scanning
ILI9341_WR_DATA8((1<<5)|(0<<6)|(1<<7)|(1<<3)); //左横屏
//ILI9341_WR_DATA8((1<<5)|(1<<6));右横屏幕
//ILI9341_WR_DATA8(0x08); 竖屏幕
ILI9341_WR_REG(0x2B); //set the page address 横屏幕设置 Y轴到239
ILI9341_WR_DATA8(0x00);
ILI9341_WR_DATA8(0x00);
ILI9341_WR_DATA8(0x00);
ILI9341_WR_DATA8(0xDF);
ILI9341_WR_REG(0x2A); //set the column address X轴到319 改为255
ILI9341_WR_DATA8(0x00);
ILI9341_WR_DATA8(0x00);
//ILI9341_WR_DATA8(0x01);
//ILI9341_WR_DATA8(0x3F);
ILI9341_WR_DATA8(0x00);
ILI9341_WR_DATA8(0xFF);
ILI9341_WR_REG(0x2c);//储存器写
这里,我们进行了左横屏,并且配置横纵坐标范围为256*240。
然后我们的写屏函数就可以化为最简单的写SPI
void ILI9341_DrawLine(u16 y,u16* data)
{
tls_spi_write((uint8_t *)data,512);
}
那么有人会注意到了,前面用的Y轴应该是239,转化为十六进制应该是EF。可为什么是DF,那么就是因为这个游戏的首行地址,并不是从0开始,而一共只有0xEF行,所以为了能最简单的进行画图,不去设置行列地址,那么就直接配置所用的显示位置纵坐标为0xDF。否则,就会出现滚屏的问题。
测试帧率
然后我们配置了一个5秒的定时器,然后我们每画一帧,就记一次数据,5秒看一下绘制了多少帧。
extern unsigned int FrameCount;
static void demo_timer_irq2(u8 *arg)
{
printf("%02d fp/5s\n",(FrameCount));
FrameCount=0;
}
void timer_demo(void)
{
u8 timer_id2;
struct tls_timer_cfg timer_cfg2;
timer_cfg2.unit = TLS_TIMER_UNIT_MS;
timer_cfg2.timeout = 5000;
timer_cfg2.is_repeat = 1;
timer_cfg2.callback = (tls_timer_irq_callback)demo_timer_irq2;
timer_cfg2.arg = NULL;
timer_id2 = tls_timer_create(&timer_cfg2);
tls_timer_start(timer_id2);
}
绘制图像处计数
void InfoNES_LoadLine()
{
if(PPU_Scanline==100)
{
FrameCount++;
}
ILI9341_DrawLine(PPU_Scanline,WorkLine);
}
最终测试了一下
10fps左右的水平。
在注释掉绘图操作之后,模拟器计算帧的速度如下
大约是28fps。所以可以看到绘图还是挺耗时的。
SPI的速率是20MHZ。那么每秒最大传输大约20帧。
每帧的计算大约0.035秒,传输大约0.05秒,加起来大约耗时0.085秒,所以每秒大约传输大约11.7帧,再除去其他操作,大约就是11帧/s。
看来还是需要用并口才能实现高的刷新率。
版权声明:本文为CSDN博主「胖哥王老师」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/baidu_19348579/article/details/122731732
暂无评论