单片机---HLK-W801移植Nes模拟器(三)
總目錄
《單片機(jī)—HLK-W801移植Nes模擬器(一)》
《單片機(jī)—HLK-W801移植Nes模擬器(二)》
《單片機(jī)—HLK-W801移植Nes模擬器(三)》
本章重點(diǎn)—優(yōu)化顯示
前兩章完成之后,測(cè)試了一下刷新速率,達(dá)到了驚人的3幀每秒
提高主頻
main函數(shù)中,有設(shè)置時(shí)鐘分頻的位置,嘗試修改為最高
修改LCD初始
默認(rèn)的ILI9341是豎屏,320*240的話,我們寫數(shù)據(jù),就需要進(jìn)行截?cái)嗵幚?#xff0c;因?yàn)檫@個(gè)模擬器的每行是256個(gè)字符。
所以我們進(jìn)行一下橫屏,并且配置一下繪圖范圍的內(nèi)存,我們就讓它與模擬器提供的行buf一一對(duì)應(yīng),就避免了很多配置動(dòng)作,只需要不停的寫入就好了。
這里,我們進(jìn)行了左橫屏,并且配置橫縱坐標(biāo)范圍為256*240。
然后我們的寫屏函數(shù)就可以化為最簡(jiǎn)單的寫SPI
那么有人會(huì)注意到了,前面用的Y軸應(yīng)該是239,轉(zhuǎn)化為十六進(jìn)制應(yīng)該是EF。可為什么是DF,那么就是因?yàn)檫@個(gè)游戲的首行地址,并不是從0開始,而一共只有0xEF行,所以為了能最簡(jiǎn)單的進(jìn)行畫圖,不去設(shè)置行列地址,那么就直接配置所用的顯示位置縱坐標(biāo)為0xDF。否則,就會(huì)出現(xiàn)滾屏的問題。
測(cè)試幀率
然后我們配置了一個(gè)5秒的定時(shí)器,然后我們每畫一幀,就記一次數(shù)據(jù),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); }繪制圖像處計(jì)數(shù)
void InfoNES_LoadLine() {if(PPU_Scanline==100){FrameCount++;}ILI9341_DrawLine(PPU_Scanline,WorkLine); }最終測(cè)試了一下
10fps左右的水平。
在注釋掉繪圖操作之后,模擬器計(jì)算幀的速度如下
大約是28fps。所以可以看到繪圖還是挺耗時(shí)的。
SPI的速率是20MHZ。那么每秒最大傳輸大約20幀。
每幀的計(jì)算大約0.035秒,傳輸大約0.05秒,加起來大約耗時(shí)0.085秒,所以每秒大約傳輸大約11.7幀,再除去其他操作,大約就是11幀/s。
看來還是需要用并口才能實(shí)現(xiàn)高的刷新率。
下載地址
《海凌科HLK-W801上面移植nes模擬器》
總結(jié)
以上是生活随笔為你收集整理的单片机---HLK-W801移植Nes模拟器(三)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RS示波器软件,罗德与施瓦茨示波器上位机
- 下一篇: 谁是罪犯逻辑问题