1

我正在尝试配置 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];    
}  
4

1 回答 1

1

我认为您忘记了返回指令 ( BX LR),因此执行将继续到函数之后发生的任何数据。

我实际上建议使用 C 来初始化 MPU - 出错的机会更少,而且使用 CMSIS 标头很简单。

于 2013-05-28T14:16:30.127 回答