JohnKorsh 0 October 21, 2015 Posted October 21, 2015 · Report post Добрый день! Не поможет ли кто с кварцем XT1 в MSP430F5172? Нужно завести на 25 МГц. (В MSP430F5172 XT1 может работать на этой частоте, по DataSheet по крайней мере). Вот код инициализации: ... unsigned long i = 0; // Work variable. //--------------------------------------------------------------------------- // Set of the pin select function. // 0 - Port I/O, 1 - Function. PJSEL = 0x30; // 4,5 - Quartz. // Control disable of the Port Map. PMAPKEYID = 0x2D52; // Set of the allowing acess to the Port map register. PMAPKEYID = 0x0000; // Disable of the reconfiguration. // // Set of the Vcore voltage. // The levels should be increased only step by step. // // 0 1,8 - 2,0 V Ft < 8 MHz // 1 2,0 - 2,2 V 8 MHz < Ft < 12 MHz // 2 2,2 - 2,4 V 12 MHz < Ft < 20 MHz // 3 2,4 - 3,6 V 20 MHz < Ft < 25 MHz SetVCoreUp (1); // Set of the level one for (i = 0; i < 10000; i++); // Little delay. SetVCoreUp (2); // Set of the level two for (i = 0; i < 10000; i++); // Little delay. SetVCoreUp (3); // Set of the level three for (i = 0; i < 10000; i++); // Little delay. // Set of the Clock parametrs. // UCSCTL6 &= ~XT1OFF; // Switch on of the XT. // UCSCTL6 &= ~XT1BYPASS; // Set of the external crystall. // UCSCTL6 |= XTS; // Set of the hign frequency for XT1. // UCSCTL6 // Btgining value 1100 0001 1100 1101 = 0xC1CD // Bits 8-15. Control of the XT2 do not change. Bit 8 = 1 - XT2 unswitch. // Bits 6,7 = 11. Maximum frequency for the XT1. // Bit 5 = 1. High frequency work of the XT1. // Bit 4 = 0. XT1 - resonator. // Bit 2, 3 = 00. Unswitch of the internal capacitors. // Bit 1 = 0. SMCLK switch on. // Bit 0 = 0. XT1 switch on. // The value is 1100 0001 1110 0000 = 0x C1E0 UCSCTL6 = 0xC1E0; // Set of the UCSCTL6 value. // Check LFXT1 fault flag i = 0; // Control of the XT1 failure. (1, if failure is occured) while ((UCSCTL6 & XT1LFOFFG) && (i < 500000)) { UCSCTL7 &= ~(XT1LFOFFG); // Clear LFXT1 fault flag SFRIFG1 &= ~OFIFG; // Clear the global fault flag. In case the LFXT1 caused the global fault flag to get // set this will clear the global error condition. If any error condition persists, // global flag will get again. i = i + 1; } if ((UCSCTL7 & XT1LFOFFG) == XT1LFOFFG) { Err_Init |= Err_XT1; } else { // UCSCTL4 |= SELA__XT1CLK; // Switch of the ACLK to XT1. // UCSCTL4 |= SELS__XT1CLK | SELM__XT1CLK; // Switch of the SMCLK and MCLK clocks to XT1. UCSCTL4 = 0; // Switch all of the clock to XT1. } ... Как видите, пробовал по-разному. Отдельно кварц проверял и заменял. Осциллоскопом видно, что заводится странно - не 25 МГц, а шумоподобно, на частоте около 500 КГц. Пробовал на другой плате - то же самое. Quote Share this post Link to post Share on other sites More sharing options...
Obam 8 October 21, 2015 Posted October 21, 2015 (edited) · Report post Кварц заведомо на основную гармонику? 25МГц-кварц может оказаться гармониковым (3-я, 5-я). Примечания 5, 6 к характеристикам XT1 в HFM увидели? Другие параметры кварца известны? Нагрузочные конденсаторы есть? Какие? Edited October 21, 2015 by Obam Quote Share this post Link to post Share on other sites More sharing options...
JohnKorsh 0 October 21, 2015 Posted October 21, 2015 · Report post Спасибо, сейчас посмотрю примечания. ,Да, по 12 пФ, как рекомендуют Supplier-ы кварца. Quote Share this post Link to post Share on other sites More sharing options...
Obam 8 October 21, 2015 Posted October 21, 2015 · Report post "// Bit 5 = 1. High frequency work of the XT1." … "while ((UCSCTL6 & XT1LFOFFG) && (i < 500000)) { UCSCTL7 &= ~(XT1LFOFFG); // Clear LFXT1 fault flag SFRIFG1 &= ~OFIFG; // Clear the global fault flag. In case the LFXT1 caused the global fault flag to get // set this will clear the global error condition. If any error condition persists, // global flag will get again. i = i + 1; }" В UCSCTL6 нет бита XT1LFOFFG - это раз. Включили HFM, а проверяем флаг для LFM - это два. "Copy-paste" погубит програмистский мир. Quote Share this post Link to post Share on other sites More sharing options...
JohnKorsh 0 October 21, 2015 Posted October 21, 2015 · Report post Спасибо. Помогло. Как хорошо, когда заводится кварц. Quote Share this post Link to post Share on other sites More sharing options...
Obam 8 October 22, 2015 Posted October 22, 2015 (edited) · Report post Спасибо. Помогло. Как хорошо, когда заводится кварц. Что именно помогло? Вот дожили: кварц завёлся - праздник. Edited October 22, 2015 by Obam Quote Share this post Link to post Share on other sites More sharing options...
JohnKorsh 0 October 22, 2015 Posted October 22, 2015 · Report post Что именно помогло? Если честно, 25 МГц кварц так и не смог завести. Все параметры кварца лучше предельно допустимых, указанных в DataSheet, как минимум, в два раза. Первая гармоника. Отдельно, в приспособлении - отлично заводится, держит минус 20. С битом проверки наличия генерации - просто задержку ставил на 5 секунд - куда уж больше - не заводится. Время сильно поджимает - отложил исследование на потом. Поставил часовой кварц - он с песнями завёлся - и ФАПЧ-ем микроконтроллера получил требуемые 25 МГц. Quote Share this post Link to post Share on other sites More sharing options...
Obam 8 October 22, 2015 Posted October 22, 2015 (edited) · Report post Чума!!! Ничего не работает, но "Помогло. Как хорошо…" и далее по тексту :) С лажей исходника из поста #1 что было? Edited October 22, 2015 by Obam Quote Share this post Link to post Share on other sites More sharing options...
JohnKorsh 0 October 22, 2015 Posted October 22, 2015 · Report post Чума!!! Ничего не работает, но "Помогло. Как хорошо…" и далее по тексту :) С лажей исходника из поста #1 что было? Косяк в коде исправил, но дело не в нём. Я уже писал, что условный цикл заменял на 5-секундную задержку. Пока просто отложил. Сдам Заказ - попробую понять. TI косяков не делает - чисто моё недопонимание. Quote Share this post Link to post Share on other sites More sharing options...
visht 0 April 18, 2022 Posted April 18, 2022 · Report post Добрый день. тоже имею данную проблему на этом камне. PMM_setVCore(PMM_CORE_LEVEL_2); // Vcore setting of at max 3 for 24MHz MCLK //XT1 PJSEL = BIT5 | BIT4; // Port select XT1 UCSCTL6 &= ~(XT1OFF + XT1BYPASS); // XT1 On UCSCTL6 |= XCAP_3 + XTS_L + XT1DRIVE_2; // XT1 Selects high-freq. oscillator 12MHz //UCSCTL7 &= ~(XT1HFOFFG + XT1LFOFFG + DCOFFG); // Clear XT1, DCO fault flags //SFRIFG1 &= ~OFIFG; // Clear fault flags // Loop until XT1 fault flag is cleared do { UCSCTL7 &= ~(XT1HFOFFG + XT1LFOFFG + DCOFFG); // Clear XT1, DCO fault flags //UCSCTL7 &= ~XT1HFOFFG; // Clear XT1 fault flags SFRIFG1 &= ~OFIFG; // Clear fault flags } while (UCSCTL7 & XT1HFOFFG); // Test XT1 fault flag UCSCTL4 = SELA__REFOCLK + SELS__XT1CLK + SELM__XT1CLK; // Set ACLK = REFO // Set MCLK = XT1CLK // Set SMCLK = XT1CLK UCSCTL5 = DIVA_0 + DIVS_0 + DIVM_0; и XT1HFOFFG всегда 1. Пробовал режимы питания, CAP_0, CAP_1, CAP_2, CAP_3 хотя они вроде тольно дляLF разные варианты, что видно по комментам, и даже разные кварцы. Что не так ? Quote Share this post Link to post Share on other sites More sharing options...
k155la3 25 April 18, 2022 Posted April 18, 2022 · Report post Для начала, попроверяйте логику установки-сброса бит в операторах. Замените "плюсы" в правой части выражений на "|". Это в смысле, что желание установить-сбросить настроечные биты задекларировано, но компилятор написанное интерпретирует иначе. В отладчике пройдитесь по коду с построчной проверкой через регистры. В-общем-то, можно в томже отладчике и биты регистров установить-сбросить с мониторингом на осцилографе наличия генерации. Quote Share this post Link to post Share on other sites More sharing options...
visht 0 April 18, 2022 Posted April 18, 2022 · Report post Поменял на | но я и до этого проходил под отладкой. Все работает верно до момента сброса флагов, вот их оно не сбрасывает, ни на такт. Генерация отсутствует. все XT1HFOFFG, XT1LFOFFG, DCOFFG == 1 Quote Share this post Link to post Share on other sites More sharing options...
k155la3 25 April 18, 2022 Posted April 18, 2022 · Report post Проверьте, что порт P J4,5 полностью настроен. А именно, работает только как выводы для генератора. (таблица внизу) (XT1BYPASS д.б. == 0) Quote Share this post Link to post Share on other sites More sharing options...
visht 0 April 18, 2022 Posted April 18, 2022 · Report post так второй строчкой, Quote PJSEL = BIT5 | BIT4; // (1<<5) | (1<<4) но и Quote PJSEL = BIT5; // 1<<5 не так, не так. Quote Share this post Link to post Share on other sites More sharing options...
k155la3 25 April 18, 2022 Posted April 18, 2022 · Report post UCSCTL6 |= XCAP_3 + XTS_L + XT1DRIVE_2; XTS_L - для низкочастотных. Для ВЧ должна быть 1. SLAU208Q pg.181 ps On some devices, the XT1 oscillator also supports high-speed crystals or resonators when in highfrequency (HF) mode (XTS = 1). The high-speed crystal or resonator connects to XIN and XOUT and requires external capacitors on both terminals. These capacitors should be sized according to the crystal or resonator specifications. pg 163 (вроде как требуются внешние конденсаторы на кварц) Quote Share this post Link to post Share on other sites More sharing options...