реклама на сайте
подробности

 
 
> проблеме с запуском кварца
serdz
сообщение Dec 21 2004, 08:01
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 21-12-04
Пользователь №: 1 582



Высокочастотный кварц подклячаю к XIN XOUT как в даташитах и в программе
:

BCSCTL1 |= XTS;
do
{
IFG1 &= ~OFIFG;
for (i = 0xFF; i > 0; i--);
}
while ((IFG1 & OFIFG) != 0);

кварц иногда не запускается, после того как не запустился надо выключить прождать несколько секунд (10-15) и потом включить, только тогда кварц запустится. Причем если сделать RESET то кварц сразу запустится.
Вместо RC на RESET пробовал ставить MAX809 такая же ситуация.
Что делать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
VAI
сообщение Dec 21 2004, 09:38
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



Как у Вас с разводкой платы? Частота кварца? Конденсаторы какие на кварце?
Я использую вместо кварца Муратовские керамические резонаторы со встроенными емкостями.
Программно я делаю примерно так. При сбое генератора вызовется прерывание и он опять заведется.

Код
unsigned int OSCFault_isr;              // глобальная переменная - счетчик вызов прерывания по OSCFault - для контроля

void init( void )
{
 WDTCTL = WDTPW + WDTHOLD;             // Stop WDT
 IE1 |= OFIE;                          // разрешим прерывание по сбою тактового генератора XT1 (флаг устанавливается при POR и при сбое)
                                       // это прерывание NMI, настройка ХТ1 произойдет после разрешения OFIE
......
 OSCFault_isr = 0;
}

/* --- NMI_isr() ------------------------------------------------------------------------------------------ **
*  прерывание по сбою тактового генератора XT1
*  ЖДЕМ, когда заведется генератор
*
* Контроль вызова этого прерывания: при вызове в процессе измерения
* игнорировать результаты этого измерения
* -------------------------------------------------------------------------------------------------------- */
#pragma vector=NMI_VECTOR
__interrupt  void NMI_isr( void )        //    14 * 2 - 0xfffc Non-maskable
{
//  Настроим основное и вспомогательное тактирование
 BCSCTL1 |= XTS;                       // вспомогательное тактирование ACLK = LFXT1 = HF XTAL
 do
 { IFG1 &= ~OFIFG;                     // Clear OSCFault flag
   delay_us( 100 );                    // Time for flag to set (> 50 us)
 } while (( IFG1 & OFIFG ) != 0 );      // OSCFault flag still set?
 BCSCTL2 |= SELM_3;                    // основное тактирование MCLK = LFXT1
 IE1 |= OFIE;                          // разрешим прерывание по сбою тактового генератора XT1 (флаг устанавливается при POR и при сбое)
 if ( !++OSCFault_isr )                 // счетчик вызов прерывания по OSCFault - для контроля сбоя генератора в программе
   OSCFault_isr--;                     // защита от переполнения
}


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
Monstrer
сообщение Dec 21 2004, 16:32
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 23
Регистрация: 13-11-04
Из: Нижний Новгород
Пользователь №: 1 120



Добрый вечер
Все таки я думаю что проблема с кварцем и еще.
если вы используете кварц более 5 Мгц, то есть такая особенность, что TimeOut 255 для синхронизации ядра недостаточен - попробуйте просто увеличить счетчик раза в 3-4.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th June 2025 - 14:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01383 секунд с 7
ELECTRONIX ©2004-2016