MSP430: Трабла с тактированием от кварца.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено dxp 25 августа 2004 г. 10:33

Столкнулся с такой фигней. Имею кварц на 7.37 МГц, подключенный к XTAL1. Код переключения с RC на XTAL1 (взят из примера)

*********************************************
BCSCTL1 |= XTS; // High-Frequency Mode
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (byte i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG) != 0); // OSCFault flag still set?

BCSCTL2 |= SELM1+SELM0; // MCLK = LFXT1 (safe)
*********************************************

Все прекрасно работает на нескольких устройствах. Но вот на очередном новом девайсе возник такой эффект: проц не переключается на XTAL1 - продолжает тактироватся от DCO на частоте около 700 кГц (которая по умолчанию). Код вышеприведенный выполняется, все биты в регистрах стоят, как надо.

Путем различных экспериментов удалось заставить его все-таки переключаться. Для этого, как выяснилось, надо тот цикл "сброс флага-задержка-проверка флага" поставить еще раз, т.е. продублировать код:

do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (byte i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG) != 0); // OSCFault flag still set?

Так работает железно.

Есть какие-нибудь разумные объяснения такому поведению?

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru