单片机---HLK-W801移植Nes模拟器(三)
總目錄
《單片機—HLK-W801移植Nes模擬器(一)》
《單片機—HLK-W801移植Nes模擬器(二)》
《單片機—HLK-W801移植Nes模擬器(三)》
本章重點—優化顯示
前兩章完成之后,測試了一下刷新速率,達到了驚人的3幀每秒
提高主頻
main函數中,有設置時鐘分頻的位置,嘗試修改為最高
修改LCD初始
默認的ILI9341是豎屏,320*240的話,我們寫數據,就需要進行截斷處理,因為這個模擬器的每行是256個字符。
所以我們進行一下橫屏,并且配置一下繪圖范圍的內存,我們就讓它與模擬器提供的行buf一一對應,就避免了很多配置動作,只需要不停的寫入就好了。
這里,我們進行了左橫屏,并且配置橫縱坐標范圍為256*240。
然后我們的寫屏函數就可以化為最簡單的寫SPI
那么有人會注意到了,前面用的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。
看來還是需要用并口才能實現高的刷新率。
下載地址
《海凌科HLK-W801上面移植nes模擬器》
總結
以上是生活随笔為你收集整理的单片机---HLK-W801移植Nes模拟器(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RS示波器软件,罗德与施瓦茨示波器上位机
- 下一篇: 谁是罪犯逻辑问题