ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
4 июля
107494
incognito (13.12.2007 12:41, просмотров: 15875) 
наткнулся тут на непонятное поведение msp430f2011.. если в качестве тактовой ядра установить VLO/8 [/4/2] то при попытке записи во флэшь байта данных контроллер вываливается в ресет. Если поставить скорость VLO то все ок. При пошаговой отладке (step info) этих глюков НЕ ПРОИСХОДИТ !!!, если же запустить на выполнение то все проявляется. примерно выяснил где это происходит : *(char*)addr = data; ни в еррате ни в доках так ничего и не нашел на этот счет.. для желающим проверить:
#include  <msp430x20x1.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)
{
	WDTCTL = WDTPW + WDTHOLD;				// WDT is off

	// Osc
	BCSCTL3 |= LFXT1S_2;					// LFXT1 = VLO
	IFG1 &= ~OFIFG;						// Clear OSCFault flag
	BCSCTL1 = CALBC1_1MHZ | DIVA_3;				// Set DCO to calibrated 1MHz, ACLK = LFXT1 / 8
	DCOCTL = CALDCO_1MHZ;
	BCSCTL2 = SELM_3 + DIVM_3;				// MCLK = LFXT1 / 8, SMCLK = DCOCLK


	FCTL2 = FWKEY + FSSEL_2 + FN1;				// SMCLK 1:3 (1MHz/3=333kHz)


	// PINs :  1 - "output", 0 - "input"
	P1OUT = 0;
	P1DIR = 0xFF;
	P2OUT = 0;
	P2DIR = 0xFF;
	P2SEL = 0;
	P1IFG = 0;



	wr_flash(0x1000, 0);
	while(1);
}