NXP MCU 技术论坛
直播中

恐龙之家

9年用户 908经验值
私信 关注
[问答]

使用CAN通信升级遇到的程序问题求解

您好,我正在使用 BAM,并且在使用 CAN 通信升级我的程序时遇到问题。
用 JTAG 调试我的程序时,没有问题,但是通过 CAN 升级后,程序运行错误。当我阻止代码( INTC.心肺复苏术。B.PRI = 0;说完这句话,继续使用 CAN 升级,发现程序运行正常。
所以我问以下问题:
使用CAN升级我的程序时,如果我需要使用中断,是否需要做一些其他的初始化作,比如这个文件(mpc5500_booke.mac),如果是这样,我应该怎么写代码呢?




                                                                                                                                                                                 

回帖(1)

wufan931111

2025-4-8 17:42:19

在使用CAN通信升级MPC5500系列处理器的程序时,若遇到中断相关问题,需要特别注意以下关键点:




关键问题分析




  1. 启动方式差异



    • JTAG调试时芯片从调试接口直接加载完整镜像(包含中断向量表)

    • CAN升级时可能采用BAM模式启动,需要手动初始化中断控制器




  2. 中断控制器状态



    • BAM引导程序可能不会初始化INTC模块

    • 默认优先级(INTC.CPR.B.PRI)可能导致未处理的中断触发异常






解决方案




  1. 必要初始化步骤


    // 在启动代码中增加以下初始化
    void Init_INTC(void) {
    /* 1. 设置优先级阈值(类似用户操作的INTC.CPR.B.PRI = 0) */
    INTC.CPR.B.PRI = 0; // 允许所有优先级中断

    /* 2. 初始化向量表基地址 */
    INTC.IACKR.B.BASE = (uint32_t)&__IVPR_BASE; // 需与链接脚本一致

    /* 3. 使能关键中断(如CAN通信相关中断)*/
    INTC.PSR[IRQ_CAN_Rx].B.PRI = 8;  // 设置优先级
    INTC.PSR[IRQ_CAN_Tx].B.EN = 1;   // 使能中断

    /* 4. 同步操作 */
    __isync();
    __eieio();
    }



  2. 链接脚本配置(mpc5500_booke.mac):



    MEMORY {
    ivector : ORIGIN = 0x00FF8000, LENGTH = 4K
    }



SECTIONS {
.ivor_branch_handlers : {
*(.ivor_branch_handlers)
} > ivector


__IVPR_BASE = ADDR(.ivor_branch_handlers);

}



3. **启动流程验证**:
```c
void startup_entry(void) {
    /* 关键初始化顺序 */
    InitClock();     // 1. 时钟初始化
    InitRAM();       // 2. 内存初始化
    Init_INTC();     // 3. 中断控制器初始化 <-- 用户可能缺少此步骤
    main();
}



注意事项




  1. BAM模式特性



    • 引导程序不会初始化非必要外设

    • 应用程序需完整初始化使用的外设




  2. 调试技巧


    // 临时调试代码(监测INTC状态)
    printf("CPR当前值: 0x%08Xn", INTC.CPR.R);
    printf("IACKR寄存器: 0x%08Xn", INTC.IACKR.R);



  3. 常见错误模式



    • 中断服务函数未正确链接(通过-Xlinker --defsym=__IVPR_BASE=0x00FF8000确保)

    • 未处理的中断导致程序计数器跑飞(表现为随机崩溃)




建议通过以下流程图验证初始化流程:


BAM启动 -> 硬件复位 -> 时钟初始化 -> 内存初始化 -> INTC初始化 -> 外设初始化 -> main()
                        ↑                             ↑
                不同于JTAG的关键点          用户问题可能发生在此处
举报

更多回帖

发帖
×
20
完善资料,
赚取积分