bf518控制AT070TN83 V.1的7寸液晶顯示屏代碼及總結(jié)說明bf518控制AT070TN83 V.1液晶顯示屏代碼及總結(jié)說明 搞了幾天,終于整出來個color bar,寫點東西大家分享。新人學(xué)點東西不容易啊~ 嘿嘿 從頭開始寫。 ---------------------------------------------------------------------------------------------------------------------------- 要在屏上顯示圖像,需要把圖像存在內(nèi)存中。 section("MEM_SDRAM0_BANK0")unsigned short int DisplayBuffer[525][800]; //前消隱23行,中間480行有效數(shù)據(jù),后消隱22行
此處需要在ldf文件中定義 MEM_SDRAM0_BANK0 { TYPE(RAM) START(0x00000000) END(0x04000000) WIDTH(8) } 這塊是不是開的有點大?我不知道。反正程序是可以用了。前輩們給指點一下。
---------------------------------------------------------------------------------------------------------------------------- 接下來就是各種初始化 ---------------------------------------------------------------------------------------------------------------------------- *pDMA0_START_ADDR = 0; *pDMA0_X_COUNT = 800;//16位傳輸 *pDMA0_X_MODIFY = 2; *pDMA0_Y_COUNT = 525; *pDMA0_Y_MODIFY = 2; *pDMA0_CONFIG = FLOW_AUTO | SYNC | DMA2D | WDSIZE_16 ;//243 這里PPI是16位傳輸數(shù)據(jù),所以MODIFY=2,是這樣吧。。。 Y_COUNT = 525是因為前消隱23行,中間480行有效數(shù)據(jù),后消隱22行。消隱是個什么概念?大概就是占個地方讓你看不到它,硬件原理的問題吧。。。自己百度去。 ==================================================== *pPORTG_MUX |= 0xc080;//PG6|PG7|PG12; //435 412 418 ssync(); *pPORTG_FER |= PG6|PG7|PG5;//436 ssync(); *pTIMER0_PERIOD = 928;//Thp AT070 P11 *pTIMER0_WIDTH = 48; *pTIMER0_CONFIG = CLK_SEL | TIN_SEL | PERIOD_CNT | PWM_OUT;//496 *pTIMER1_PERIOD = 928*525;//525*Thp *pTIMER1_WIDTH = 928*3;//3*Thp *pTIMER1_CONFIG = CLK_SEL | TIN_SEL | PERIOD_CNT | PWM_OUT; ssync(); 看好多帖子都沒有提到過MUX寄存器,由于我目前只用過518,是不是別的型號PPI接口都不需要指定? 另外在這里需要注意一點,在設(shè)計硬件的時候,需要先看一下硬件使用手冊412頁的表,據(jù)說像PPI這些有多個針腳可以指定的功能,必需按表里的分組設(shè)計針腳功能。說實話,硬件手冊我基本上就沒看,誰知道這地方怎么回事就給提個醒。 關(guān)于TIMER的設(shè)置,需要看屏的說明書,那幾個參數(shù)說明書里都有。我也做了注釋。在網(wǎng)上看了一篇文章,這部分就沒寫說明,參數(shù)我也是猜出來的。哈哈。 ================================================ *pPORTF_MUX = 0x555;//435 411 ssync(); *pPORTF_FER |= 0xFFFF;//436 ssync(); *pPPI_CONTROL = POLS | 0x0010 | PORT_DIR | 0x3800 | XFR_TYPE;//897 | PACK_EN *pPPI_DELAY = 0;//904 *pPPI_COUNT = 800-1; // 這部分到?jīng)]什么太重要的東西,只是要提一句,網(wǎng)上很多例子都是pPPI_COUNT = 800*2-1;因為我在最初定義顯示緩存的時候用的是unsigned short int DisplayBuffer,在VDSP里看了一下是16位的,另外在pPPI_CONTROL 里也設(shè)置的16位數(shù)據(jù),所以我覺得這里pPPI_COUNT = 800-1應(yīng)該沒問題。 ================================================ 最后就是在內(nèi)存中生成個color bar了,前后消隱行只是開始為了測試用的,在正常顯示的時候,前23行黑色和最后22行白色的條是不會顯示出來的。 for(i=0;i<23;i++) { for(j=0;j<800;j++) { DisplayBuffer[j]=0;//黑 } } for(i=23;i<183;i++) { for(j=0;j<800;j++) { DisplayBuffer[j]=0xf800;//藍(lán) } } for(i=183;i<343;i++) { for(j=0;j<800;j++) { DisplayBuffer[j]=0x7E0;//綠 } } for(i=343;i<503;i++) { for(j=0;j<800;j++) { DisplayBuffer[j]=0x1f;//紅 } } for(i=503;i<525;i++) { for(j=0;j<800;j++) { DisplayBuffer[j]=0xffff;//白 } } =========================================================================== 最后要感謝scott給提供了一些編程資料,還有感謝frank最重要的一個提醒,我才把這個程序調(diào)好。開始編寫的程序和上面的差不多,但顯示出來的色條總是會向一個方向移動,研究了好多天也沒搞明白怎么回事。后來frank說可能是處理速度的問題,讓我把主頻調(diào)到133M。改完馬上就好了。呵呵。我的PPI接了50M的晶振,應(yīng)該是這個原因吧。。。 第一次搞dsp,各種不懂,大家多指教! chris ma 于2011年7月15日 QQ:5797378
重要補充:
對上面程序進(jìn)行了另一個測試,在一行中顯示兩種顏色,測試之后發(fā)現(xiàn),圖像整體偏離中心。
經(jīng)過群里朋友“2012“的提醒,
將*pPPI_DELAY = 0;
改為*pPPI_DELAY = 45;
再次測試顯示圖像正常。
這個delay值是從網(wǎng)上的資料中找到的,原文說AT070TN83手冊中給出延時40周期,但實測45周期比較好。
|