On Fri, 2003-12-05 at 14:23, D.Pageau wrote:
> I'm looking for example on how to self read/write the 2x 128Bytes 
> information memory (flash) with mspgcc
> 
> Thanks
> 
> -- 
> Dominic Pageau

Just have a look to the attachment, there is a read_ffs() and a
write_ffs(), simply ignore the data allocation and attempt to the flash
self-programming system initialization.
It works but isn't so beautiful, sorry, but I hope it can help ...

regards 

-- 
Celso Providelo
cp...@gwyddion.com
Linux user #166906
Gwyddion - http://www.gwyddion.com 
GNUsp Project
LAMI-Laboratories of Microprocessors
Department of Electrical Engineering
University of Sao Paulo (USP - Sao Carlos) 
#include <io.h>
#include <signal.h>

/* write configurations in the internal Flash (256 bytes). */
void write_ffs(void)
{
  /*  Flash Memory pointer */
  int * Flash_int_ptr;
  int i;

  dint();
  /*  MCLK/2 for Flash Timing Generator */
  FCTL2 = FWKEY + FSSEL0 + FN0;
  /*  Initialize Flash pointer to Seg B   */
  Flash_int_ptr = (int *) 0x1000;
  /*  Set Erase bit */
  FCTL1 = FWKEY + ERASE;     
  /*  Clear Lock bit */
  FCTL3 = FWKEY; 
  /*  Dummy write to erase Flash segment */
  *Flash_int_ptr = 0;
  /*  Set WRT bit for write operation */  
  FCTL1 = FWKEY + WRT;

  /*FIXME optimize to 8 bits, now is 16. */
  for (i=0; i < 4; i++)
    {      
      *Flash_int_ptr++ = (int) pass[i];
    }

  for (i=0; i < 12; i++)
    {      
      *Flash_int_ptr++ = (int) num_cert[i];
    }  
 
  FCTL1 = FWKEY;                  // Clear WRT bit

  FCTL3 = FWKEY + LOCK;           // Reset LOCK bit
  
  eint();
}


/* read the configuration data from internal Flash. */
void read_ffs(void)
{
  int * Flash_int_ptr;
  int i;

  dint();

  /*  MCLK/2 for Flash Timing Generator */
  FCTL2 = FWKEY + FSSEL0 + FN0;


  /*  Initialize Flash pointer to Seg B   */
  Flash_int_ptr = (int *) 0x1000; 

  /*  Clear Lock bit */
  FCTL3 = FWKEY; 

  /*FIXME: optimize to 8 bits the same as in write_ffs  */
  for (i=0; i < 4; i++)
    {
      pass[i] = (unsigned char) *Flash_int_ptr++;
    }

  for (i=0; i < 12; i++)
    {
      num_cert[i] = (unsigned char) *Flash_int_ptr++;
    }

  FCTL3 = FWKEY + LOCK;           // Reset LOCK bit

  eint();
}

Reply via email to