Пытаюсь мерить период сигнала на MSP430f6736. Процессор затактирован от 32768 с умножителем 610.
Сигнал измеряю захватом таймера 3. К сигналу претензий нет. Получается разброс ~ 3%. Вроде как сам таймер примитивный до ужаса и никаких не вижу подводных камней. Кто может что подсказать? Возможно ли что у меня как-то тактовая плавает? Потому, что погрешность при измерении сигнала разной частоты в процентном соотношении сопоставима.
PS: Инициализирую так. (Нашёл в примерах)
CODE
// Выбор источников тактового сигнала и настройка 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
PPS: Может кто-нибудь приведёт пример инициализации, гарантировано работающей в принципе на любой частоте порядка 20 МГц? (14-24)