rezident (16.08.2012 20:14, просмотров: 107) ответил rezident на MSP430F5438A. Измерение отношения SMCLK vs ACLK с помощью TimerB0 для контроля и подстройки DCO. Тормозят что-то лыжи. Может кто идею подкинет?
Сам дурак. К концу дня мозги уже в ступоре. +- один отсчет это же как раз и есть +-32768! В время контроля частоты сделал усреднение по 16 отсчетам, ошибка естественно уменьшилась. #pragma inline=forced
static uint16_t h_TimerB_SMCk (uint16_t val) //Аргумент: кол-во периодов для усреднения
//Функция измерения SMCLK относительно одного периода ACLK
//Возвращает: uint16_t - значение SMCLK/ACLK
{ uint16_t stp1, stp2;
if (val == 0) val = 1;
TB0CCTL6 &= ~CCIFG;
while ((TB0CCTL6 & CCIFG) == 0);//ждем первого фронта
stp1 = TB0CCR6;
do
{ TB0CCTL6 &= ~CCIFG;
while ((TB0CCTL6 & CCIFG) == 0);//ждем следующего фронта
} while (--val != 0);
stp2 = TB0CCR6;
return (stp2-stp1);
}