5697|5

7

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

LPC1754 IAP 超级终端下程序不运行??? [复制链接]

最近做IAP升级,但是一直觉得程序下进去了(0x10000起的地址),但就是不运行新程序。我把写Flash的地方贴出:

     // 进行 IAP 操作

     #define APP_2_ADDR 0x10000

     (xPackSize 大小为1024)

     (&tData[3] 是超级彖端的有限数据首地址)


     zyIrqDisable();
     ProgramPage(APP_2_ADDR+(RecPacketNum-1)*xPackSize, xPackSize, &tData[3]);
     RecPacketNum++;
     zyIrqEnable();

写是肯定写进去,因为我有对扇区读测试。

初步分析是中断向量问题,这些到底是怎么弄的,望高手指点呀!

此帖出自NXP MCU论坛

最新回复

楼主,现在解决了吗?能共享一下代码吗?  详情 回复 发表于 2013-11-27 14:39
点赞 关注
 

回复
举报

2131

帖子

0

TA的资源

至上芯片

沙发
 

回复 楼主 BigLee1986 的帖子

LPC的应该是把中断向量表读到RAM中,然后在跳转
此帖出自NXP MCU论坛
 
个人签名处处留心皆学问!
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发 daicheng 的帖子

SCB->VTOR = APP_2_ADDR & 0x1FFFFF80;
BootJump(APP_2_ADDR);
这就是你说的吧
我原来就是这样
此帖出自NXP MCU论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 沙发 daicheng 的帖子

我把这两个子函数贴出来,看是不是哪里错了
__asm void BootJump(u32 address)
{
        LDR SP, [R0]                // Load new stack pointer address
        LDR PC, [R0, #4]        // Load new program counter address
}

__asm s32 zyIrqDisable(void)
{
        CPSID   I
        MOV     R0, #0
        BX      LR
}

__asm s32 zyIrqEnable(void)
{
        CPSIE   I
        MOV     R0, #0
        BX      LR
}

u16 ProgramPage(u32 adr, u32 sz, u8 *buf)
{
        u32 n;

#if SET_VALID_CODE != 0    // Set valid User Code Signature
        if(adr == 0)    // Check for Interrupt Vectors
        {
                n =  *((u32 *)(buf + 0x00)) +        // Reset Vector
                        *((u32 *)(buf + 0x04)) +        // Undefined Instruction Vector
                        *((u32 *)(buf + 0x08)) +        // Software Interrupt Vector
                        *((u32 *)(buf + 0x0C)) +        // Prefetch Abort Vector
                        *((u32 *)(buf + 0x10)) +        // Data Abort Vector
                        *((u32 *)(buf + 0x14)) +        // IRQ Vector
                        *((u32 *)(buf + 0x18));                // FIQ Vector
                *((u32 *)(buf + 0x1C)) = 0 - n;        // Signature at Reserved Vector
        }
#endif

        n = GetSecNum(adr);        // Get Sector Number

        IAP.cmd    = 50;        // Prepare Sector for Write
        IAP.par[0] = n;        // Start Sector
        IAP.par[1] = n;        // End Sector
        IAP_Call(&IAP.cmd, &IAP.stat);                // Call IAP Command
        if(IAP.stat)
        {
                return (1);        // Command Failed
        }

        IAP.cmd    = 51;        // Copy RAM to Flash
        IAP.par[0] = adr;        // Destination Flash Address
        IAP.par[1] = (u32)buf;        // Source RAM Address
        IAP.par[2] = sz;        // Fixed Page Size
        IAP.par[3] = CCLK;                // CCLK in kHz
        IAP_Call(&IAP.cmd, &IAP.stat);                // Call IAP Command
        if(IAP.stat)
        {
                return (1);        // Command Failed
        }

        return (0);          // Finished without Errors
}
此帖出自NXP MCU论坛

点评

樓主你好, 最近也在做LPC11C24 的IAP online升級程式。 參考您寫的這段碼進行跳轉: (如使用function pointer跳轉會觸發\"HardFault_Handler\") __asm void BootJump(u32 address) { LDR SP, [R0]  详情 回复 发表于 2013-11-11 01:11
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 4楼BigLee1986 的帖子

樓主你好,

最近也在做LPC11C24 的IAP online升級程式。
參考您寫的這段碼進行跳轉: (如使用function pointer跳轉會觸發"HardFault_Handler")
__asm void BootJump(u32 address)
{
        LDR SP, [R0]                // Load new stack pointer address
        LDR PC, [R0, #4]        // Load new program counter address
}

但是MDK 4.54顯示編譯錯誤如下: (用TKStudio4.6 也顯示相同錯誤)
error: A1875E: Register Rt must be from R0 to R7 in this instruction

經過測試,結果是SP 及 PC 不允許放在LDR的第一個欄位。
請問您是怎麼設定才能編譯過的?
此帖出自NXP MCU论坛
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

6
 
楼主,现在解决了吗?能共享一下代码吗?
此帖出自NXP MCU论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表