Алексей_Ш (13.12.2014 12:54, просмотров: 1) ответил VL на Тактирование от кварца или DCO? Если от кварца, то нужно ждать флаг готовности. Если от DCO, то у него огромная погрешность, можно легко превысить допустимую частоту и загнать контроллер.
Тактирование от кварца. 24 (Мгц) Но прежде чем кварц заработает, настраиваю модуль питания ядра. Кварц запускается нормально, я проверял биты ошибок. Вообще программа работает нормально (под отладчиком). Раньше проект был сделан на MSP430F2418, теперь хочу запустить 5438a. Сейчас проверил цепь сброса. Я теперь сомневаюсь, что дело в супервизоре. Сейчас у меня на входе RESET висит простейшая RS цепочка. Попробовал увеличить емкость конденсатора-не помогло. Подозреваю, что дело все-таки в настройках модуля питания. Интересное дело-в даташите нашел функцию на Си настройки ядра. Она почему-то не заработала. Зависла в ожидании какаго-то флага в самом начале:
void SetVCoreUp (unsigned int level)
{
// Open PMM registers for write access
PMMCTL0_H = 0xA5;
// Make sure no flags are set for iterative sequences
while ((PMMIFG & SVSMHDLYIFG) == 0);
while ((PMMIFG & SVSMLDLYIFG) == 0);
// Set SVS/SVM high side new level
SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level;
// Set SVM low side to new level
SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level;
// Wait till SVM is settled
while ((PMMIFG & SVSMLDLYIFG) == 0);
// Clear already set flags
PMMIFG &= ~(SVMLVLRIFG + SVMLIFG);
// Set VCore to new level
PMMCTL0_L = PMMCOREV0 * level;
// Wait till new level reached
if ((PMMIFG & SVMLIFG))
while ((PMMIFG & SVMLVLRIFG) == 0);
// Set SVS/SVM low side to new level
SVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level;
// Lock PMM registers for write access
PMMCTL0_H = 0x00;
}
Вот на этой строчке зависла:
while ((PMMIFG & SVSMHDLYIFG) == 0);
Но под отладчиком, если две первые строчки убрать все работает.
Мне бы конкретный пример настройки, а то я не очень понимаю, что означают все эти флаги и как их использовать.