> 文档中心 > 单片机---HLK-W801移植Nes模拟器(三)

单片机---HLK-W801移植Nes模拟器(三)


总目录

《单片机—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 scanningILI9341_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轴到239ILI9341_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 改为255ILI9341_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左右的水平。

在注释掉绘图操作之后,模拟器计算帧的速度如下
单片机---HLK-W801移植Nes模拟器(三)
大约是28fps。所以可以看到绘图还是挺耗时的。

SPI的速率是20MHZ。那么每秒最大传输大约20帧。

每帧的计算大约0.035秒,传输大约0.05秒,加起来大约耗时0.085秒,所以每秒大约传输大约11.7帧,再除去其他操作,大约就是11帧/s。

看来还是需要用并口才能实现高的刷新率。

下载地址
《海凌科HLK-W801上面移植nes模拟器》