Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: 16Mhz на XT1 для 2618
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
CAHTA_1939
установил высокочастотный кварц на XT1 , но не могу запустить. сразу стартовать от 16Mhz не хочет.
порылся в описании на 2хх серия. попробовал все что нашел. ничего не помогает =(
да и в примерах такого нет.

выручайте help.gif
rezident
Чтобы помочь, но при этом не ходить по уже пройденному, желательно знать что уже попробовали?
CAHTA_1939
Цитата(rezident @ Mar 26 2008, 00:33) *
Чтобы помочь, но при этом не ходить по уже пройденному, желательно знать что уже попробовали?


вот. как в мане.
Код
void Init_XT1_HF(void)
{
   volatile unsigned int i;
  
  BCSCTL1 &= ~XTS;                      
  BCSCTL3 |= LFXT1S_2;

  do
  {
    IFG1 &= ~OFIFG;                         // Clear OSCFault flag
    for (i = 0xFF; i > 0; i--);             // Time for flag to set
  }
  while (IFG1 & OFIFG);                     // OSCFault flag still set?

  BCSCTL2 |= SELM_3;          
}
rezident
Дык бит XTS установить, а не сбросить нужно!

XTS Bit 6 LFXT1 mode select.
0 Low frequency mode
1 High frequency mode

Кроме того, я, например, при инициализации явно прописываю регистры, а не маски накладываю. Так надежнее.
CAHTA_1939
Цитата(rezident @ Mar 26 2008, 00:55) *
Дык бит XTS установить, а не сбросить нужно!

XTS Bit 6 LFXT1 mode select.
0 Low frequency mode
1 High frequency mode

Кроме того, я, например, при инициализации явно прописываю регистры, а не маски накладываю. Так надежнее.


устанавливал и сбрасывал. ничего.
rezident
Чего "ничего"? Сначала нужно установить XTS, потом проинициализировать BCSCTL3 в соответствии с частотой кварца и дополнительными конденсаторами. Затем нужно дождаться стабильной генерации, опрашивая бит LFXT1OF, в этом же регистре. Сбрасывать LFXT1OF, наподобие OFIFG не нужно, т.к. он read-only. Кстати, а что у вас на XT2 подключено? Для чего понадобилось высокочастотный кварц на LFXT (XT1) вешать?
CAHTA_1939
Цитата(rezident @ Mar 26 2008, 01:33) *
Чего "ничего"? Сначала нужно установить XTS, потом проинициализировать BCSCTL3 в соответствии с частотой кварца и дополнительными конденсаторами. Затем нужно дождаться стабильной генерации, опрашивая бит LFXT1OF, в этом же регистре. Сбрасывать LFXT1OF, наподобие OFIFG не нужно, т.к. он read-only. Кстати, а что у вас на XT2 подключено? Для чего понадобилось высокочастотный кварц на LFXT (XT1) вешать?



на 2618 XT2 совмещен с портом ввода\вывода. А он у меня и задействован.
rezident
Цитата(CAHTA_1939 @ Mar 26 2008, 03:38) *
на 2618 XT2 совмещен с портом ввода\вывода. А он у меня и задействован.

Понятно. Тогда кусок
Код
do
{
    IFG1 &= ~OFIFG;                         // Clear OSCFault flag
    for (i = 0xFF; i > 0; i--);             // Time for flag to set
}  while (IFG1 & OFIFG);                     // OSCFault flag still set?

нужно заменить на
Код
while ((BCSCTL3&LFXT1OF)!=0);

Кстати, а внешние конденсаторы на XIN/XOUT имеются?
CAHTA_1939
вроде по правилам делаю.
к XT1 подключен резонатор 16мгц. и 2 коннденсатора на 20пФ.

void Init_XT1_HF(void)
{
BCSCTL1 |= XTS;
BCSCTL3 |= LFXT1S_3+XCAP_0;

while ((BCSCTL3&LFXT1OF)!=0);

BCSCTL2 |= SELM_3;
}
rezident
Кстати, а зачем вам кварц 16МГц для MCLK? Я бы понял, если бы для ACLK и/или SMCLK нужно было. Более разумно встроенный DCO на 16МГц для MCLK использовать. Да и надежнее встроенный генератор, чем внешний кварц.
CAHTA_1939
Цитата(rezident @ Mar 26 2008, 02:02) *
Кстати, а зачем вам кварц 16МГц для MCLK? Я бы понял, если бы для ACLK и/или SMCLK нужно было. Более разумно встроенный DCO на 16МГц для MCLK использовать. Да и надежнее встроенный генератор, чем внешний кварц.


дык. системы должна работать на такой частате.
сейчас попробовал DCO, все нормально. поставил 16Мгц и все бегает.
но с XT1 всеже разберусь. интересно же
rezident
Цитата(CAHTA_1939 @ Mar 26 2008, 04:14) *
дык. системы должна работать на такой частате.
Дык и пускай работает от DCO. Кварц ставят если стабильность частоты нужна значительно выше, чем у RC-генератора. А у DCO в серии 26xx начальная точность калиброванной частоты +-1%, не более +-2% изменение во всем температурном диапазоне при постоянном напряжении и -6%...+3% в диапазоне напряжений питания 3,0В...3,6В. Вполне нормальный генератор для работы, если не требуется особая стабильность, например, для UART.
Цитата(CAHTA_1939 @ Mar 26 2008, 04:14) *
но с XT1 всеже разберусь. интересно же
Угу. Только отписаться не забудьте. wink.gif
CAHTA_1939
насчет стабильности.
у меня на мк задействованны 2 SPI и 1 UART...
как вы думаете. DCO оставить или с лучьше кварц?
rezident
Для SPI пофиг, это же синхронный интерфейс. А вот для UART лучше кварц конечно же. Хотя необязательно высокочастотный, можно часовой поставить и время-от-времени по нему DCO подстраивать.
MrYuran
Цитата(rezident @ Mar 26 2008, 02:43) *
Для SPI пофиг, это же синхронный интерфейс. А вот для UART лучше кварц конечно же. Хотя необязательно высокочастотный, можно часовой поставить и время-от-времени по нему DCO подстраивать.

А если нет проблем с питанием, лучше внешний генератор поставить. Всё-таки нет-нет да и появляются иногда проблемы с кварцем (у меня MSP f149). Хуже всего, когда это случается после нескольких месяцев эксплуатации, уже у потребителя.
Про атмел вообще молчу - 8253 целыми партиями назад отдавали из-за проблем с кварцем
Сергей Борщ
Цитата(CAHTA_1939 @ Mar 26 2008, 01:34) *
как вы думаете. DCO оставить или с лучше кварц?
Для UART конечно кварц. Только тактировать от кварца нужно не MCLK, а, как заметил rezident, SMCLK
CAHTA_1939
сегодня на работе просидел пол дня за осциллографом и вот что хочу узнать.

1. мог ли я спалить XT1 замкнув Xin и Xout ?

2. я настроил DCO на 16Мгц и настроил SEL'ом пины на вывод MCLK и SMCLK...
выводятся импульсы частотой 16мгц. это норм
но когда я в цикле начинаю дергать ножкой, то она дергается с частотой ~2.7Мгц
хотя при инициализации DCO я прописал, что MCLK и SMCLK должны тактироваться от него.

3. подключив к XT1 часовой кварц, я щупом посмотрел сигнал. на Xin почти ничего нет, а на Xout напряжение около 0.4вольта.
менял кварцы, конденсаторы. Одна фигня везде =(
rezident
Цитата(CAHTA_1939 @ Mar 28 2008, 02:07) *
1. мог ли я спалить XT1 замкнув Xin и Xout ?
Маловероятно. Если только статикой или подали на XIN "криминальное" по величине напряжение.
Цитата(CAHTA_1939 @ Mar 28 2008, 02:07) *
2. я настроил DCO на 16Мгц и настроил SEL'ом пины на вывод MCLK и SMCLK...
выводятся импульсы частотой 16мгц. это норм
но когда я в цикле начинаю дергать ножкой, то она дергается с частотой ~2.7Мгц
хотя при инициализации DCO я прописал, что MCLK и SMCLK должны тактироваться от него.
Это даже чуть больше "положенного" smile.gif 16Мгц/7тактов=2,286МГц получается.
Цитата(CAHTA_1939 @ Mar 28 2008, 02:07) *
3. подключив к XT1 часовой кварц, я щупом посмотрел сигнал. на Xin почти ничего нет, а на Xout напряжение около 0.4вольта.
менял кварцы, конденсаторы. Одна фигня везде =(
А код инициализации меняли соответственно?
CAHTA_1939
Цитата(rezident @ Mar 28 2008, 00:25) *
Это даже чуть больше "положенного" smile.gif 16Мгц/7тактов=2,286МГц получается.

А код инициализации меняли соответственно?


как это 7 тактов? 2 всегда ж было. вроде как.
т.е. из порта ввода\вывода я смогу данные слать максимум на частоте 2,286МГц ?

код инициализации? дык. сначала без кода. он же должен автоматом тактироваться от XT1 .
но потом я начал настраивать программно. перебрал все значения. безрезультатно... =(

посоветуйте что ни будь. горю!
rezident
Цитата(CAHTA_1939 @ Mar 28 2008, 02:36) *
как это 7 тактов? 2 всегда ж было. вроде как.
2 такта это только команда перехода. Запись в порт 4 такта, а модификация (чтение-накладывание маски-запись) - 5 тактов. 5+2=7, не так ли? Если не верите, запустите в IAR симулятор и шагая по асмовому (именно асмовому!) коду смотрите CYCLECOUNTER.
Цитата(CAHTA_1939 @ Mar 28 2008, 02:36) *
т.е. из порта ввода\вывода я смогу данные слать максимум на частоте 2,286МГц ?
Не-а, еще меньше. Посчитайте затраты на синхронизацию. Даже заранее подготовленный результат вывода с линейным кодом дает время стробированного вывода одного байта 4+4=8 тактов на байт/слово. Причем это только для 80-и пинового кристалла, имеющего 16-ти разрядный порт. Для обычных 8-ми битных портов еще меньше получится. Либо выводить придется полубайтами, чтобы сигнал строба на выводах этого же порта был. А зачем такие "извращения", если не секрет?
Цитата(CAHTA_1939 @ Mar 28 2008, 02:36) *
посоветуйте что ни будь. горю!
В такой ситуации остается только один совет - заменить кристалл sad.gif
CAHTA_1939
Цитата(rezident @ Mar 28 2008, 00:47) *
А зачем такие "извращения", если не секрет?


вы имеете ввиду макс. частоту вывода? просто интересно.

а кристал и правда прийдется заменить. вотт только это вреня. ибо я сам менять его не буду, а придется в монтажку отдавать.
rezident
Цитата(CAHTA_1939 @ Mar 28 2008, 02:55) *
вы имеете ввиду макс. частоту вывода? просто интересно.
К сожалению, особой скоростью "ногодрыжества" MSP430 похвалиться не может.
CAHTA_1939
Цитата(rezident @ Mar 28 2008, 01:08) *
К сожалению, особой скоростью "ногодрыжества" MSP430 похвалиться не может.

2Мгц тоже нормально.
CAHTA_1939
Цитата(rezident @ Mar 28 2008, 00:47) *
2 такта это только команда перехода. Запись в порт 4 такта, а модификация (чтение-накладывание маски-запись) - 5 тактов. 5+2=7, не так ли? Если не верите, запустите в IAR симулятор и шагая по асмовому (именно асмовому!) коду смотрите CYCLECOUNTER.


посмотрел. у меня получилось 6 тактов. и тем самым 2,6Мгц ...
CAHTA_1939
по странным обстоятельствам, сегодня часовой кварц запустился. на Xin и Xout хороший сигнал частотой 32кгц и имеет напряжение 1вольт.(у 149 поболее )
настроил вывод на вывод частоты ACLK, все нормально. необходимые 32кГц.

но возник вопрос. у меня почемуто не хочет MCLK и SMCLK тактироваться от Xin...

вот настройка.
Код
   BCSCTL1 &= ~XTS +DIVA_0;
   BCSCTL3 |= LFXT1S_0+LFXT1S_1+XCAP_3;
   while ((BCSCTL3&LFXT1OF)!=0);
   BCSCTL2 = SELM_3+SELS;


В BCSCTL2 задаю источник тактирования.
но на выводах MCLK и SMCLK не частота в 32 кгц
на MCLK постоянный лог.1. (напряжение в 3.3вольта)
а на SMCLK ~1Мгц, т.е. частота с DCO ...

P.S. с высоко частотными кварцами таже фигня =(
rezident
Скорее всего вы ошиблись. Нет сигнала на выходе SMCLK. Потому что SMCLK от LFXT в этом кристалле затактировать нельзя. См. внимательно блок-схему и комментарии к ней на Figure 4−1. Basic Clock Block Diagram в User's Guide. Вы установили бит SELS в BCSCTL2 тем самым, подключив SMCLK к XT2CLK, который не генерируется по причине отсутствия кварца на XT2. Ну внимательнее же читайте User's Guide!
Кстати, оператор
Код
BCSCTL1 &= ~XTS +DIVA_0;
эквивалентен
Код
BCSCTL1 = 0;
Проверьте сами wink.gif
CAHTA_1939
Цитата(rezident @ Mar 29 2008, 02:43) *
Скорее всего вы ошиблись. Нет сигнала на выходе SMCLK. Потому что SMCLK от LFXT в этом кристалле затактировать нельзя. См. внимательно блок-схему и комментарии к ней на Figure 4−1. Basic Clock Block Diagram в User's Guide. Вы установили бит SELS в BCSCTL2 тем самым, подключив SMCLK к XT2CLK, который не генерируется по причине отсутствия кварца на XT2. Ну внимательнее же читайте User's Guide!
Кстати, оператор
Код
BCSCTL1 &= ~XTS +DIVA_0;
эквивалентен
Код
BCSCTL1 = 0;
Проверьте сами wink.gif

согласен со всем. но тогда почему MCLK не хочет тактироваться от XT1 ?
rezident
Цитата(CAHTA_1939 @ Mar 29 2008, 05:08) *
согласен со всем. но тогда почему MCLK не хочет тактироваться от XT1 ?

Видимо потому, что вы опять невнимательны smile.gif и пользуетесь операцией сложения вместо логического ИЛИ.
Операция
Код
BCSCTL3 |= LFXT1S_0+LFXT1S_1+XCAP_3;

эквивалентна
Код
BCSCTL3 |= LFXT1S1|XCAP_3;

При этом с учетом XTS=0 вместо
Цитата
When XTS = 0:
00 32768 Hz Crystal on LFXT1
выбирается
Цитата
01 Reserved
ih_
Только, что танцевал с бубном целый день вокруг MSP430F2618, но с XT2.
Цитата(rezident @ Mar 26 2008, 02:44) *
Код
do
{
    IFG1 &= ~OFIFG;                         // Clear OSCFault flag
    for (i = 0xFF; i > 0; i--);             // Time for flag to set
}  while (IFG1 & OFIFG);                     // OSCFault flag still set?
не эквивалентен этому по логике работы:
Код
while(BCSCTL3&XT2OF);
Второй работает, первый нет (ждет бесконечно). Т.к. логика формирования флага OFIFG изменилась. Во втором семействе из нее исключены сигналы включения соответсвующих модулей. Т.е. даже если XT1 выключен (флагом XT1off), а XT2 включен (и работает нормально), то OFIFG все равно будет сформирован.
Кто нибудь может объяснить такое развитие семейства?

Еще немного танцев, но для XT2 вслед за строчкой
Код
while(BCSCTL3&XT2OF);
нужно добавить
Код
IFG1&=~OFIFG;                    //clear fault flag
Хотя флаг и устанавливается обратно. Без его сброса переключение MCLK на XT2 не происходит. Странно.
ps:Модераторов прошу поправить заголовок темы, почти вся ветка справедлива и для XT2.
Благодарю.
Pavel V.
У меня такой же процессор и тоже странности с тактированием, писал в соседней ветке: http://electronix.ru/forum/index.php?showtopic=81678
Уж не закономерность ли это?

Я вот такой код для ВЧ кварца использовал. Пока не перешел на калибруемый DCO.
Код
#ifndef CLOCK_H_
#define CLOCK_H_

#include <stdint.h>
#include "hardware.h"

/*
* OSCFAULT interrupt
*/

#pragma vector=NMI_VECTOR
__interrupt void OSCFAULT_ISR(void) {
    volatile uint16_t i;
    BCSCTL1 &= ~XT2OFF;                    // Activate XT2 high freq xtal
    BCSCTL3 |= XT2S_2 + XCAP_3;            // 3 - 16MHz crystal or resonator, 12,5 pF
    do {
        IFG1 &= ~OFIFG;                    // Clear OSCFault flag
        for (i = 0xFF; i > 0; i--);        // Time for flag to set
    } while (IFG1 & OFIFG);                // OSCFault flag still set?

    BCSCTL2 |= SELM_2 + SELS;            // MCLK, SMCLK = XT2 HF XTAL (safe)
    IE1 |= OFIE;                        // IRQ from detector
}

#endif /* CLOCK_H_ */

Код
int main( void )
{
    WDTCTL = WDTPW + WDTHOLD;                         // Stop WDT
    IFG1 |= OFIFG;                                    // Set flag OFIFG
    IE1 = OFIE;                                       // Enable IRQ from OSC fault
}
SanvaldYV
Цитата
The OFIFG oscillator-fault flag is set and latched at POR or when an oscillator fault (LFXT1OF, or XT2OF) is detected. When OFIFG is set, MCLK is sourced from the DCO, and if OFIE is set, the OFIFG requests an NMI interrupt.

То есть, получается вообще нельзя переключить MCLK ни на что кроме DCO, если установлен OFIFG.

Если же хотите проверить включился ли у Вас уже собственно XT2, то и проверяйте непосредственно XT2OF, а не OFIFG.
rezident
Цитата(Юрий Санвальд @ Oct 26 2010, 17:34) *
То есть, получается вообще нельзя переключить MCLK ни на что кроме DCO, если установлен OFIFG.
А как вы хотите? Переключить выполнение программы на тактирование от генератора, который не функционирует, что ли? Читаем предыдущий абзац внимательно.
Цитата
The crystal oscillator fault bits LFXT1OF, and XT2OF are set if the corresponding crystal oscillator is turned on and not operating properly. The fault bits remain set as long as the fault condition exists and are automatically cleared if the enabled oscillators function normally.
OFIFG формируется только, если генератор включен, но не работает корректно. Если вы не используете генератор, то обеспокойтесь, чтобы его (программно) выключить. Кстати, после старта (POR) XT2 выключен. Включен лишь XT1 в режиме LF.
SanvaldYV
Цитата(rezident @ Oct 27 2010, 00:04) *
А как вы хотите? Переключить выполнение программы на тактирование от генератора, который не функционирует, что ли? Читаем предыдущий абзац внимательно.
OFIFG формируется только, если генератор включен, но не работает корректно. Если вы не используете генератор, то обеспокойтесь, чтобы его (программно) выключить. Кстати, после старта (POR) XT2 выключен. Включен лишь XT1 в режиме LF.


Ну а как Вы предлагаете выключить ХТ1? ХТ2 выключается через XT2OFF, но ХТ1 то чем выключить? При включенном и нормально работающем ХТ2 переключить на него MCLK не удастся, если отсутствует или не работает генератор на XT1.

П.С. Понятно, конечно, что проблема надуманная. Во-первых, тактировать именно MCLK не от DCO, а от внешнего ВЧ-кварца вряд ли бывает необходимо. Во вторых, если уж вдруг приспичило так сделать, но при этом не нужен НЧ-кварц, то ВЧ можно повесить на XT1, а XT2 выключить.
rezident
Цитата(Юрий Санвальд @ Oct 27 2010, 15:01) *
если уж вдруг приспичило так сделать, но при этом не нужен НЧ-кварц, то ВЧ можно повесить на XT1, а XT2 выключить.
Вот именно! Если используется один кварц (любой, НЧ или ВЧ), то использовать для него следует именно XT1.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.