用BF532驅動統寶的240*320的LCD,用PPI輸出,該屏水平垂直同步訊號,只有一個資料使能訊號,我用PPI_FS1做垂直同步,用CPLD產生資料使能訊號,寄存器的設定是這樣的:
*pPPI_COUNT = 200*(240+85) - 1;
*pDMA0_X_MODIFY = 2;
*pDMA0_X_COUNT =200*(240+85);//
85是水平消隱的時鐘數,200行是因為*pDMA0_X_COUNT是16位的,再大會溢出,這85個資料是無用的資料,程式中依次設定好Timer1,PPI,DMA0(一維DMA),然後依次啟動DMA0,PPI,Timer1。能正確顯示一個200行的“猶抱琵琶半遮面”的李嘉欣。
改為2維DMA設定:
*pPPI_COUNT = 160*(240+85) - 1;
*pDMA0_X_MODIFY = 2;
*pDMA0_X_COUNT = 160*HLINE;//
*pDMA0_Y_MODIFY = 2;
*pDMA0_Y_COUNT = 2;
我將整個映像分為上下半幀傳送,顯示的結果為上下半幀重疊閃爍在上半幀顯示,下半幀也閃爍無顯示(出現隨機的一個顏色)。
再次改為如下2維DMA設定:
*pPPI_COUNT =(240+85) - 1;
*pDMA0_X_MODIFY = 2;
*pDMA0_X_COUNT = HLINE;//
*pDMA0_Y_MODIFY = 2;
*pDMA0_Y_COUNT = 320;
只有第一行有映像變換,其他行輪換顯示統一顏色。
曾經這樣設定過,設定X方向傳輸160行一維DMA,啟動中斷,在中斷中重新設定DMA,將DMA的START_ADDR指向下半幀起始處,再啟動DMA,但只有上部顯示正常,下半幀還是無顯示,後來看資料也說無同步訊號DMA不會啟動。
現在實在沒有辦法了,在此請各位高手不吝賜教,我的問題出在哪裡,如何設定2維DMA。
-------------------------------------------------------------------------------------------------
原因總算在昨天找到了,那就是半幀傳輸完後,也就是2D DMA的內部迴圈結束後,開始外部迴圈,但外部迴圈沒有工作,原因是沒有同步訊號,原來每次的DMA傳輸要有同步訊號啟動,手冊裡也沒有說。於是改程式,將內部同步改為外部同步,同步訊號在每幀起始處即半幀處增加一個同步,但CPLD程式一直不能工作,最後用了一個效率較低的辦法,用內部同步,將PPI_FS1(TIMER1)的周期改為原來的一半,這樣一幀中就能產生兩個同步頭,但是上半幀為160行,下半幀的160行結束後還要有16行的垂直消隱,只能開啟PPI中斷,在半幀結束後的中斷判斷上下半幀,修改TIMER1的PERIOD為相應的長度,多增加了一個周期7.7ms左右的中斷程式。問題解決。