DMA_LCM 驱动16位并口屏幕的问题
本帖最后由 pdwdzz 于 2023-1-13 23:11 编辑问题1:关于例程的。
#define DMA_AMT_LEN2047//n+1
u16 xdata Color;
.........
void LCD_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 color)
{
u16 i,j;
u16 width=ex-sx+1; //得到填充的宽度
u16 height=ey-sy+1; //高度
LCD_SetWindows(sx,sy,ex,ey);//设置显示窗口
for(j=0,i=0;i<=DMA_AMT_LEN;i++)
{
Color = color;
}
index = 75; //(320 * 240 * 2) / 2048 = 75
LCD_CS=0;
DMA_LCM_CR = 0xa0; //Write dat
while(!LCD_CS);
}
.......
void DMA_Config(void)
{
DMA_LCM_AMT = (u8)DMA_AMT_LEN; //设置传输总字节数(低8位):n+1
DMA_LCM_AMTH = (u8)(DMA_AMT_LEN>>8); //设置传输总字节数(高8位):n+1
DMA_LCM_TXAH = (u8)((u16)&Color >> 8);
DMA_LCM_TXAL = (u8)((u16)&Color);
// DMA_LCM_RXAH = (u8)((u16)&Buffer >> 8);
// DMA_LCM_RXAL = (u8)((u16)&Buffer);
DMA_LCM_STA = 0x00;
DMA_LCM_CFG = 0x82;
DMA_LCM_CR = 0x00;
}
如上节选历程定义的是u16的缓冲区,是4096字节。刷屏前填充颜色也是填充了2048次就是4096字节。
为什么到DMA传输,设置的是2048字节。是不是写错了??(这里写错并不会在实验现象上表现出来)。
还有我用的是16位屏幕,单独LCM已经好可行,现在加DMA范难了。不知道怎么配置了。
DMA一次传输会自动传输2字节吗?地址计数会自动+2吗?
周末都放假了,你先参考下这个程序,我不是研发,只能贴图给您
下载最新的数据手册
神农鼎 发表于 2023-1-13 23:17
周末都放假了,你先参考下这个程序,我不是研发,只能贴图给您
例程8位并口,因该是没什么问题的。我想驱动16位并口。目前依照所有资料包括我自己测试,好像不行。 本帖最后由 pdwdzz 于 2023-1-13 23:28 编辑
刚才测试了,好像是可行的。DMA传输字节总数这个寄存器,准确理解应该是数据搬移的次数。LCM16位时。设置1024就是搬移1024次,2048字节。每次地址自加2。
之前我按字节数设置,导致搬移超出数组的数据花屏。
开心,我贴个图都能帮到您,我这么多年不搞具体研发,只会贴图了:)
页:
[1]