1# 512365098
可以参考下面的代码。
-
- //******************************************************************************
- // MSP430F20xx Demo - Flash In-System Programming, Copy SegC to SegD
- //
- // Description: This program first erases flash seg C, then it increments all
- // values in seg C, then it erases seg D, then copies seg C to seg D.
- // Assumed MCLK 771kHz - 1428kHz.
- // //* Set Breakpoint on NOP in the Mainloop to avoid Stressing Flash *//
- //
- // MSP430F20xx
- // -----------------
- // /|\| XIN|-
- // | | |
- // --|RST XOUT|-
- // | |
- //
- // M. Mitchell / M.Buccini
- // Texas Instruments Inc.
- // December 2005
- // Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.40A
- //******************************************************************************
- #include <msp430x20x3.h>
- char value; // 8-bit value to write to segment A
- // Function prototypes
- void write_SegC (char value);
- void copy_C2D (void);
- void main(void)
- {
- WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
- if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)
- {
- while(1); // If calibration constants erased
- // do not load, trap CPU!!
- }
- BCSCTL1 = CALBC1_1MHZ; // Set DCO to 1MHz
- DCOCTL = CALDCO_1MHZ;
- FCTL2 = FWKEY + FSSEL0 + FN1; // MCLK/3 for Flash Timing Generator
- value = 0; // initialize value
- while(1) // Repeat forever
- {
- write_SegC(value++); // Write segment C, increment value
- copy_C2D(); // Copy segment C to D
- _NOP(); // SET BREAKPOINT HERE
- }
- }
- void write_SegC (char value)
- {
- char *Flash_ptr; // Flash pointer
- unsigned int i;
- Flash_ptr = (char *) 0x1040; // 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<64; i++)
- {
- *Flash_ptr++ = value; // Write value to flash
- }
- FCTL1 = FWKEY; // Clear WRT bit
- FCTL3 = FWKEY + LOCK; // Set LOCK bit
- }
- void copy_C2D (void)
- {
- char *Flash_ptrC; // Segment C pointer
- char *Flash_ptrD; // Segment D pointer
- unsigned int i;
- Flash_ptrC = (char *) 0x1040; // Initialize Flash segment C pointer
- Flash_ptrD = (char *) 0x1000; // Initialize Flash segment D pointer
- FCTL1 = FWKEY + ERASE; // Set Erase bit
- FCTL3 = FWKEY; // Clear Lock bit
- *Flash_ptrD = 0; // Dummy write to erase Flash segment D
- FCTL1 = FWKEY + WRT; // Set WRT bit for write operation
- for (i=0; i<64; i++)
- {
- *Flash_ptrD++ = *Flash_ptrC++; // copy value segment C to segment D
- }
- FCTL1 = FWKEY; // Clear WRT bit
- FCTL3 = FWKEY + LOCK; // Set LOCK bit
- }
-
|