我做了一个测试程序
section("sdram0_bank1") unsigned char DisplayBuffer_BGR888[480][800*3];
section("sdram0_bank2") unsigned char Inputdata[480*800*3+54];
void main(void)
{
FILE *fp;
int i=0;
int j=0;
DSPConfig();
fp = fopen("../1.bmp", "rb");
fread(Inputdata, 1, 480*800*3+54, fp);//bmp图像数据有54个字节的头信息,fread函数读出来为BGR顺序
fclose(fp);
for(i=0;i<480;i++)//缓冲数据读取到BGR888[]中
{
for(j=0;j<800*3;j++)
{
DisplayBuffer_BGR888[i][j] = Inputdata[i*2400+j+54];
}
}
for(i=0;i<480;i++)//转换为BGR565写入DisplayBuffer
{
for(j=0;j<800;j++)
{
DisplayBuffer[i+23][j] = DisplayBuffer_BGR888[i][j*3] & 0xF8;//B
DisplayBuffer[i+23][j] |= (DisplayBuffer_BGR888[i][j*3+1] >> 5) & 0x07;//GH
DisplayBuffer[i+23][j] = (DisplayBuffer[i+23][j] << 8) + ((DisplayBuffer_BGR888[i][j*3+1] << 3)& 0xe0);//GL
DisplayBuffer[i+23][j] |= (DisplayBuffer_BGR888[i][j*3+2] >> 3) & 0xF8;//R
}
}
PPI_TMR_DMA_Enable();
while(1);
return 0;
}
发现Inputdata[]数组中的数据传输总是正确的,不管放在哪个Bank中,
可是DisplayBuffer_BGR888[]中的数据总是全为0,不管放在哪个Bank中
DisplayBuffer[]是显示缓冲区。