Style changes.
This commit is contained in:
parent
0412975efd
commit
a6af72d129
2 changed files with 61 additions and 61 deletions
|
@ -57,62 +57,65 @@ Berlin, 2007
|
||||||
#include <msp430/flash.h>
|
#include <msp430/flash.h>
|
||||||
#include "infomem.h"
|
#include "infomem.h"
|
||||||
|
|
||||||
void infomem_read(void* buffer, unsigned int offset, unsigned char size) {
|
void
|
||||||
UINT8* address = (UINT8*)INFOMEM_START + offset;
|
infomem_read(void *buffer, unsigned int offset, unsigned char size)
|
||||||
memcpy(buffer, address, size);
|
{
|
||||||
|
UINT8 *address = (UINT8 *) INFOMEM_START + offset;
|
||||||
|
memcpy(buffer, address, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool infomem_write(unsigned int offset, unsigned char count, ...) {
|
bool
|
||||||
char backup[INFOMEM_BLOCK_SIZE];
|
infomem_write(unsigned int offset, unsigned char count, ...)
|
||||||
|
{
|
||||||
|
char backup[INFOMEM_BLOCK_SIZE];
|
||||||
|
UINT8 *buffer;
|
||||||
|
UINT16 i;
|
||||||
|
UINT8 *flash;
|
||||||
|
va_list argp;
|
||||||
|
UINT16 size;
|
||||||
|
UINT8 *data;
|
||||||
|
|
||||||
register UINT8* buffer;
|
if (offset > (2 * INFOMEM_BLOCK_SIZE))
|
||||||
register UINT16 i;
|
return false;
|
||||||
UINT8* flash;
|
|
||||||
|
|
||||||
if( offset > ( 2 * INFOMEM_BLOCK_SIZE) )
|
flash = (UINT8 *) INFOMEM_START + offset;
|
||||||
return false;
|
|
||||||
|
|
||||||
flash = (UINT8*)INFOMEM_START + offset;
|
_DINT();
|
||||||
|
|
||||||
_DINT();
|
// backup into RAM
|
||||||
|
memcpy(backup, flash, INFOMEM_BLOCK_SIZE);
|
||||||
|
|
||||||
// backup into RAM
|
// merge backup with new data
|
||||||
memcpy(backup, flash, INFOMEM_BLOCK_SIZE);
|
va_start(argp, count);
|
||||||
|
|
||||||
// merge backup with new data
|
buffer = (UINT8 *) backup;
|
||||||
va_list argp;
|
for (i = 0; i < count; i++) {
|
||||||
va_start(argp, count);
|
data = va_arg(argp, UINT8*);
|
||||||
|
size = va_arg(argp, UINT16);
|
||||||
|
memcpy(buffer, data, size);
|
||||||
|
buffer += size;
|
||||||
|
}
|
||||||
|
|
||||||
buffer = (UINT8*)backup;
|
va_end(argp);
|
||||||
for( i = 0; i < count; i++ ) {
|
|
||||||
register UINT16 size;
|
|
||||||
register UINT8* data;
|
|
||||||
|
|
||||||
data = va_arg(argp, UINT8*);
|
// init flash access
|
||||||
size = va_arg(argp, UINT16);
|
FCTL2 = FWKEY + FSSEL1 + FN2;
|
||||||
memcpy(buffer, data, size);
|
FCTL3 = FWKEY;
|
||||||
buffer += size;
|
|
||||||
}
|
|
||||||
va_end(argp);
|
|
||||||
|
|
||||||
// init flash access
|
// erase flash
|
||||||
FCTL2 = FWKEY + FSSEL1 + FN2;
|
FCTL1 = FWKEY + ERASE;
|
||||||
FCTL3 = FWKEY;
|
*flash = 0;
|
||||||
|
|
||||||
// erase flash
|
// write flash
|
||||||
FCTL1 = FWKEY + ERASE;
|
FCTL1 = FWKEY + WRT;
|
||||||
*flash = 0;
|
buffer = (UINT8 *) backup;
|
||||||
|
for (i = 0; i < INFOMEM_BLOCK_SIZE; i++) {
|
||||||
|
*flash++ = *buffer++;
|
||||||
|
}
|
||||||
|
|
||||||
// write flash
|
FCTL1 = FWKEY;
|
||||||
FCTL1 = FWKEY + WRT;
|
FCTL3 = FWKEY + LOCK;
|
||||||
buffer = (UINT8*)backup;
|
|
||||||
for( i = 0; i < INFOMEM_BLOCK_SIZE; i++ ) {
|
|
||||||
*flash = *buffer;
|
|
||||||
buffer++; flash++;
|
|
||||||
}
|
|
||||||
FCTL1 = FWKEY;
|
|
||||||
FCTL3 = FWKEY + LOCK;
|
|
||||||
|
|
||||||
_EINT();
|
_EINT();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,21 +42,17 @@ Berlin, 2006
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file infomem.h
|
* @file infomem.h
|
||||||
* @addtogroup storage
|
* @addtogroup storage
|
||||||
* @brief MSP430 Infomemory Storage
|
* @brief MSP430 Infomemory Storage
|
||||||
*
|
*
|
||||||
* @author Michael Baar <baar@inf.fu-berlin.de>
|
* @author Michael Baar <baar@inf.fu-berlin.de>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef INFOMEM_H_
|
#ifndef INFOMEM_H
|
||||||
#define INFOMEM_H_
|
#define INFOMEM_H
|
||||||
|
|
||||||
/* These defines might depend on the specific CPU used and have to be defined in platform:
|
|
||||||
#define INFOMEM_START 0x1000
|
|
||||||
#define INFOMEM_BLOCK_SIZE 128
|
|
||||||
*/
|
|
||||||
#if !defined(INFOMEM_START) || !defined(INFOMEM_BLOCK_SIZE)
|
#if !defined(INFOMEM_START) || !defined(INFOMEM_BLOCK_SIZE)
|
||||||
#error "Infomemory position (INFOMEM_START) and blocksize (INFOMEM_BLOCK_SIZE) need to be defined for current platform"
|
#error "infomem position (INFOMEM_START) and block size (INFOMEM_BLOCK_SIZE) need to be defined for the platform"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -65,21 +61,22 @@ Berlin, 2006
|
||||||
* @param[in] offset Offset in infomemory (0-254)
|
* @param[in] offset Offset in infomemory (0-254)
|
||||||
* @param[in] size Number of bytes to read
|
* @param[in] size Number of bytes to read
|
||||||
*/
|
*/
|
||||||
void infomem_read(void* buffer, unsigned int offset, unsigned char size);
|
void infomem_read(void *buffer, unsigned int offset, unsigned char size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Write bytes to infomemory
|
* @brief Write bytes to infomemory
|
||||||
* @param[in] offset Offset in infomemory (0-254)
|
* @param[in] offset Offset in infomemory (0-254)
|
||||||
* @param[in] count Number of items following
|
* @param[in] count Number of items following
|
||||||
* each item is a pair pointer, length
|
* each item is a pair pointer, length
|
||||||
*
|
*
|
||||||
* Example: Infomem_write( 0, 2, &a,3, &b,1 );
|
* Example: Infomem_write( 0, 2, &a,3, &b,1 );
|
||||||
*
|
*
|
||||||
* \note: The MSP430 has two consecutive blocks of infomemory. Each is 128 Bytes large.
|
* \note: The MSP430 has two consecutive blocks of infomemory.
|
||||||
* The offset is the relative address starting at the beginning of the first block.
|
* Each is 128 bytes large. The offset is the relative address
|
||||||
* You can write an arbitrary number of bytes at any offse, but this
|
* starting at the beginning of the first block. You can write an
|
||||||
* function cannot write across the two blocks of infomemory.
|
* arbitrary number of bytes at any offset, but this function
|
||||||
|
* cannot write across the two blocks of infomemory.
|
||||||
*/
|
*/
|
||||||
bool infomem_write(unsigned int offset, unsigned char count, ...);
|
bool infomem_write(unsigned int offset, unsigned char count, ...);
|
||||||
|
|
||||||
#endif // INFOMEM_H
|
#endif // !INFOMEM_H
|
||||||
|
|
Loading…
Reference in a new issue