请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR5962 大家好、所有专家、
我想保护 FRAM 部分、因为我在该文件中创建了一个名为 low_level_init.c 的文件、我编写了几行代码
#include <msp430.h>
extern unsigned char SYSNMIflag;// = 0;
unsigned int *ptr = 0;
unsigned int Data =0;
int __low_level_init(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop WDT
// Configure GPIO
P1DIR |= BIT0; // Configure P1.0 for LED
// Disable the GPIO power-on default high-impedance mode to activate
// previously configured port settings
PM5CTL0 &= ~LOCKLPM5;
// Configure MPU
MPUCTL0 = MPUPW; // Write PWD to access MPU registers
MPUSEGB1 = 0x0400; // B1 = 0x4000; B2 = 0x5FFF
MPUSEGB2 = 0x0440; // Borders are assigned to segments
// Segment 1 - Execute, Read
// Segment 2 - Execute, Read
// Segment 3 - Execute, Read
MPUSAM = MPUSEG1RE | MPUSEG1XE |
MPUSEG2RE | MPUSEG2XE |
MPUSEG3RE | MPUSEG3XE |
MPUSEGIRE | MPUSEGIWE| MPUSEGIXE;
MPUCTL0 = MPUPW | MPUENA | MPUSEGIE; // Enable MPU protection
// MPU registers locked until BOR
/*Data = 0x88;
// Cause an MPU violation by writing to segment 2
ptr = (unsigned int *)0x4000;
*ptr = Data;*/
while(SYSNMIflag) // Has violation occurred due to Seg2
{
P1OUT ^= BIT0; // Toggle LED
__delay_cycles(100000); // Delay to see toggle
MPUCTL0 = MPUPW;
SYSNMIflag = 0;
PMMIFG |= SVSHIFG;
}
return 1;
}
// System NMI vector
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector = SYSNMI_VECTOR
__interrupt void SYSNMI_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(SYSNMI_VECTOR))) SYSNMI_ISR (void)
#else
#error Compiler not supported!
#endif
{
switch (__even_in_range(SYSSNIV, SYSSNIV__CBDIFG))
{
case SYSSNIV__NONE: break;
case SYSSNIV__UBDIFG: break;
case SYSSNIV__MPUSEGPIFG: break;
case SYSSNIV__MPUSEGIIFG: break;
case SYSSNIV__MPUSEG1IFG: break;
case SYSSNIV__MPUSEG2IFG:
MPUCTL1 &= ~MPUSEG2IFG; // Clear violation interrupt flag
SYSNMIflag = 1; // Set flag
break;
case SYSSNIV__MPUSEG3IFG: break;
case SYSSNIV__VMAIFG: break;
case SYSSNIV__JMBINIFG: break;
case SYSSNIV__JMBOUTIFG: break;
case SYSSNIV__CBDIFG: break;
default: break;
}
}

但我可以看到、在内存位置0x4800中有 FF 3F FF 3F 3F... 等等?
1) 1)如何保护 FRAM 部分?
2) 2)如何卸下 FF 3F? 我认为这是 IPE、但我尚未启用它。
能不能有人尽快澄清这一点,因为这是紧急的。