Quantcast
Channel: MSP low-power microcontroller forum - Recent Threads
Viewing all articles
Browse latest Browse all 21948

CCS/MSP430G2553: write/read into information memory - the right way

$
0
0

Part Number:MSP430G2553

Tool/software: Code Composer Studio

Hi Everybody,

about information memory. the memory is byte addressable (i think)

it has 4 segments, each segment has 64 bytes (256 bytes overall).

it starts wth address: 0x1000 (segment D).  so if  i put a char (byte size) into this address. the next address to be available is 0x1001

and if after that i put a short (2 bytes), the next available address is  0x1003

if what i said is right, so why my code below not working correctly?

#include <msp430g2553.h>

#define END_OF_FLASH 0x0FFFF

void WriteCharToFlash(char* Flashptr, char val);
void WriteLongToFlash(long* Flashptr, long val);
void ReadCharFromFlash(char* address, char* val);
void ReadLongFromFlash(long* address, long* val);
void ClearAllFlash();

int main(void) {
	WDTCTL = WDTPW + WDTHOLD;
	BCSCTL1 = CALBC1_1MHZ;                    // Set DCO to 1MHz
	DCOCTL = CALDCO_1MHZ;
	FCTL2 = FWKEY + FSSEL0 + FN1;

	long val;
	char val2;
	ClearAllFlash();
	WriteCharToFlash((char *) 0x01000, '2');
	ReadCharFromFlash((char *) 0x01000, &val2);
	WriteLongToFlash((long *) 0x01001, 1234567);
	ReadLongFromFlash((long *) 0x01001, &val);

	ReadLongFromFlash((long *) 0x01001, &val);
	ReadCharFromFlash((char *) 0x01000, &val2);
	return 0;
}


void WriteLongToFlash(long* address, long val)
{
	long* flash_ptr;
	flash_ptr = address; // Initialize Flash pointer
	FCTL1 = FWKEY + ERASE;                    // Set Erase bit
	FCTL3 = FWKEY;                            // Clear Lock bit
	*flash_ptr = 0;
	while(FCTL3 & BUSY);
	FCTL1 = FWKEY + WRT;
	*flash_ptr = val;
	while(FCTL3 & BUSY);
	FCTL1 = FWKEY;                            // Clear WRT bit
	FCTL3 = FWKEY + LOCK;                     // Set LOCK bit
}

void ReadLongFromFlash(long* address, long* val)
{
	long* flash_ptr;
	flash_ptr = address;
	*val = *flash_ptr;
}

void WriteCharToFlash(char* address, char val)
{
	char* flash_ptr;
	flash_ptr = address; // Initialize Flash pointer
	FCTL1 = FWKEY + ERASE;                    // Set Erase bit
	FCTL3 = FWKEY;                            // Clear Lock bit
	*flash_ptr = 0;
	FCTL1 = FWKEY + WRT;
	*flash_ptr = val;
	FCTL1 = FWKEY;                            // Clear WRT bit
	FCTL3 = FWKEY + LOCK;                     // Set LOCK bit
}

void ReadCharFromFlash(char* address, char* val)
{
	char* flash_ptr;
	flash_ptr = address;
	*val = *flash_ptr;
}

void ClearAllFlash()
{
	char *flash_ptr;                         // Segment D pointer
	flash_ptr = (char *) 0x1000;             // Initialize Flash segment D pointer
	FCTL1 = FWKEY + MERAS;                    // Set Mass Erase bit
	FCTL3 = FWKEY;                            // Clear Lock bit
	*flash_ptr = 0;                          // Dummy write to erase Flash segment D
	FCTL1 = FWKEY + WRT;                      // Set WRT bit for write operation
	FCTL1 = FWKEY;                            // Clear WRT bit
	FCTL3 = FWKEY + LOCK;
}


Viewing all articles
Browse latest Browse all 21948

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>