MSP430

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
bishop-strip
Открыл глаза
Сообщения: 71
Зарегистрирован: Чт окт 28, 2010 11:20:39

MSP430

Сообщение bishop-strip »

Здравствйте!
Не могли бы рассказать про тактирование микроконтроллера, как мне сделать так, что бы микроконтроллер тактировался от своего внутреннго генератора с максимальной частотой? например сделать на 16 МГц?
Заранее спасибо!
Реклама
Аватара пользователя
Ser60
Друг Кота
Сообщения: 3784
Зарегистрирован: Ср дек 24, 2008 09:58:58

Re: MSP430

Сообщение Ser60 »

Для семейства 2ххх и DCO так:

Код: Выделить всё

	mov.b   &CALDCO_16MHZ, &DCOCTL	
	mov.b   &CALBC1_16MHZ, &BCSCTL1 	; set 16 MHz clock 
Если нужно для другого семейства, укажите детали.
Реклама
bishop-strip
Открыл глаза
Сообщения: 71
Зарегистрирован: Чт окт 28, 2010 11:20:39

Re: MSP430

Сообщение bishop-strip »

Спасибо за ответ!
Я нашел в примере такие функции:
//Функции настройки частоты 1
void CLOCK_XT1_Init()
{

int timeout = 5000;
P7SEL = P7SEL | 0x01 | 0x02; //set P7.0 & P7.1

UCSCTL6 = UCSCTL6 & (~XT1OFF); //set XT1OFF=0 (bit0 = 0) --> enable XT1
UCSCTL3 = UCSCTL3 | 1<<5; //set SELREF = 010 --> FLL clock source = REFOCLK
UCSCTL4 = UCSCTL4 | 1<<9; //set SELA = 010 --> ACLK=REFO

do
{
if (!(UCSCTL7 & 0x02)) break;
UCSCTL7 = UCSCTL7 & ~(0x0F); // Clear XT2,XT1,DCO fault flags
SFRIFG1 = SFRIFG1 & ~(0x02); // Clear fault flags (SFRIFG1.OFIFG = 0)
timeout--;
}
while ((SFRIFG1 & 0x02) && timeout); // Test oscillator fault flag

UCSCTL6 = (UCSCTL6 & ~(1<<6)) & ~(1<<7); //XT1Drive = 00; --> oscilator range 4-8 MHz

UCSCTL4 = UCSCTL4 & 0xF8FF; //ACLK=XT1 (SELA = 0b000)
}

//Функции настройки частоты 2
void CLOCK_XT2_Init()
{
int timeout = 5000;
P5SEL = P5SEL | 0x04 | 0x08; //set P5.2 & P5.3 as XT2IN/XT2OUT

UCSCTL6 = UCSCTL6 & (~XT2OFF); //set XT2OFF=0 (bit8 = 0) --> enable XT2
UCSCTL3 = UCSCTL3 | 0x20; //set SELREF = 010 --> FLL clock source = REFOCLK
UCSCTL4 = UCSCTL4 | 0x200; //set SELA = 010 --> ACLK=REFO

do
{
if (!(UCSCTL7 & 0x08)) break;
UCSCTL7 = UCSCTL7 & ~(0x0F); // Clear XT2,XT1,DCO fault flags
SFRIFG1 = SFRIFG1 & ~(0x02); // Clear fault flags (SFRIFG1.OFIFG = 0)
timeout--;
}
while ((SFRIFG1 & 0x02) && timeout); // Test oscillator fault flag

// if (!timeout)
// XT2_ERROR = 1;

//UCSCTL5 = UCSCTL5 | 0x0003; //MCLK/SMCLK divisor = 32

UCSCTL4 = UCSCTL4 | 0x55; //SMCLK=MCLK=XT2
UCSCTL4 = ((UCSCTL4 & ~0x100) & ~0x200) & ~0x400; //ACLK=XT1 (SELA = 0b000)
}
Ответить

Вернуться в «Разные вопросы по МК»