Part Number:MSP430FR6989
Hello
I set to divide the segments by setting addresses in MPUSEGB 1 and 2.
It was written to FRAM to set MPUSAM.
However, even if MPUSEGxWE of MPUSAM is prohibited to write, it writes.
Program Example
#pragma LOCATION (Udata,0x4400)
int Udata [32][8]={
{0},
{0},
{0},};
int main(void)
MPUCTL0 = MPUPW;
MPUSEGB1 = 0x1000;
MPUSEGB2 = 0x1A00;
MPUSAM = MPUSEG1RE | MPUSEG1XE |MPUSEG1WE|
MPUSEG2RE | MPUSEG2XE |MPUSEG2WE|
MPUSEG3RE | MPUSEG3XE |MPUSEG3WE|
MPUSEGIRE | MPUSEGIWE| MPUSEGIXE;
for(i=0;i<32;i++){
for(j=0;j<8;j++){
Udata [i][j] = i;
if(j==8){
j=0;
}
}
}
MPUSAM &= ~MPUSEG1XE;
MPUSAM &= ~MPUSEG1WE;
MPUSAM &= ~MPUSEG2XE;
MPUSAM &= ~MPUSEG2WE;
for(i=0;i<32;i++){
for(j=0;j<8;j++){
Udata [i][j] = i+j+0x1000;
if(j==8){
j=0;
}
}
}
In this program I think that 0 will be written from 0x4400, but the value after prohibition will be written.
I confirmed that writing with MPUSAM is prohibited.
Regards.