您好!
此时、我将面临 MPU 问题。 我的 Init 例程如下所示:
extern uint16_t LCF_crcMem_begin; #define beginement2 &LCF_crcMem_begin extern uint16_t LCF_code_forbide_begin; #define beginement3 &LCF_code_forbided_begin Int16_t _system_pre_init (void) { /*在此处插入低级初始化*/ /*禁用看门狗计时器以防止在*/期间复位 /*长变量初始化序列。 * WDTCTL = WDTPW | WDTHOLD; #ifdef halInterface_assembledVersion_radio //配置 MPU MPUCTL0 = MPUPW;//写入 PWD 以访问 MPU 寄存器 MPUSEGB1 =(uint16_t)(((uint32_t)初学者段2)>> 4); MPUSEGB2 =(uint16_t)(((uint32_t) BeginSegment3)>> 4);//边界被分配给段 //段1只允许读取和写入 //段2只允许读取和执行 //段3只允许读取和执行 MPUSAM = MPUSEG1WE | MPUSEG1RE | MPUSEG1XE | MPUSEG2WE | MPUSEG2RE | MPUSEG2XE | MPUSEG3WE | MPUSEG3RE | MPUSEG3XE; MPUCTL0 = MPUPW | MPUENA | MPUSEGIE;//启用 MPU 保护 // MPU 寄存器被锁定、直到 BOR #endif /*================================================ * /*选择是否进行段初始化*/ /*是否应完成。 * /*返回:0以省略初始化*/ /* 1运行初始化*/ /*================================================ */ 返回1; }
lcf_crcMem_begin ->为0x6800
lcf_code_forbide_begin ->为0x68C0
对于第一个测试、我允许所有部分都使用。 但我始终会得到复位。
我在 MPUSEG1中看到地址被正确写入(0x0680)、但在 MPUSEG2中、地址也被写入0x0680、尽管应该是0x068C。 数据表中有一个提示、即只应采用6-13位。 因此、对于该示例、这是可以的。 问题出在哪里?
此致
