TI中文支持网
TI专业的中文技术问题搜集分享网站

关于C6748的存储器保护单元(MPU)

因为程序在某些时候跑飞,想查找异常,但是无奈没有类似于ARM的“取指异常”与“访问异常”等异常,如对0地址的读写操作。

但看到MPU大概可以实现这个功能;,无奈相关资料太少;

并且<SPRUH79A>上说的MPU REVID(0x4E810101)与实际器件(0x4E814901)不一致.

找到另外一篇:

KeyStone Architecture Memory Protection Unit (MPU)
Literature Number: SPRUGW5A
June 2013

版本ID能对上,但按时间操作并无引起异常;

程序如下(仿真器调试):

HWREG(SOC_MPU_0_REGS + MPU0_PROG1_MPSAR) = 0x00000000;
HWREG(SOC_MPU_0_REGS + MPU0_PROG1_MPEAR) = 0x00000000 + 0x00700000 – 1;
HWREG(SOC_MPU_0_REGS + MPU0_PROG1_MPPA) = 0x03FFFE00;

p = (void*)1;
*p = 0x11;
val = *p;

按我理解应该是会引起异常的,虽然中断没开,至少“FLTSTAT”等寄存器会有变化;

是否有更详细的资料或参考代码;“C6748_StarterWare”中没有此部分例程。

tu wolfe:

问题太简单了?没人回答?

Tony Tang:

#1. C6748就参考SPRUH79A好了,你说的ID不对,可能是写错了,但不影响实际的操作。

#2. C6748的MPU只能对DDR,shareRAM做保护,你上面例子的地址不是这个范围,其实是配置不进去的。

#3. 你要的功能是DSP 核的memory protection功能,请参考sprufk5a。

tu wolfe:

回复 Tony Tang:

谢谢!

按你说法MPU即无法实现“访问非法存储区域”引起一个异常?

那如何产生“指令异常”与“数据异常”?

现在我所遇到的问题是程序有时候会跑飞,程序指针在0x0070000之后的地址,即是内部ROM;

我想做的工作是:访问非法的存储区时产生异常,在异常处理中记录产生异常的一些信息,如程序指针,堆栈信息等,以备查找原因。

赞(0)
未经允许不得转载:TI中文支持网 » 关于C6748的存储器保护单元(MPU)
分享到: 更多 (0)