k155la3 0 Posted April 21 · Report post 22 minutes ago, visht said: . . . В чем я ошибаюсь ? 1. FLL работает на базе генератора DCO. Соответственно, кроме настройки FLL надо настроить DCO на эту частоту (выбрать диапазон). 2. Не внимательно читаете (или вообще не читаете) рекомендации выше, а именно MSP430F51x2_UCS_04.c в данном случае. ps https://dev.ti.com/tirex/explore/. . . MSP430 Quote Ответить с цитированием Share this post Link to post Share on other sites
visht 0 Posted April 21 · Report post может неверно понял, но вроде FLL сама должна DCO и MOD менять, если ей передано управление. Quote Ответить с цитированием Share this post Link to post Share on other sites
k155la3 0 Posted April 21 · Report post 1 minute ago, visht said: может неверно понял, но вроде FLL сама должна DCO и MOD менять, если ей передано управление. ОНО не знает, какую частоту Вы хотите получить "на выходе". Также как незнает и какой кварц, на какую частоту, подключен. Знает только коэффицент деления FLL. Так что RC-ГУН (онже DCO) надо "выставить" вручную на требуемый диапазон (тк у него нет сквозной электронной перестройки во всем рабочем диапазоне). Так что на "сама" можете не расчитывать в данном случае. Может есть какой-то "построитель-вычислеитель" наподобие CubeMX для вычисления-прописи этих настроек. Quote Ответить с цитированием Share this post Link to post Share on other sites
visht 0 Posted April 21 · Report post Ок, понял. тогда так: #define DCORSEL 6 PMM_setVCore(PMM_CORE_LEVEL_3); // Vcore setting of at max 3 for 24MHz MCLK UCSCTL1 = (DCORSEL << 4); UCSCTL3 = SELREF_2 | FLLREFDIV__1; // FLLref = REFO UCSCTL2 = FLLD__32 | 0x17; UCSCTL4 = SELM__DCOCLK | SELS__DCOCLKDIV; Поправьте меня, если я снова ... мимо. Выбираем частоту. D = 32, N = 23 , n = 1, REF0SC = 32768Hz Fdco = 32*(23+1)*(32768/1) = 25.165824 MHz выбираю диапазон чтобы моя частота Fdco была между MAX MIN для соответствующего диапазона DCORSEL Spoiler для выбранной 25.165824 MHz это режим 6, от 10.7 до 39.0. управление DCO и MOD отдано FLL и установка частоты в моем случае заняла примерно 144728 циклов и 8.5ms в описании заявлено что не более чем n*32*32 циклов Fref = а это 31.25 ms а значит все верно. Видимо для получения точного значения частоты нужно просто подождать 30 ms. Проблема с DCOFFG остается, флаг не сбрасывается, хотя значения DCO в UCSCTL0 никак не 31 и не 0. do { UCSCTL7 &= ~DCOFFG; } while (UCSCTL7 & DCOFFG); // forever Видимо с системой флагов, у данного экземпляра что то пошло не так. Хотя как может не работать часть логики ... загадка. Пока нечем проверить точность частоты, LA семплит на 200 MHz, значит ошибка 8% (+/- 2 MHz), остается верить TI. А можно подробнее по поводу вышеупомянутого MSP430F51x2_UCS_04.c В закачанном msp430_driverlib_2_91_13_01 такого нет, есть другие, но если есть еще какие то примеры прошу ссылочку. k155la3, Спасибо за помощь. Quote Ответить с цитированием Share this post Link to post Share on other sites
k155la3 0 Posted April 21 · Report post MSP430F51x2_UCS_04.c это файл из блока примеров On 4/19/2022 at 4:23 PM, k155la3 said: . . . Вот блок примеров на семейство F51xx, это оттуда. . . . . slac452d.zip 248.62 kB · 2 downloads Использовать LA как частотомер не очень феншуй. Очень большая вероятность наступить на грабли. Уж лучше аналоговый осциллограф. А что, время старта для DCO/FLL так критично ? Если тактовая нужна постоянно, то экономии батареи уж точно не получится. Если отлаживать работу FLL/DCO с осциллографом, обратите внимание, что скорее всего будет дрожание фазы тактового сигнала или нечто похожее на ШИМ. Это нормальное явление. >> Спасибо за помощь. Удачи ! Quote Ответить с цитированием Share this post Link to post Share on other sites