打印

请教用LPC2214外扩FLASH,数组调用问题,附代码

[复制链接]
1887|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bit6019|  楼主 | 2010-4-28 15:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的LCD显示字符存入外部FLASH,起始地址为0X81000000,想在显示函数(2214内部)中调用,应该怎样定义调用地址?
试了很多方法都报警,代码如下:要显示的数组为gImage_pic1[]
uint32 pic0_addr=0x81000000;
uint32 *p=&pic0_addr;

int8  gImage_pic1[];

&gImage_pic1[0]=p;

请教应该怎样定义?谢谢

相关帖子

沙发
bit6019|  楼主 | 2010-4-28 15:39 | 只看该作者
// 显示图片1
void  Disp_Pic1(void)
{  uint32  x, y;
   uint32  no;
   uint16  dat;
   
   TftSetWrite(0,0);
   no = 0;
   for(y=0; y<320; y++)
   {  for(x=0; x<240; x++)
      {  dat = ( p[no+1]<<8) |( p[no]);
         TftSendDat(dat);
         no++;  
         no++;         
      }
   }
}

此为调用函数,不能显示

使用特权

评论回复
板凳
六楼的窗户| | 2010-4-28 15:40 | 只看该作者
uint32 pic0_addr=0x81000000;  
uint32 *p=&pic0_addr;  
这里好像有点问题
你是不是想把P指向0x81000000呢。
如果是的话应该这样:
uint32 *p;
p=(uint32*)0x8100000;

使用特权

评论回复
地板
金鱼木鱼| | 2010-4-28 15:40 | 只看该作者
uint32 *p;  
p=(uint32*)0x8100000;这个写法还可以,但是外部数据读进来还得配合相应的操作时序

使用特权

评论回复
5
bit6019|  楼主 | 2010-4-28 15:41 | 只看该作者
这两天在外没上网,没看到回复,今天才看到,谢谢

我的开发板是SMARTARM2200,外扩FLASH为SST39VF1601,我程序现改成这样,已经没有报错,但还是读不到数据,因为显示这个部分时为黑屏,程序如下:

// 声明外部图片数据
uint32 pic1_addr=0x81000000;
uint32 pic2_addr=0x81025800;
uint32 pic3_addr=0x8104B000;
uint32 pic4_addr=0x81070800;
uint32 pic5_addr=0x81096000;
uint32 pic6_addr=0x810BB800;
uint32 pic7_addr=0x810E1000;
uint32 pic8_addr=0x81106800;
//uint32 *p=&pic0_addr;

extern uint8  gImage_xp[];
extern uint8  gImage_pic1[];
extern uint8  gImage_pic2[];
extern uint8  gImage_pic3[];
extern uint8  gImage_pic4[];
extern uint8  gImage_pic5[];
extern uint8  gImage_pic6[];
extern uint8  gImage_pic7[];
extern uint8  gImage_pic8[];

// 显示图片1
void  Disp_Pic1(void)
{  uint32  x, y;
   uint32  no;
   uint16  dat;
   *gImage_pic1=pic1_addr;
   TftSetWrite(0,0);
   no = 0;
   for(y=0; y<320; y++)
   {  for(x=0; x<240; x++)
      {  dat = (gImage_pic1[no+1]<<8) |gImage_pic1[no];
         TftSendDat(dat);
         no++;  
         no++;         
      }
   }
}

// 显示图片2
void  Disp_Pic2(void)
{  uint32  x, y;
   uint32  no;
   uint16  dat;
   *gImage_pic2=pic2_addr;
   TftSetWrite(0,0);
   no = 0;
   for(y=0; y<320; y++)
   {  for(x=0; x<240; x++)
      {  dat = (gImage_pic2[no+1]<<8) | gImage_pic2[no];
         TftSendDat(dat);
         no++;  
         no++;         
      }
   }
}

请指点,谢谢

使用特权

评论回复
6
doomhaha| | 2010-4-28 15:46 | 只看该作者
改成uint32 *p=(uint32 *)pic0_addr; 试试

使用特权

评论回复
7
doomhaha| | 2010-4-28 15:56 | 只看该作者
SST39VF1601应该是16bit位宽的,没法做到以byte为单位的访问,*gImage_pic1=pic1_addr; 这样写可能会有问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

221

主题

1344

帖子

1

粉丝