assembly lpc1788 MPU已配置,但进入HardFault处理程序

v1l68za4  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(85)

我正在尝试配置lpc1788的MPU以获得整个4GB空间作为可执行区域。以下是我到目前为止编写的代码,并在keil uVision 4调试器上看到了预期的结果。我对lpc1788的汇编语言编程没有经验。但我还是得到了结果。但是我不知道的是,在执行下面代码中的最后一条指令之后,执行进入hardFault Handler是否正常?还是我做错了什么?任何建议都会有很大的帮助。

#define MPU_CTRL  0xE000ED94    

__asm int mpu_init(void);  

int main()  
{  
    mpu_init();  
}  

_asm int mpu_init(void)  
{  
  LDR R0, =MPU_CTRL;  
  /* Disable MPU */  
  MOV R1, #0x4;  
  STR R1, [R0, #0x0];  
  MOV R2, #0x0;  
  STR R2, [R0, #0x4];   
  MOV R3, #0x030F;  
  LSL R6, R3, #16;  
  MOV R4, #0xFF3F;  
  STR R6, [R0, #0xC];  
  STRH R4, [R0, #0XC]  
  //MOV R5, #0x0;  
  //STR R5, [R0, #0x8];  
  /* Enable MPU */  
  MOV R1, #0x7;  
  STR R1, [R0, #0x0];    
}

字符串

to94eoyn

to94eoyn1#

我想你忘记了一个返回指令(BX LR),所以执行继续到函数后面的任何数据。
我实际上建议使用C来初始化MPU -出错的可能性较小,并且它是使用CMSIS头的trivial to do

相关问题