AlexBorsuk 0 12 августа, 2012 Опубликовано 12 августа, 2012 · Жалоба Не могу разобраться с конфигурацией регистров для XT2 осцилятора. (в програмировании С++ MSP430 начинающий строго не судить =) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KARLSON 1 13 августа, 2012 Опубликовано 13 августа, 2012 · Жалоба A на какую частотный канал (ACLK/MCLK/SMCLK) хотите кварц подключить? и какой кварц? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ave 0 22 августа, 2012 Опубликовано 22 августа, 2012 · Жалоба A на какую частотный канал (ACLK/MCLK/SMCLK) хотите кварц подключить? и какой кварц? Если еще интересно инициализация кварца для MSP430F5528 на XT2 выполняется так void SetVcoreUp (unsigned int level) { #ifdef MSP // Open PMM registers for write PMMCTL0_H = PMMPW_H; // Set SVS/SVM high side new level SVMHE = 1, SVSMHRRL SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level; // Set SVM low side to new level SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level; // Wait till SVM is settled while ((PMMIFG & SVSMLDLYIFG) == 0); // Clear already set flags PMMIFG &= ~(SVMLVLRIFG + SVMLIFG); // Set VCore to new level PMMCTL0_L = PMMCOREV0 * level; // Wait till new level reached if ((PMMIFG & SVMLIFG)) while ((PMMIFG & SVMLVLRIFG) == 0); // Set SVS/SVM low side to new level SVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level; // Lock PMM registers for write access PMMCTL0_H = 0x00; #endif } void SetupFreq(void) { P5SEL |= BIT2+BIT3; // Port select XT2 SetVcoreUp (0x03); UCSCTL6 &= ~XT2OFF; // Enable XT2 UCSCTL3 |= SELREF_2; // FLLref = REFO // Since LFXT1 is not used, // sourcing FLL with LFXT1 can cause // XT1OFFG flag to set UCSCTL4 |= SELA_2; // ACLK=REFO,SMCLK=DCO,MCLK=DCO UCSCTL6 &= ~XT2DRIVE_3; // Clear XT2drive field // Loop until XT1,XT2 & DCO stabilizes - in this case loop until XT2 settles do { UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG_L + DCOFFG); // Clear XT2,XT1,DCO fault flags SFRIFG1 &= ~OFIFG; // Clear fault flags } while (SFRIFG1 & OFIFG); // Test oscillator fault flag UCSCTL6 &= ~XT2DRIVE0; // Decrease XT2 Drive according to // expected frequency UCSCTL6 |= XTS; // UCSCTL6 |= XT2DRIVE_3; // Set requested value UCSCTL4 &= ~(SELS_7 + SELM_7); UCSCTL4 |= SELS_5 + SELM_5; // SMCLK=MCLK=XT2 } Функция SetVcoreUp (0х03) необходимо задавать при частоте кварца больше 16 МГц Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 22 августа, 2012 Опубликовано 22 августа, 2012 · Жалоба Если еще интересно инициализация кварца для MSP430F5528 на XT2 выполняется так Хотелоcь бы заметить, что поскольку в вашей программе регистры инициализируются не явными значениями, а с иcпользованием масок, то вот в этом куске кода можно зациклиться навсегда. // Loop until XT1,XT2 & DCO stabilizes - in this case loop until XT2 settles do { UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG_L + DCOFFG); // Clear XT2,XT1,DCO fault flags SFRIFG1 &= ~OFIFG; // Clear fault flags } while (SFRIFG1 & OFIFG); // Test oscillator fault flag Причина в том, что "по умолчанию" FLL включена (бит SCG0 сброшен) и подключана к REFO (опорная частота, до того как LFXT "заведется"), а DCO ей (системой FLL) настраивается на частоту DCOCLK=2МГц, DCOCLKDIV=1МГц. И если вы не проинициализировали явными значениями коэффициенты "петевого деления" FLL (регистр UCSCTL2) и диапазона частоты DCO (регистр UCSCTL1), то FLL имеет возможность свалить модулятор DCO на "упор". При этом бит аварии DCOFFG будет всегда установлен и соответственно бит OFIFG сбрасываться тоже не будет. Так что, во-первых, после старта нужно инициализировать все регистры явными значениями. Во-вторых, при проверке готовности генераторов использовать только соответствующие им биты (XT1LFOFFG/XT1HFOFFG и XT2OFFG), а не бит общей аварии OFIFG. В-третьих, не использовать FLL все время, а только однократно для "грубой"/начальной подстройки частоты DCO. Затем отключать FLL и при необходимости подстраивать DCO "вручную" используя TimerB и ACLK. Подробнее все это по мотивам бага UCS10 освещается в документе UCS10 Guidance (slaa489a). UCS10 в Errata MSP430F5529 не упомянут, но тем не менее указанный AppNote почитать стоит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ave 0 22 августа, 2012 Опубликовано 22 августа, 2012 · Жалоба Спасибо за подсказку про баг обязательно посмотрю. Уже полгода как работает устройство с такой инициализацией и нет проблем. Устройство постояно включается выключается. Используется кварц в программе и если он не запустится то смысла дальнейшей работы нет. В примерах TI инициализация кварца на XT2 приводится так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 22 августа, 2012 Опубликовано 22 августа, 2012 · Жалоба Уже полгода как работает устройство с такой инициализацией и нет проблем. Устройство постояно включается выключается. Я не говорю, что проблемы обязательно будет, а только, что могут быть. Сам просидел аж три дня, когда запускал систему тактирования у MSP430F5438A. У меня 6МГц на XT2 только для измерения некой входной частоты используется. Для всего остального (включая связь), когда не требуется измерять частоту, используется DCO. Подстраиваю DCO так, чтобы SMCLK можно было переключать к XT2CLK или к DCOCLKDIV без изменения частоты SMCLK. Используется кварц в программе и если он не запустится то смысла дальнейшей работы нет.Смысл продолжить работу есть всегда. По крайней мере можно показать пользователю, миганием светодиода или бибиканием пищалки, что устройство как-то работает, но у него есть проблемы/неисправности. Это лучше, чем черный ящик, который вообще "молчит", не так ли? И для этого достаточно подстроить DCO под частоту ВЧ кварца и/или использовать REFO вместо часового. Работать MSP430 при этом будет точно также как и с кварцами, но с некоторым снижением точности тех измерений, которые привязаны к тактовой частоте генераторов. По крайней мере факт неисправности генераторов можно фиксировать отдельно. В примерах TI инициализация кварца на XT2 приводится так.Примеры кода TI пишут люди аля индусских студентов :) Для создания надежных устройств нужны специализированные подходы к программированию. А ненадежных устройств и без этого много ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ave 0 23 августа, 2012 Опубликовано 23 августа, 2012 · Жалоба Наверно вы правы. Устройство не имеет светодиодов для экономии электроэнергии и потребителю всеравно почему не работает. Иногда нет времени все проверять заработало "значит правильно". Да в примерах нет функции включающей питание при установки кварца 24МГц намучался пока понял причину. Спасибо за обяснение попробую исправить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kd522 0 19 марта, 2013 Опубликовано 19 марта, 2013 · Жалоба вопрос по процедуре поднятия напряжения питания ядра МК msp430f5438a: Кто-нибудь разбирался с заданием порогов сработки svs/svm для напряжения ядра (low-side)? откуда взялась там та формула? Ведь там 3 бита на svsmlrrl и 2 бита на svslrvl. А умножать предлагается на младшие биты соответственно для каждого значения. Где взять реальные значения порогов сработки в Вольтах? Действительно ли для каждого напряжения питания ядра допустимы только определенные пороги (так в документации по МК msp430f5438a)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться