Jump to content

Saving Variable value in FRAM (MSP430Fr5969)

Recommended Posts

Hello All!

This is my first post on this forum. So kindly excuse me if i do any faux pas! I am planning to shift to MSP430 after using arduino for long time. 

I have written a small code to read ADC value and when i press a button adc value gets stored in a variable. Now want I want is to make available this value even after microcontroller restarts. 

Can anyone tell me how to store variable in Non volatile FRAM? I am using MSP430FR5969 launchpad. 

I have looked into following examples but they are of not helping me. I am using Energia to program my launchpad. 



#define buttonPin1 PUSH1
#define buttonPin2 PUSH2 // analog input pin to use as a digital input
#define ledPin1 RED_LED
#define ledPin2 GREEN_LED // digital output pin for LED 1 indicator
#define debounce 20 // ms debounce period to prevent flickering when pressing or releasing the button
#define holdTime 5000 // ms hold period: how long to wait for press+hold event
// Button variables
int buttonVal1 = 0; // value read from button
int buttonVal2 = 0;
int buttonLast1 = 0; // buffered value of the button's previous state
int buttonLast2 = 0;
long btnDnTime1; // time the button was pressed down
long btnDnTime2;
long btnUpTime1; // time the button was released
long btnUpTime2;
boolean ignoreUp1 = false; // whether to ignore the button release because the click+hold was triggered
boolean ignoreUp2 = false;
// LED variables
boolean ledVal1 = LOW;
boolean ledVal2 = LOW;
int sensorPin = A10;    // select the input pin for the potentiometer
int sensorValue = 0;  // variable to store the value coming from the sensor
int freq = 0;
int low;
int high;
void setup() 
// Set button input pin
pinMode(buttonPin1, INPUT_PULLUP);
pinMode(buttonPin2, INPUT_PULLUP);
// Set LED output pins
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(A11, OUTPUT);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
void loop(){
  sensorValue = analogRead(sensorPin);
  if (sensorValue>=low&&sensorValue<=high){
  freq = map(sensorValue, low, high, 0, 1000);
  tone(A11, freq);
  digitalWrite(ledPin1, LOW);
  digitalWrite(ledPin2, LOW);
    digitalWrite(RED_LED, HIGH);
    digitalWrite(GREEN_LED, LOW);
  if (sensorValue>high){
    digitalWrite(GREEN_LED, HIGH);
    digitalWrite(RED_LED, LOW);
  Serial.print("SensorValue= ");
  Serial.print("Freq= ");
  Serial.print("High= ");
  Serial.print("Low= ");
buttonVal1 = digitalRead(buttonPin1);
buttonVal2 = digitalRead(buttonPin2);
if (buttonVal1 == LOW && buttonLast1 == HIGH && (millis() - btnUpTime1) > long(debounce))
btnDnTime1 = millis();
if (buttonVal2 == LOW && buttonLast2 == HIGH && (millis() - btnUpTime2) > long(debounce))
btnDnTime2 = millis();
if (buttonVal1 == LOW && (millis() - btnDnTime1) > long(holdTime))
ignoreUp1 = true;
btnDnTime1 = millis();
if (buttonVal2 == LOW && (millis() - btnDnTime2) > long(holdTime))
ignoreUp2 = true;
btnDnTime2 = millis();
buttonLast1 = buttonVal1;
buttonLast2 = buttonVal2;
void Low(){
Serial.println("Low Value Set");
    tone(A11, 1500);
    digitalWrite(ledPin1, HIGH);
    digitalWrite(ledPin1, LOW);
void High(){
Serial.println("High Value Set");
    tone(A11, 2000);
    digitalWrite(ledPin2, HIGH);
    digitalWrite(ledPin2, LOW);









Share this post

Link to post
Share on other sites

See here: http://forum.43oh.com/topic/5474-energia-and-wolverine-tips/


Sent from my Galaxy Note II with Tapatalk 4

I did following modification in my energia code but after restarting i am getting garbage value! Not the one which was saved when pressing button.


int low __attribute__ ((section (".noinit"))) = 0xC200;
int high __attribute__ ((section (".noinit"))) = 0xC400;

Share this post

Link to post
Share on other sites


with .text garbage value is getting saved when i press button. 



int low __attribute__((section(".infomem")));
int high __attribute__((section(".infomem"))); 
is working for me as of now let me power on launch pad after long time. And by tomorrow i will let you know if its still working or not :D Thanks man!

Share this post

Link to post
Share on other sites

i did started launchpad after a long time no loss of memory. as of now i am sticking with infomem. As i get familiar with MSP430 and embedded C we can investigate this issue further 

Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now