×
嵌入式 > 技术百科 > 详情

MSP430单片机FLASH读写操作例子

发布时间:2020-09-10 发布时间:
|
//******************************************************************************
// MSP430F149
// M. Mitchell
// Texas Instruments Inc.
// Feb 2005
// Built with IAR Embedded Workbench Version: 3.21A
//******************************************************************************

#include

char value;                                // 8-bit value to write to segment A

// Function prototypes
void write_SegA (char value);
void copy_A2B (void);

void main(void)
{
    WDTCTL = WDTPW + WDTHOLD;              // Stop watchdog timer
    FCTL2 = FWKEY + FSSEL0 + FN0;          // MCLK/2 for Flash Timing Generator
    value = 0;                             // Initialize value

    while(1)                               // Repeat forever
   {
      write_SegA(value++);                 // Write segment A, increment value
      copy_A2B();                          // Copy segment A to B
     _NOP();                               // SET BREAKPOINT HERE
   }
}

void write_SegA (char value)
{
    char *Flash_ptr;                       // Flash pointer
    unsigned int i;

    Flash_ptr = (char *) 0x1080;           // Initialize Flash pointer
    FCTL1 = FWKEY + ERASE;                 // Set Erase bit
    FCTL3 = FWKEY;                         // Clear Lock bit
    *Flash_ptr = 0;                        // Dummy write to erase Flash segment

    FCTL1 = FWKEY + WRT;                   // Set WRT bit for write operation

    for (i=0; i<128; i++)
    {
        *Flash_ptr++ = value;              // Write value to flash
    }

    FCTL1 = FWKEY;                         // Clear WRT bit
    FCTL3 = FWKEY + LOCK;                  // Set LOCK bit
}


void copy_A2B (void)
{
    char *Flash_ptrA;                      // Segment A pointer
    char *Flash_ptrB;                      // Segment B pointer
    unsigned int i;

    Flash_ptrA = (char *) 0x1080;          // Initialize Flash segment A pointer
    Flash_ptrB = (char *) 0x1000;          // Initialize Flash segment B pointer
    FCTL1 = FWKEY + ERASE;                 // Set Erase bit
    FCTL3 = FWKEY;                         // Clear Lock bit
    *Flash_ptrB = 0;                       // Dummy write to erase Flash segment B
    FCTL1 = FWKEY + WRT;                   // Set WRT bit for write operation

    for (i=0; i<128; i++)
    {
        *Flash_ptrB++ = *Flash_ptrA++;     // Copy value segment A to segment B
    }

    FCTL1 = FWKEY;                         // Clear WRT bit
    FCTL3 = FWKEY + LOCK;                  // Set LOCK bit
}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
iPhone将是质的飞跃:苹果A14处理器+高通X55基带