TA的每日心情 | 开心 2014-8-18 10:55 |
---|
签到天数: 4 天 连续签到: 1 天 [LV.2]偶尔看看I
|
我用的屏是分辨率为640x480的8.4寸TTL接口工业屏。所以程序作以下修改。
1,跟踪 tft_init(); -> BP_Init_RA8875();
将void BP_Init_RA8875(void)函数内的
/*4:水平设置 */
WriteCommand(0x14);
WriteData(0x3B); //水平显示宽度(像素) = (HDWR + 1)*8 = 480
改成
WriteCommand(0x14);
WriteData(0x4F); //640
/*5:垂直设置*/
WriteCommand(0x19); //垂直显示高度低8位 [0-7] (VDHR0)
WriteData(0x0f);
改成
WriteCommand(0x19);
WriteData(0xdf); //480
/*6.活动窗口active window设置*/
//水平方向设置
WriteCommand(0x34); //水平结束点低位 (HEAW0)
WriteData(0xDF);
WriteCommand(0x35); //水平结束点高位 (HEAW1)
WriteData(0x01);
改成
WriteCommand(0x34); //水平结束点低位 (HEAW0)
WriteData(0x7F);//0x027F=639
WriteCommand(0x35); //水平结束点高位 (HEAW1)
WriteData(0x02); //0x027F=639
//垂直方向设置
WriteCommand(0x36); //垂直结束点低位 (VEAW0)
WriteData(0x0F);
WriteCommand(0x37); //垂直结束点高位 (VEAW1)
WriteData(0x01);
改成
WriteCommand(0x36); //垂直结束点低位 (VEAW0)
WriteData(0xdF);//0x01dF=479
WriteCommand(0x37); //垂直结束点高位 (VEAW1)
WriteData(0x01); //0x01dF=479
水平设置和垂直设置方面只要设置以上寄存器便可,其他寄存器可以不修改。
2,跟踪 LcdClear(WHITE);
将void LcdClear(u16 color)函数内的
Geometric_Coordinate(0,479,0,271); // 设定矩形坐标
改成
Geometric_Coordinate(0,639,0,479); // 设定矩形坐标
3,SROM_CLK_DIV(3);
改成SROM_CLK_DIV(0);
将SPIFLASH时钟设置为系统时钟,加快DMA的传输速率。
4,添加语句
bmp_tf2flash("bmp/b01.bmp",bmp_address1);
bmp_tf2flash("bmp/b02.bmp",bmp_address4);
bmp_tf2flash("bmp/b565.bmp",bmp_address12);
说明:
(1)bmp_address12是我添加的一个宏定义
追踪可以查看到:#define bmp_address12 0x700000 //SPIFLASH总空间为8M,访问地址空间为0x0~0x800000
b01.bmp,b02.bmp,b565.bmp是我自己用位图转换程序做的一个16位色的640x480分辨率的bmp格式的图片。
一幅图片所占用的存储空间为640*480*2字节=0x96000字节,所以所占用的地址空间为0x96000,再加上图片的文件头1K空间,总共为0x96400所以宏定义图片在SPIFLASH存储地址时要注意。比如 bmp_address4 - bmp_address1 > = 0x96400
(2)追踪bmp_tf2flash("bmp/b01.bmp",bmp_address1); -> u32 bmp_tf2flash(char * bmpfile,u32 startaddress)
将u32 bmp_tf2flash(char * bmpfile,u32 startaddress)内的spiflash_writewithoutcheck((u8 *)(&fbmpheader),addr,sizeof(fbmpheader)); //写文件头
改成
spiflash_write((u8 *)(&fbmpheader),addr,sizeof(fbmpheader)); //写文件头
spiflash_writewithoutcheck(mem,addr,G_READCNT); //写入FLASH
改成
spiflash_write(mem,addr,G_READCNT); //写入FLASH
spiflash_writewithoutcheck(mem,addr,lastbytes); //写入剩余字节
改成
spiflash_write(mem,addr,lastbytes); //写入剩余字节
spiflash_write()函数是先擦除再写;spiflash_writewithoutcheck()是直接写,没有擦除操作。
5,主循环语句改为
bmp_dispflash(bmp_address1,0,0);
delay_ms(500);
delay_ms(500);
delay_ms(500);
delay_ms(500);
bmp_dispflash(bmp_address4,0,0);
delay_ms(500);
delay_ms(500);
delay_ms(500);
delay_ms(500);
bmp_dispflash(bmp_address12,0,0);
delay_ms(500);
delay_ms(500);
delay_ms(500);
delay_ms(500);
至此,移植结束。源码包见1楼
|
|