打印
[其他ST产品]

不好意思,仍然是IAP请教

[复制链接]
2915|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tc741206|  楼主 | 2007-11-16 15:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请lut1lut,浪淘沙等各位DX再继续指点一下:

1、IAP3.0下载用户程序(gpio.bin)已经OK,我在GPIO的定时器里对电路板上的指示灯进行取反,证明用户程序的确已经运行,而且TIMER中断也进了。反复下载相同的gpio.bin,都提示下载OK。
   但是如果我修改了GPIO项目,然后生成新的gpio.bin,此时再次下载,却传送失败,提示“传送操作被远程系统取消”,我看了IAP程序,应该是flash写入后校验失败退出。
   此现象可以反复出现,不知各位DX可否帮忙在分析一下?好像flash只能写成功一次,之所以同一个可以反复写入,感觉像是同一个程序,所以读出校验正常?不知是不是如此。

2、如果我把IAP中flash的起始地址改成0x40004000(flash_program ,flash_offset等相关地方都改了),把gpio项目中lnkram.xcl中 修改成 DROMSTART = 0x40004000,重新下载程序,可以下载,但是用户程序却无法运行(中断中指示灯没有取反),不知是不是flash修改后还需要修改其它什么地方不?
沙发
tc741206|  楼主 | 2007-11-16 16:04 | 只看该作者

问题已经解决,但是不知道原因

通过仿真程序,第二个问题已经解决,在vect.s中少改了一条指令:LDR     PC, IRQ_Addr,但是这是地址改到0x40004000,如果改到0x40008000仍然无法下载程序,郁闷中。

地址改到0x40004000后,第一个问题也没有出现了,不知如何解释。看来还要继续研究,^_^

使用特权

评论回复
板凳
lut1lut| | 2007-11-16 16:24 | 只看该作者

re 1 楼

如果下载新的bin,不能写入flash,说明flash的写操作,及之前的擦除操作不成功。没有写进去,当然读出来会校验失败,这很可能是因为没有在对flash操作之前没有解除写保护。你看有没有?

并且如果改变了app.bin将要下载下去的地址(从0x4000,4000到其他地方,0x4000,8000比如),还要修改FLASH_SectorMask()这个函数!自己去看一下这个函数的实现就知道了。

使用特权

评论回复
地板
tc741206|  楼主 | 2007-11-16 17:28 | 只看该作者

谢谢lut1lut

感谢lut1lut的指点,程序加载这部分我差不多明白了,现在直接用你提供的gpio已经可以运行程序了。
另外还想请教一下:gpio项目中提供了定时器中断的处理,其它的中断不知是否直接初始化就可以了,不需要再重新计算EIC->SIR[bCounter]?如果把下面这段直接嵌入到我的程序中是否就可以了?
再次感谢。


extern u32 T0TIMI_Addr;
  u32 * p = (u32 *)& T0TIMI_Addr;
  u8 bCounter;
  u32 offset;

  
  EIC->ICR = 0x00000000; 
  EIC->IER = 0x00000000; 
  EIC->IPR = 0xFFFFFFFF; 
  EIC->FIR = 0x0000000C; 
  EIC->CIPR = 0x00000000; 
  
  EIC->IVR  = 0xEA000000; // IVR = high half of "B offset" instruction

  for (bCounter=0;bCounter<32;bCounter++)
    {
      offset = (((*p)&0xffff)+0x7E0) >> 2;
      p++;
      EIC->SIR[bCounter] = offset << 16;
    }
  }

使用特权

评论回复
5
lut1lut| | 2007-11-19 09:31 | 只看该作者

re 4 楼

是的,用这段代码初始化中断控制器即可,等同于调用EIC_Init()

使用特权

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

本版积分规则

5

主题

18

帖子

0

粉丝