k155la3 2 April 21 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 More sharing options...
visht 0 April 21 Posted April 21 · Report post может неверно понял, но вроде FLL сама должна DCO и MOD менять, если ей передано управление. Quote Share this post Link to post Share on other sites More sharing options...
k155la3 2 April 21 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 More sharing options...
visht 0 April 21 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 More sharing options...
k155la3 2 April 21 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 More sharing options...