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.

[参考译文] TMS320F280049:CPU 获取保护

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1078377/tms320f280049-cpu-fetch-protection

部件号:TMS320F280049

您好:

我 正在执行 CPU 获取保护。testCPUFUetchFunc()函数位于 第0页的 ramls6中。 ramls6 设置为 CPU 粪便保护。 但它卡在 非法 ISR 中,不会返回到正常程序。  

下面是逐步运行的。

您能检查出问题的地方吗?

谢谢

#pragma code_section (testCPUFetchFunc,"ramls6");
testCPUFetchFunc( void);

UINT32_t generateMasterCPUFetchViolation()

UINT16_t 失败= 0U;
UINT16_t 超时= ISR_LOW_TIMEOUT;

//
//启用违规中断
//
MemCfg_enableViolationInterrupt (MEMCFG_MVIOL_CPUFETCH);

//
//设置获取保护,在中生成主 CPU 获取违规
// CPU 提取的大小写。
//
MemCfg_setProtection (MEMCFG_Section_LS6,MEMCFG_PROT_BLOCKCPUFETCH);

//
//清除访问冲突状态变量
//
illegalISRFlag =假;
小提琴 ISRFlag =假;
小提琴演奏者=0U;
违规状态= 0U;

//
//调用此函数(已放置在 LS6中)将导致 CPU
//获取访问权限违规。
//
testCPUFetchFunc();

//
//违规将产生 ITRAP 中断和 RAM 访问
//违规中断。
//
While (((illegalISRFlag != true)||(violationISRFlag != true))&&
(超时!= 0U))

超时--;
}

//
//禁用中断。
//
MemCfg_disableViolationInterrupt (MMCFG_MVIOL_CPUFETCH);

//
//检查中断是否按预期发生,或者循环是否超时。
//
IF (超时=0U)

FAIL++;
}

返回(失败);
}

无效 testCPUFetchFunc(无效)

NOP;
}

中断无效的非法 ISR(无效)

illegalISRFlag =真;

//
//需要删除 LS1RAM 的保护以允许我们返回。
//
MemCfg_setProtection (MEMCFG_Section_LS6,MEMCFG_PROT_ALLOWCPUFETCH);
MemCfg_setCLAMemType (MEMCFG_Sect_LS6,MEMCFG_CLA_MEEM_DATA);
}

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

    您好,  

    被困在非法 ISR 中意味着什么? 它是否不是来自 ISR,还是 非法 ISR 多次触发?  

    一旦触发了非法 ISR,您是否尝试过一次代码的逐步操作?  

    将尝试重现您所看到的问题并随时发布。

    此致

    西达尔斯

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

    感谢你的帮助

    它总是在 非法的 ISR 中运行,而不是从 ISR 中产生。  

    当尝试执行单步操作时,请  在地址“0x3616f3”处断开,但没有可用的调试信息,或者在程序代码之外。

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

    感谢您的回应,  

    将尝试重现您所看到的问题并随时发布。

    此致

    西达尔斯

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

    您好,  

    我可以运行该代码,而不会遇到任何此类问题。  我确实收到 了非法 ISR 中断,但从 ISR 返回后它返回到正常代码。

    您能否检查是否有其他代码分配给“RAMLS6”?  

    在我的案例中, testCPUFetchFunc 是 RAMLS6中唯一的代码。  

    附注:我在 F28388D 上试用了它,因为我没有 F280049C 板可用。  

    此致

    西达尔斯

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

    根据您的建议,我只将 testCPUFetchFunc() 分配给“RAMLS6”,RAM 部分如下所示,它使用[B000,b002]

    但当 ITRAP0出现时,所有 ramlsLS6 (包括 ramlsLS5  )都将更改为 ITRAP0。

    运行单步时,它在地址“0xb004”处断开,没有可用的调试信息,或在程序代码之外。

    为什么

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

    您好,

    这是我的拆分窗口的快照,请勿在代码中看到返回指令(RETUR)。

    您能否分享您的 CCS 项目,以便我了解一下?

    此致

    西达尔斯