- 打卡等级:偶尔看看III
- 打卡总天数:39
- 最近打卡:2025-05-01 11:16:44
注册会员
- 积分
- 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
}
|
|