Если нет необходимости иметь кварцованный MCLK и частоты тактирования ядра порядка 5,5МГц хватает для работы программных алгоритмов, то источником MCLK нужно назначать
DCO. Помехоустойчивость MSP430 при этом
значительно увеличивается!
Подключение неиспользованного входа
Цитата
XIN DVCC
появилось в MSP430x1xx Family User's Guide
rev.D. До этого во всех ревизиях было
Цитата
XIN DVss
специально просмотрел все User's Guide rev. A, B, C, D, E, F.
Кстати, в вашей программе нет обработки ошибки кварцевого генератора, которую нужно делать в прерывании NMI. Там по сути та же самая процедура, что у вас в clock_Init описана. Только перед выходом из прерывания нужно разрешать прерывание ошибки осциллятора установкой OFIE в регистре IE1, т.к. при входе в обработчик оно автоматически сбрасывается. Или можно вообще оставить процедуру инициализации только в преывании NMI, что я обычно и делаю.
Пример ниже
Код
// Инициализация источников тактирования ACLK, MCLK, SMCLK
#pragma vector=NMI_VECTOR
#pragma type_attribute=__interrupt
void osc_fault(void)
{ BCSCTL2=SELM_0|DIVM_0|DIVS_0; //перейдем на такт. DCO
BCSCTL1=DIVA_3|RSEL2|RSEL1|RSEL0; //ACLK=XT1/1=32768Гц
DCOCTL=DCO0|DCO1|DCO2; //DCO около 5МГц
do
{ IFG1&=~OFIFG;
} while ((IFG1&OFIFG)!=0); //Ожидаем стабилиз. колебаний
//кварца XT1
BCSCTL2=SELM_2|DIVM_0|SELS|DIVS_0; //MCLK=XT2/1=7327,8кГц,
//SMCLK=XT2/1=7327,8кГц
IE1|=OFIE; //разр. прерывания от детектора
}
а в main-е пишем попросту
Код
#pragma type_attribute=__task
void main(void)
{ WDTCTL=WDTPW+WDTHOLD;
IFG1|=OFIFG; //Принудительно установим флаг ошибки осциллятора
IE1=OFIE; //Разрешим прерывание для вызова процедуры инициализации источников тактирования
...
}