pdwdzz 发表于 2023-1-13 23:10:16

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:06



周末都放假了,你先参考下这个程序,我不是研发,只能贴图给您

神农鼎 发表于 2023-1-13 23:18:15



下载最新的数据手册

pdwdzz 发表于 2023-1-13 23:21:27

神农鼎 发表于 2023-1-13 23:17
周末都放假了,你先参考下这个程序,我不是研发,只能贴图给您

例程8位并口,因该是没什么问题的。我想驱动16位并口。目前依照所有资料包括我自己测试,好像不行。

pdwdzz 发表于 2023-1-13 23:27:31

本帖最后由 pdwdzz 于 2023-1-13 23:28 编辑

刚才测试了,好像是可行的。DMA传输字节总数这个寄存器,准确理解应该是数据搬移的次数。LCM16位时。设置1024就是搬移1024次,2048字节。每次地址自加2。
之前我按字节数设置,导致搬移超出数组的数据花屏。

神农鼎 发表于 2023-1-13 23:33:14

开心,我贴个图都能帮到您,我这么多年不搞具体研发,只会贴图了:)
页: [1]
查看完整版本: DMA_LCM 驱动16位并口屏幕的问题