- 打卡等级:常住居民III
 
				- 打卡总天数:179
 
				
				
				- 最近打卡:2025-11-04 08:24:32
 
				  
中级会员 
 
 
	- 积分
 - 380
 
 
 
 
 | 
 
 
发表于 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 
} 
 |   
 
 
 
 |