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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1078828/tms320f280049-non-master-cpu-fetch-violation

部件号:TMS320F280049
“线程:测试”中讨论的其它部件

你好,亲爱的

作为 SRAM10测试的一部分,我正在执行从 CPU 的非法取款,这是按照 SDL 的“RAM 访问保护违规检测”示例进行的。  将内存 LS6设置为 CLA 的程序内存。 现在 ,调用此函数的 CPU 提取(已放入 LS6中)将导致 CPU 提取访问冲突。  
 但它将进入 illegalISR()并陷入其中,它仍在 中断中运行。最后,在地址0x3fb02a 处中断,没有可用的调试信息,或者在程序代码之外。

我的问题是:如何打破非法中断并运行正常程序。

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

UINT32_t 通气非主 CPU 紫外线()

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

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

//
//内存在 CLA 和 CPU 之间共享。
//
MemCfg_setLSRAMMasterSel (MEMCFG_Sect_LS6,MEMCFG_LSRAMMASTER_CPU_CLA1);

//
//将内存设置为 CLA 的程序内存。 现在是从 CPU 中提取的内容
//将导致非主 CPU 获取违规。
//
MemCfg_setCLAMemType (MEMCFG_Sect_LS6,MEMCFG_CLA_MEEM_PROGRAM);

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

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

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

超时--;
}

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

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

FAIL++;
}

//
//检查违规地址是否为 testCPUFetchFunc()。
//
IF (小提琴问题!=(UINT32_t)&testCPUFetchFunc)

FAIL++;
}

//
//确认检测到预期违规类型。
//
IF ((违反状态和 MEMCFG_NMVO_L_CPUFETCH)== 0U)

FAIL++;
}

返回(失败);
}

无效 testCPUFetchFunc(无效)

NOP;
}

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

illegalISRFlag =真;

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

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

    柱塞部分[B000,b827]的地图为  ITRAP0。

    00b81a:0000 ITRAP0
    00b81b:0000 ITRAP0
    00b81c:0000 ITRAP0
    00b81d:0000 ITRAP0
    00b81e:0000 ITRAP0
    00b81f:0000 ITRAP0
    00b820:0000 ITRAP0
    00b821:0000 ITRAP0
    00b822:0000 ITRAP0
    00b823:0000 ITRAP0
    00b824:0000 ITRAP0
    00b825:0000 ITRAP0
    00b826:0000 ITRAP0
    00b827:0000 ITRAP0

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

     在运行  SRAM10测试时,请按照 SDL 示例操作。

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

    RAMLS1         00008800  00000800 00000003 000007fd RWIX

    如何解决这个问题?

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

    您好,

    由于美国假期,请预计明天二月二十二日前作出回应。 给您带来不便的真诚道歉。

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

    您好,

    主题专家今天已不在办公室,将在几天内返回给您。

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

    你好,Jane,谢谢你的耐心。 使用 code_section (testCPUFetchFunc,"ramls6")将 testCPUFunc"放置在 LS6中时,testCPUFetchFunc 在“拆卸”窗口中显示为0x8800,这一点很奇怪。 您能否在 cmd 文件中检查 ramls6的定义?

    惠特尼

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

    另请注意,在 SDL 示例(最初使用 LS1而不是 LS6)中,我们确保将 ramls1 (testCPUFetchFunc)的内容从闪存复制到 RAM,因此不会在那里存储 ITRAP。

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ramls6 : > RAMLS6, PAGE = 1
    ramgs0 : > RAMGS0, PAGE = 1
    ramls1 : LOAD = FLASH_BANK0_SEC3,
    RUN = RAMLS1,
    LOAD_START(ramls1LoadStart),
    LOAD_SIZE(ramls1LoadSize),
    RUN_START(ramls1RunStart),
    PAGE = 0, ALIGN(4)
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    惠特尼

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

    感谢你的帮助

    将 ramls1 (testCPUFetchFunc)的内容从闪存复制到 RAM,分解 如下所示。 但它仍没有返回,并将跳到 地址“0xb003”中断,没有可用的调试信息,或者在单 步调试时超出程序代码范围。这种情况如何?

    我将我的项目文件(SDL_EX_RAM_ACCESS_PROTED.c,  *。CLA,*。cmd)更改为 SDL 示例(SDL_EX_RAM_ACCESS_Protect 项目),文件运行正常。区别 在于*。h 文件?

     

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

    您是否介意共享.cmd 文件中设置 RamFusaRunStart,RamFusaLoadStart 等...符号的行以及 memcpy 的位置? 您是否在 LS6上启用了任何可能阻止复制的安全措施?

    惠特尼