This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28379D:定制引导加载程序后的 PIE

Guru**** 2616255 points

Other Parts Discussed in Thread: C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1007997/tms320f28379d-pie-after-a-custom-bootloader

器件型号:TMS320F28379D
主题中讨论的其他器件:C2000WARE

您好!

我们构建了一个次级引导加载程序、该加载程序在引导后运行、然后跳转到应用程序。

这在两个内核上都成功同步完成。

问题:应用程序运行、但两个应用程序上似乎都没有任何中断工作。

----------

更多信息:

----------

我没有想法、希望大家能帮我解决问题。

谢谢、

卢卡斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    卢卡斯

    您是在 SYS/BIOS 应用程序中仅使用中断、还是在次级引导加载程序中也使用中断? 您能否帮助我了解次级引导加载程序的一般功能?

    加载应用程序符号时、是否加载了 GEL 文件?  如果是这样、请从目标配置中删除 GEL 文件、以便不存在可能更改运行环境的后台自动后台活动。

    Tommy

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Tommy、

    引导加载程序和应用程序都使用中断。

    在跳转到应用程序(启动命令)之前、次级引导加载程序可以接收来自" HEAD "处理器的命令(例如版本、启动、更新等)。

    GEL 文件已加载。 删除它不起作用。

    我认为在跳转到应用程序代码之前、我缺少初始化(重置/重新启动)所执行的操作。 明白了吗?

    BR、

    卢卡斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    卢卡斯

    GEL 文件将在后台执行少量初始化序列、这对用户来说可能是不明显的。 当程序通过 CCS 加载时正常工作、但不能独立工作时、有时是因为程序缺少在 GEL 中执行的初始化序列。 在这种情况下、我们期望在加载没有 GEL 文件的程序时会产生类似的故障。

    如果您希望更深入地了解引导 ROM 的功能、可以在 C2000Ware 中找到源代码: ~\C2000Ware_XXXX\libraries\boot_rom\f2837xd\revB\rom_sources\F2837x_bootrom\cpu01-bootrom\source

    由于次级引导加载程序和主应用程序中的中断都有问题、我建议使用从次级引导加载程序派生的简化程序进行调试、现在不要使用主应用程序。

    Tommy

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Tommy、

    我认为我们彼此间的分歧是相互支持的。  引导加载程序和 主应用程序均按预期单独工作(连接或未连接到 CCS)。

    实际上、引导加载程序始终正常工作、并回答我的命令以存储新映像并跳转到应用程序(使用中断)。

    应用程序中断不会仅在引导加载程序跳转后运行。

    我将查看您提到的源代码、看看我是否可以找到任何内容。

    卢卡斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    卢卡斯

    感谢您的澄清。 在进行分支之前、您是否禁用了所有全局、组和外设中断?

    如果不是、则在 CPU 执行从次级引导加载程序转换到应用程序期间可能会触发中断。 如果一个组内有多个挂起源、或者如果一个模块在后台运行、在后台运行、它可以触发其他中断、那么清除幻象中断可能会很棘手。

    Tommy

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、这可能是问题所在。

    我正在尝试禁用全局和 PIE 中断"启用"、并在 使用以下代码跳转之前清除某些 PIE 标志。 对吗?

    DINT;
    IER = 0x0000;
    IFR = 0x0000;
    PieCtrlRegs.PIEACK.all = 0xFFFF;

    您还让我在跳转之前禁用引导加载程序外设中断。 它应防止幻象中断。

    我将尝试它、然后用新闻回复。

    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    卢卡斯

    在禁用序列之后、似乎仍可能有 PIEIER 位继续执行。 我建议使用 C2000Ware 示例中的序列。

    标题示例(行85-114):~\C2000Ware_XXXX\device_support\f2837xd\examples\CPU1\CPU_timers\cpu01\CPU_timers_cpu01.c

    Driverlib 示例(行99-109):~\C2000Ware_XXXX\driverlib\f2837xd\examples\cpu1\timer\timer_ex1_cputimers.c

    Tommy

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Tommy、

    问题迎刃而解!

    通过我们的对话:

    • 现在、引导加载程序会在跳转到应用程序之前禁用所有使用过的外设中断和时钟。 因此不再有幻象中断。
    • 应用程序现在会初始化 PIE_CTRL、启用和确认 PIE 中断。 它不会初始化 PIE_Vect、因为它是 SYS/BIOS 应用程序。

    此外、我必须重新配置一些 LSRAM 主配置。 CLA 函数的应用 memcpy 和进入 LSRAM 的常量不起作用、因为引导加载程序已经更改了存储器配置。

    下面是跳转之前的引导加载程序代码片段:

    # CPU1 - Bootloader
    
    IPCLtoRFlagSet(IPC_FLAG21);
    while(IPCRtoLFlagBusy(IPC_FLAG21));
                
    EALLOW;
    
    DINT;
    
    CpuTimer0.RegsAddr->TCR.bit.TIE = 0;
    
    SpibRegs.SPICTL.bit.SPIINTENA = 0;
    SpibRegs.SPIFFRX.bit.RXFFIENA = 0;
    SpibRegs.SPIFFTX.bit.TXFFIENA = 0;
    
    Cla1Regs.MIER.all = 0;
    
    CpuSysRegs.PCLKCR0.bit.CPUTIMER0 = 0;
    CpuSysRegs.PCLKCR8.bit.SPI_B = 0;
    CpuSysRegs.PCLKCR0.bit.CLA1 = 0;
    
    MemCfgRegs.LSxMSEL.bit.MSEL_LS0 = 0;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS0 = 0;
    MemCfgRegs.LSxMSEL.bit.MSEL_LS1 = 0;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS1 = 0;
    MemCfgRegs.LSxMSEL.bit.MSEL_LS2 = 0;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS2 = 0;
    MemCfgRegs.LSxMSEL.bit.MSEL_LS3 = 0;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS3 = 0;
    MemCfgRegs.LSxMSEL.bit.MSEL_LS4 = 0;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS4 = 0;
    MemCfgRegs.LSxMSEL.bit.MSEL_LS5 = 0;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS5 = 0;
    
    EDIS;
    
    asm(" LB 0x084000");

    # CPU2 - Bootloader
    
    IPCRtoLFlagAcknowledge(IPC_FLAG21);
    
    EALLOW;
    
    DINT;
    
    CpuTimer0.RegsAddr->TCR.bit.TIE = 0;
    Cla1Regs.MIER.all = 0;
    
    CpuSysRegs.PCLKCR0.bit.CPUTIMER0 = 0;
    CpuSysRegs.PCLKCR0.bit.CLA1 = 0;
    
    MemCfgRegs.LSxMSEL.bit.MSEL_LS0 = 0;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS0 = 0;
    MemCfgRegs.LSxMSEL.bit.MSEL_LS1 = 0;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS1 = 0;
    MemCfgRegs.LSxMSEL.bit.MSEL_LS2 = 0;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS2 = 0;
    MemCfgRegs.LSxMSEL.bit.MSEL_LS3 = 0;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS3 = 0;
    MemCfgRegs.LSxMSEL.bit.MSEL_LS4 = 0;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS4 = 0;
    MemCfgRegs.LSxMSEL.bit.MSEL_LS5 = 0;
    MemCfgRegs.LSxCLAPGM.bit.CLAPGM_LS5 = 0;
    
    EDIS;
    
    asm(" LB 0x084000");

    以下是 应用程序初始化代码片段:

    # Both CPUs
    
    InitSysCtrl();
    
    InitPieCtrl();
    
    EnableInterrupts();
    
    ERTM;
    
    # Some code before SYSBIOS ...
    
    BIOS_start();

    感谢您的帮助!

    BR、

    卢卡斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    卢卡斯

    我很高兴听到您解决了这个问题。 感谢您分享您的解决方案以造福他人!

    Tommy