ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
24 июля
107620 Топик полностью
incognito (14.12.2007 12:20, просмотров: 80) ответил incognito на не, не так. Ядро всегда работает от MCLK = VLO/8 и не меняется, SMCLK всегда = DCO [1MHz] и не меняется, f[FTG] соответственно = SMCLK/3 = 333kHz, таким образом тактирование не меняется..
вариант 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);
}