K64 MPU问题

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

K64 MPU问题

2,582 Views
joeqiao
Contributor II

K64 MPU问题:为什么在设置K64的MPU的RGD0的时候会出现总线错误的问题:

流程如下:

SYSMPU_Init()//配置MPU,传入的参数只设置REGION 1 ,不设置REGION 0。REGION 0值为默认值。

EnableBusFaultIrq() //使能总线错误中断

(*(volatile unsigned int*)0x4000D40C) = 0 //这里会出现“总线错误”异常

SYSMPU->WORD[0][1] = 0xFFFFFFFF; //这里也会出现“总线错误”异常

请问这个是什么原因?

谢谢!

Labels (1)
Tags (2)
4 Replies

2,429 Views
Hui_Ma
NXP TechSupport
NXP TechSupport

你好,

请提供完整的工程软件,我可以在FRDM-K64板子测试一下,看看能否复现这个问题。

谢谢。


Have a great day,
Mike

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 Kudos
Reply

2,429 Views
joeqiao
Contributor II

您好:多谢您的答复!

          工程在附件中,该工程是SDK中的 SDK_2.3.0_FRDM-K64F\boards\frdmk64f\driver_examples\sysmpu的工程,没有太多修改。

 在main函数的下面这个位置会进入总线错误的异常:

// (*(volatile unsigned int*)0x4000D40C) = 0;
SYSMPU->WORD[0][1] = 0xFFFFFFFF;

   另外关于MPU有几个问题咨询一下:

  (1)MPU的重叠的Regoin地址保护的问题:如果地址处于Regoin A和Regoin B中,RegoinA不允许访问,RegoinB允许访问;那最终的结果是运行访问的?(这是我测试的结果)

  (2)Regoin 0是不是有什么特殊性?其默认是运行全地址可读写的,那如果有2个Regoin(1 和 2 ),如果只是想Regoin 1中禁止访问生效,也要把Regoin 0设置成禁止的才行?这样Regoin 1和Regoin 2未覆盖到的区域就无法访问了?

谢谢!

0 Kudos
Reply

2,429 Views
Hui_Ma
NXP TechSupport
NXP TechSupport

Hi,

抱歉回复晚了。

K64的手册里面有下列描述:

pastedImage_1.png

pastedImage_2.png

所以通过代码(core)来改变RGD0相关寄存器值时,系统会产生异常。

MPU重叠区域的保护采用“或”逻辑,只要有一个RGD保护了,这块重叠区域访问就会受到限制。

pastedImage_3.png

best regards,

Mike

2,429 Views
joeqiao
Contributor II

多谢你的解释,已经解惑了!

再次感谢!

0 Kudos
Reply