常聽(tīng)到有人說(shuō)刷屏太慢,于是想測(cè)一下我的屏最快能刷多少幀。目的不是為了看視頻,而是減少M(fèi)CU在刷屏方面占用的時(shí)間。提高其使用效率。 本實(shí)驗(yàn)使用的MCU是STC32G12K128,屏采用了晶聯(lián)訊的JLX256128-920-PN。屏的時(shí)序是6800. 測(cè)試時(shí)采用了一幅256x128的單色圖(黑白圖)。因?yàn)檫@款屏只能顯示單色圖像。 先在群里咨詢(xún)了一下各位大師。用什么辦法方便測(cè)試屏的刷新速度。有高人指出。找一個(gè)閑置IO口,每次刷新完就讓IO口翻轉(zhuǎn)一次。然后運(yùn)行時(shí)用示波器測(cè)IO口的頻率,其二倍就是刷新速度了。 按這個(gè)思路,寫(xiě)了一個(gè)程序,第一次測(cè)出刷新是40X2=80幀。 不太滿(mǎn)意,又修改了程序。使用了STC32G12K128的硬件LCM接口和DMA功能。再測(cè)刷新速度成為265x2=530幀。 做最后的努力。對(duì)程序進(jìn)行極限優(yōu)化,測(cè)出的刷新速度為323x2=646幀。 這時(shí)mcu的設(shè)置到了極限,就是說(shuō)找不到可以繼續(xù)提高的速度的設(shè)置了。估計(jì)使用STC32F,刷新速度還會(huì)有大的提高。 對(duì)這個(gè)數(shù)據(jù)我簡(jiǎn)單分析了一下。一屏圖像的數(shù)據(jù)量為256x128=32768點(diǎn)。單色屏需要4096字節(jié)。也就是4K。646幀數(shù)據(jù)需要每秒傳送2646016字節(jié)。不到3M,一個(gè)字節(jié)需要的時(shí)間包括相關(guān)使能電平變化,數(shù)據(jù)的移動(dòng),指令的下達(dá),應(yīng)該是這個(gè)時(shí)間的4-6倍。按5倍核算的話(huà),這時(shí)端口的運(yùn)行速度在15M。無(wú)論對(duì)MCU還是屏都是可以接受的。 下面給出程序的主要內(nèi)容和測(cè)試時(shí)示波器的顯示: void main(void) { uint i; mcu_initial(); initial_lcd(); //對(duì)液晶模塊進(jìn)行初始化設(shè)置 transfer_command_lcd(0x08); //數(shù)據(jù)格式, clear_screen(); //清屏 for (i=0;i<4096;i++) buffer1[ i]=onecolor[ i];//把code的數(shù)據(jù)搬到xdata lcm_dma_transfer(1,1,256,128,4096,buffer1);//這是個(gè)完整的顯示函數(shù) clear_screen(); //清屏 lcd_address(1,1,256,128); while(1) { DMA_LCM_CR = 0xa1; //啟動(dòng) DMA 開(kāi)始發(fā)送數(shù)據(jù) P1=~P1; while(!(DMA_LCM_STA&0x01));//等待一屏數(shù)據(jù)發(fā)送完成 DMA_LCM_STA = 0x00; //清除 DMA 狀態(tài) } } void mcu_initial(void) { P1M1=0x00; P1M0=0x00; //P1配置為準(zhǔn)雙向 P2M1=0x00; P2M0=0x00; //P2配置為準(zhǔn)雙向 P3M1=0x00; P3M0=0x00; //P3配置為準(zhǔn)雙向 P4M0=0xff; P4M1=0x00; EAXFR = 1; //使能訪問(wèn) XFR CKCON = 0x00; //設(shè)置外部數(shù)據(jù)總線速度為最快 WTST = 0x00; //設(shè)置程序代碼等待參數(shù), LCMIFCFG = 0x01; //設(shè)置 LCM 接口為 8 位數(shù)據(jù)位,6800 接口,數(shù)據(jù)口為 P2 LCMIFCFG2 = 0x00; //RS:P45,RD:P44,WR:P42; Setup Time=0,HOLD Time=0。 LCMIFSTA = 0x00;//標(biāo)志位清零 LCMIFCR = 0x80; //使能 LCM 接口 } 速度提升最大的是LCM接口的使用和DMA功能的使用。極限優(yōu)化主要表現(xiàn)在兩點(diǎn),一個(gè)是LCMIFCFG2=0。把數(shù)據(jù)建立時(shí)間和保持時(shí)間都設(shè)成最小了。 二是主程序循環(huán)中把設(shè)置項(xiàng)都提前了。避免重復(fù)設(shè)置。循環(huán)中只保留了向屏發(fā)送數(shù)據(jù)指令,IO口翻轉(zhuǎn)指令和等待任務(wù)完成指令。MCU主頻為35M。完整的程序見(jiàn)附件。 |