打印

uart实现IAP问题

[复制链接]
1810|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
juanhao|  楼主 | 2012-4-15 22:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
iap, UART, ic, se, vi
我的项目分为2部分,一是IAP(0X8000000~0X8002000),这部分没有写NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000),二是应用程序(0X8002000~0X8003FFF), 系统复位后执行IAP程序,首先检查是否需要升级,需要则抓取USER.BIN升级,不需要则跳到应用程序区,在应用程序里映射向量表,NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000);IAR的LINKER里FLASH起始地址也是从0X8002000开始的。本意是在应用程序区里如果收到IAP指令后调用软件复位指令NVIC_GenerateSystemReset产生复位回到IAP程序去执行升级,只是我用示波器看RESET脚没有复位产生。但是在IAP里面的同样软件复位指令却可以产生复位信号。请有做过的朋友指点下问题出在哪里?
沙发
juanhao|  楼主 | 2012-4-17 15:32 | 只看该作者
为什么软件复位不能跳回去

使用特权

评论回复
板凳
lut1lut| | 2012-4-17 15:50 | 只看该作者
产生系统复位信号,那么复位后内核去哪里读取复位向量Reset_Handler呢?那当然是去复位向量reset vector里面的offset=4的地方取地址。(offset=0的地方时堆栈指针值)。既然你之前已经执行过NVIC_SetVectorTable,就重定位了向量表,那么自然去0x08002004这里取地址,你看是执行这里的代码伐?

使用特权

评论回复
地板
lut1lut| | 2012-4-17 15:53 | 只看该作者
另外这个软件复位指令“NVIC_GenerateSystemReset”是做什么操作啊?

哪个寄存器。

使用特权

评论回复
5
juanhao|  楼主 | 2012-5-1 00:09 | 只看该作者
最后发现是复位IC的问题。

使用特权

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

本版积分规则

92

主题

187

帖子

0

粉丝