Перейти к содержанию
    

MSP430F5529 програмирование

Не могу разобраться с конфигурацией регистров для XT2 осцилятора.

(в програмировании С++ MSP430 начинающий строго не судить =)

post-73101-1344783128_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

A на какую частотный канал (ACLK/MCLK/SMCLK) хотите кварц подключить? и какой кварц?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 МГц

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если еще интересно инициализация кварца для 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 почитать стоит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за подсказку про баг обязательно посмотрю.

Уже полгода как работает устройство с такой инициализацией и нет проблем.

Устройство постояно включается выключается.

Используется кварц в программе и если он не запустится то смысла дальнейшей работы нет.

В примерах TI инициализация кварца на XT2 приводится так.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уже полгода как работает устройство с такой инициализацией и нет проблем.

Устройство постояно включается выключается.

Я не говорю, что проблемы обязательно будет, а только, что могут быть. Сам просидел аж три дня, когда запускал систему тактирования у MSP430F5438A. У меня 6МГц на XT2 только для измерения некой входной частоты используется. Для всего остального (включая связь), когда не требуется измерять частоту, используется DCO. Подстраиваю DCO так, чтобы SMCLK можно было переключать к XT2CLK или к DCOCLKDIV без изменения частоты SMCLK.

Используется кварц в программе и если он не запустится то смысла дальнейшей работы нет.
Смысл продолжить работу есть всегда. По крайней мере можно показать пользователю, миганием светодиода или бибиканием пищалки, что устройство как-то работает, но у него есть проблемы/неисправности. Это лучше, чем черный ящик, который вообще "молчит", не так ли? И для этого достаточно подстроить DCO под частоту ВЧ кварца и/или использовать REFO вместо часового. Работать MSP430 при этом будет точно также как и с кварцами, но с некоторым снижением точности тех измерений, которые привязаны к тактовой частоте генераторов. По крайней мере факт неисправности генераторов можно фиксировать отдельно.

В примерах TI инициализация кварца на XT2 приводится так.
Примеры кода TI пишут люди аля индусских студентов :) Для создания надежных устройств нужны специализированные подходы к программированию. А ненадежных устройств и без этого много ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Наверно вы правы. Устройство не имеет светодиодов для экономии электроэнергии и потребителю всеравно почему не работает.

Иногда нет времени все проверять заработало "значит правильно".

Да в примерах нет функции включающей питание при установки кварца 24МГц намучался пока понял причину.

Спасибо за обяснение попробую исправить.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вопрос по процедуре поднятия напряжения питания ядра МК msp430f5438a:

Кто-нибудь разбирался с заданием порогов сработки svs/svm для напряжения ядра (low-side)? откуда взялась там та формула? Ведь там 3 бита на svsmlrrl и 2 бита на svslrvl. А умножать предлагается на младшие биты соответственно для каждого значения. Где взять реальные значения порогов сработки в Вольтах?

Действительно ли для каждого напряжения питания ядра допустимы только определенные пороги (так в документации по МК msp430f5438a)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...