Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Запуск FLL от 32768
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
SasaVitebsk
Доброго времени суток. Ещё где-то недогоняю.
Запускаю кварц. Инициализирую всякие тактовые.
Запускаю таймер на сравнения для получения частоты.
Всё выглядит так:
Код
// Тактовые частоты
#define    ACLK                    32768L            // частота кварца, Hz [32768]
#define    DCOCLK                    25000L            // Системная частота, kHz [25000]
//#define    DCOCLK                    18000L            // Системная частота, kHz
#define    MCLK                    DCOCLK            // частота кварца, Hz
#define    SMCLK                    DCOCLK            // частота кварца, Hz

#define    FCLK                    (DCOCLK*1000)    // частота, Hz  [25001984]
#define    TCLK                    40                // период в нс

// Множители
#define    MPLL                    (FCLK/ACLK)        // Множитель для DCO

Код
  // Выбор источников тактового сигнала и настройка PLL
#if DCOCLK <= 8000            //Set VCore = 0 for 8MHz clock
  PMM_setVCore(__MSP430_BASEADDRESS_PMM__, 0);
#elif DCOCLK <= 12000        //Set VCore = 1 for 12MHz clock
  PMM_setVCore(__MSP430_BASEADDRESS_PMM__, 1);
#elif DCOCLK <= 20000        //Set VCore = 2 for 20MHz clock
  PMM_setVCore(__MSP430_BASEADDRESS_PMM__, 1);
#else                        //Set VCore = 3 for 25MHz clock
  PMM_setVCore(__MSP430_BASEADDRESS_PMM__, 3);
#endif
  //Initializes the XT1 crystal oscillator with no timeout
  UCS_LFXT1Start(__MSP430_BASEADDRESS_UCS__, UCS_XT1_DRIVE0, UCS_XCAP_3);                            
  //Set DCO FLL reference = REFO
  UCS_clockSignalInit(__MSP430_BASEADDRESS_UCS__, UCS_FLLREF, 0, UCS_CLOCK_DIVIDER_1);
  //Set ACLK = REFO
  UCS_clockSignalInit(__MSP430_BASEADDRESS_UCS__, UCS_ACLK, 0, UCS_CLOCK_DIVIDER_1);
  //Set Ratio and Desired MCLK Frequency  and initialize DCO
  UCS_initFLLSettle(__MSP430_BASEADDRESS_UCS__, DCOCLK, MPLL);
  //Set MCLK = REF3 (DCO)
  UCS_clockSignalInit(__MSP430_BASEADDRESS_UCS__, UCS_MCLK, 3, UCS_CLOCK_DIVIDER_1);
  //Set SMCLK = REF3 (DCO)
  UCS_clockSignalInit(__MSP430_BASEADDRESS_UCS__, UCS_SMCLK, 3, UCS_CLOCK_DIVIDER_1);
  // Enable global oscillator fault flag
  SFR_enableInterrupt(__MSP430_BASEADDRESS_SFR__, SFR_OSCILLATOR_FAULT_INTERRUPT);
  // Enable global interrupt
  __bis_SR_register(GIE);

Код
  // Инициализация таймера меток времени
  TA1CTL = 0;
  TA1CTL |= TACLR;                    // Сбросить таймер
  // TA1CTL;
  TA1CTL |= TASSEL1;                // SMCLK
  TA1CTL |= ID1;                    // /4 (6.25)
  TA1CCTL0 = SCCI;                    // Синхронно, Захват
  TA1CCR0 = SMCLK/4;                // 1 мс
  TA1CCTL0 |= CCIE;                    // прерывание по захвату разрешить

  TA1CTL |= MC0;                    // до TAxCCR0


В прерывании от таймера дёргаю ножкой. По идее частота прерываний должна быть при любой частоте ~ 1мс.
В реале если устанавливаю частоту от 18 и выше МГц, то работает правильно, а если меньше, то частота получается удвоенная.
И где я не копенгаген? В документации ничего стрёмного не нашёл.
rezident
Я не знаю откуда вы взяли эти функции, приведенные во втором фрагменте исходника, и что именно они выполняют, но хочу заметить, что при использовании FLL нужно учитывать ограничения рабочего диапазона DCO для каждого значения DCORSEL. В даташите на этот счет имеется имеется табличка. То бишь нельзя, установив лишь одно конкретное значение DCORSEL, чохом перекрыть весь диапазон рабочих частот DCO (который составляет, если грубо 100кГц - 100МГц). Так что, если вы пытаетесь изменить частоту, меняя лишь одно число в вашем макросе, то значит, что вы просто не "догоняете" принцип работы FLL. Рекомендую перечитать еще раз соответствующий раздел в User's Manual.
SasaVitebsk
Библиотеки TI. Называются driverlib. Имеются и на сайте и а комплекте IAR MSP.
За подсказку спасибо. Буду читать
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.