вариант f2013 работает также, владельцы eZ430-f2013 могут проверить, код ниже.. работает оно так, если запись прошла успешно, то загорится светодиод, иначе он будет мигать (периодический перезагруз контроллера)
кста есть небольшой прогресс, если
BCSCTL2 |= SELM_3 + DIVM_3; // MCLK = LFXT1/8
заменить на
BCSCTL2 |= SELM_3 + DIVM_2; // MCLK = LFXT1/4
то запись проходит успешно...
#include <msp430x20x3.h> void wr_flash(unsigned addr, char data) { while (FCTL3 & BUSY); if (FCTL3 & LOCKA) FCTL3 = FWKEY + LOCKA; // Unlock SegmentA FCTL3 = FWKEY; // Clear Lock bit FCTL1 = FWKEY + WRT; // Set WRT bit for write operation *(char*)addr = data; // Write a data while (FCTL3 & BUSY); FCTL1 = FWKEY; // Clear WRT bit FCTL3 = FWKEY + LOCK + LOCKA; // Set LOCK bit, and Lock SegmentA } void main(void) { volatile unsigned int i; // Volatile to prevent removal WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer BCSCTL1 = CALBC1_1MHZ; // Set DCO to calibrated 1MHz, ACLK = LFXT1 DCOCTL = CALDCO_1MHZ; BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO IFG1 &= ~OFIFG; // Clear OSCFault flag BCSCTL2 |= SELM_3 + DIVM_3; // MCLK = LFXT1/8 P1DIR = 0xFF; // All P1.x outputs P1OUT = 0; // All P1.x reset P2DIR = 0xFF; // All P2.x outputs P2OUT = 0; // All P2.x reset FCTL2 = FWKEY + FSSEL_2 + FN1; // SMCLK 1:3 (1MHz/3=333kHz) P1OUT = BIT0; i = 100; while(i--); P1OUT &= ~BIT0; i = 100; while(i--); wr_flash(0x1000, 0); P1OUT = BIT0; while(1); }