找回密码
 立即注册
楼主: 智胜电子

用25q16来存放60*60点的图片,调出来在屏上显示有时会花屏,怎么办?问题出在那?

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:39
  • 最近打卡:2025-05-01 11:16:44

16

主题

29

回帖

112

积分

注册会员

积分
112
发表于 2025-2-20 08:27:04 | 显示全部楼层
Ayb_*** 发表于 2025-2-19 15:39
这要看disp_ROMimage_XxY函数怎么操作的


void disp_ROMimage_XxY(int x,int y,int x1,int y1,u32 addr,u8 d)
{
        u16 len;

        len=x1*y1;
        len=len*2;
        len=len/d;         
        LCM_Config(len);    //每次传送 140*78*2/16=1365
        Flash_addr=addr;
       
        DmaBufferSW = 0;
        SPI_DMA_Config();                  //接收1,发送2
        SPI_Read_Nbytes(Flash_addr,len);   //接收1
        lcd_address(x,y,x1,y1);
        while(SpiDmaFlag);                                                     //发送2
        for(var_2048=0;var_2048<d;var_2048++)    //图片分16次传送,每次传1365个字节
        {
                LCM_SPI_DMA_BufSwitch();                 
                DMA_LCM_CR = 0xa1;                       //启动 DMA 开始发送数据
                Flash_addr += len;
                SPI_Read_Nbytes(Flash_addr,len); //接收2
                while(SpiDmaFlag);                     //发送1
        }
        while(!(DMA_LCM_STA&0x01));
        DMA_LCM_STA = 0x00;
        DMA_LCM_CFG = 0x00;
        DMA_LCM_CR = 0x00;
        DMA_SPI_CR = 0x00;                //bit7 1:使能 UART1_DMA, bit5 1:开始 UART1_DMA 自动接收, bit0 1:清除 FIFO
        DMA_SPI_STA = 0x00;
}

void LCM_Config(u16 len)
{
        EAXFR = 1; //使能访问 XFR
  CKCON = 0x00; //设置外部数据总线速度为最快
  WTST = 0x00; //设置程序代码等待参数,  
        LCMIFCFG = 0x00; //设置 LCM 接口为 8 位数据位,I8080 接口,数据口为 P2
        LCMIFCFG2 = 0x00;        //RS:P45,RD:P44,WR:P42; Setup Time=2,HOLD Time=1。厂家给的参数
        LCMIFSTA = 0x00;//标志位清零
  DMA_LCM_CR = 0x00;
        DMA_LCM_AMT = (u8)(len-1);                        //设置传输总字节数(低8位):n+1
        DMA_LCM_AMTH = (u8)((len-1)>>8);        //设置传输总字节数(高8位):n+1
  LCMIFCR = 0x80; //使能 LCM 接口
}

void SPI_Read_Nbytes(u32 addr, u16 len)
{
        if(len == 0)   return;
        if(!B_FlashOK)  return;
        while(SpiDmaFlag);                     //DMA忙检测
        while(CheckFlashBusy() > 0);        //Flash忙检测
        SPI_CE_Low();                       //enable device
        SPI_WriteByte(SFC_READ);            //read command

        SPI_WriteByte(((u8 *)&addr)[1]);    //设置起始地址
        SPI_WriteByte(((u8 *)&addr)[2]);
        SPI_WriteByte(((u8 *)&addr)[3]);

        SpiDmaFlag = 1;
        DMA_SPI_AMT = (u8)(len-1);         //设置传输总字节数(低8位):n+1
        DMA_SPI_AMTH = (u8)((len-1) >> 8); //设置传输总字节数(高8位):n+1
        DMA_SPI_CR |= 0x40;                 //开始SPI_DMA主模式操作
}

void lcd_address(int XS,int YS,int x_total,int y_total)
{
        int XE,YE;
        XE=XS+x_total-1;
        YE=YS+y_total-1;       
        transfer_command(0x2a);                // 设置X开始及结束的地址
        transfer_data_16(XS);        // X开始地址(16位)
        transfer_data_16(XE);        // X结束地址(16位)
                       
        transfer_command(0x2b);                // 设置Y开始及结束的地址
        transfer_data_16(YS);        // Y开始地址(16位)
        transfer_data_16(YE);        // Y结束地址(16位)

        transfer_command(0x2c);            // 写数据开始
}

void SPI_DMA_Config(void)
{
        //关闭接收DMA,下次接收的数据重新存放在起始地址位置,否则下次接收数据继续往后面存放。
        DMA_SPI_CR = 0x00;                //bit7 1:使能 UART1_DMA, bit5 1:开始 UART1_DMA 自动接收, bit0 1:清除 FIFO

        DMA_SPI_STA = 0x00;
        DMA_SPI_CFG = b11100000; //0xE5;                //bit7 1:Enable Interrupt, 提供SPI_DMA优先级
        DMA_SPI_AMT = (u8)(DMA_WR_LEN-1);         //设置传输总字节数(低8位):n+1
        DMA_SPI_AMTH = (u8)((DMA_WR_LEN-1) >> 8); //设置传输总字节数(高8位):n+1

        DMA_SPI_TXAH = (u8)((u16)&DmaBuffer2 >> 8);        //SPI发送数据存储地址
        DMA_SPI_TXAL = (u8)((u16)&DmaBuffer2);
        DMA_SPI_RXAH = (u8)((u16)&DmaBuffer1 >> 8);        //SPI接收数据存储地址
        DMA_SPI_RXAL = (u8)((u16)&DmaBuffer1);

        DMA_SPI_CFG2 = b00000011;//03h p3.5 0x01;        //01:P2.2
        DMA_SPI_CR = b10000001;  //0x81;                //bit7 1:使能 SPI_DMA, bit6 1:开始 SPI_DMA 主机模式, bit0 1:清除 SPI_DMA FIFO
}
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-29 08:28:25
已绑定手机

17

主题

446

回帖

1173

积分

金牌会员

积分
1173
发表于 2025-2-20 09:07:08 | 显示全部楼层
智胜*** 发表于 2025-2-20 08:27
Ayb_ice 发表于 2025-2-19 15:39
这要看disp_ROMimage_XxY函数怎么操作的

能显示应该基本功能没有问题,建议先不用DMA,成功后再修改成DMA方式
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 13:10 , Processed in 0.170827 second(s), 51 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表