Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Что такое MCLK?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
Lucky:)
Вопрос 1.
Кak я понимаю, это частота для работы CPU и только. И если я "питаю" CPU от XT2CLK(8 MHz) или от DCOCLK (max 900kHz) то код
Код
...
  BCSCTL1 &= ~XT2OFF;                       // turn ON XT2
  вариант 1. BCSCTL2 = SELM_2 + DIVM_0;           // Select MCLK = XT2; Divider for MCLK = 1
  or
  вариант 2. BCSCTL2 = SELM_0 + DIVM_0;           // Select MCLK = DCOCLK; Divider for MCLK = 1
...
P1OUT ^= 0x01;                    
j = 50000;                            
do (j--);
while (j != 0);

должен выполнятся с заметной разницей?
но я не получаю никакой разницы для P1OUT ^= 0x01;


Вопрос 2.
Как можно выключить DCOCLK?
Manual говорит надо установить SCG0, но
Код
_BIS_SR(SCG0 + GIE);
не даёт желаемого результата.
jorikdima
Цитата(Lucky:) @ Jan 26 2007, 07:27) *
Вопрос 1.
Кak я понимаю, это частота для работы CPU и только. И если я "питаю" CPU от XT2CLK(8 MHz) или от DCOCLK (max 900kHz) то код
Код
...
  BCSCTL1 &= ~XT2OFF;                       // turn ON XT2
  вариант 1. BCSCTL2 = SELM_2 + DIVM_0;           // Select MCLK = XT2; Divider for MCLK = 1
  or
  вариант 2. BCSCTL2 = SELM_0 + DIVM_0;           // Select MCLK = DCOCLK; Divider for MCLK = 1
...
P1OUT ^= 0x01;                    
j = 50000;                            
do (j--);
while (j != 0);

должен выполнятся с заметной разницей?
но я не получаю никакой разницы для P1OUT ^= 0x01;


В первых DCO не 900 кГц максимум, а 5 МГц. Его частота зависит от RSELx DCOx бит в регистрах BCSCTL1 и DCOCTL соответственно. В приведенном коде вы не устанавливаете их (хотя по умолчанию вроде он установлен в режим 43, то есть 800 кГц). Лучше эти регистры задавать целиком явно, а не отдельные биты типа BCSCTL1 &= ~XT2OFF;

Напишите, например BCSCTL1=RSEL1;
DCOCTL=DCO2;
Это соответствует частоте в несколько сотен кГц. Можете еще ниже дать.
И я правильно понимаю, что код
Код
P1OUT ^= 0x01;                    
j = 50000;                            
do (j--);
while (j != 0);

у вас обрамлен неким бесконечным циклом? biggrin.gif



Цитата(Lucky:) @ Jan 26 2007, 07:27) *
Вопрос 2.
Как можно выключить DCOCLK?
Manual говорит надо установить SCG0, но
Код
_BIS_SR(SCG0 + GIE);
не даёт желаемого результата.


смотрите стр 2-15 даташита на первое семейство.
Чтоб выключить DCO надо перейти в режим LPM1 или ниже. Можно сам осциллятор не выключать а выключить проц, тогда это режим LPM0, то есть взведен CPUOFF.
Lucky:)
Да, RSELx DCOx - стоят по умолчанию, отсюда и частота ~800-900к

Цитата
И я правильно понимаю, что код ... у вас обрамлен неким бесконечным циклом? biggrin.gif

aga smile.gif

Цитата
Чтоб выключить DCO надо перейти в режим LPM1 или ниже. Можно сам осциллятор не выключать а выключить проц, тогда это режим LPM0, то есть взведен CPUOFF.

мне для эксперемента хотелось бы переключить CPU на XT2, а DCO отключить.
jorikdima
Цитата(Lucky:) @ Jan 26 2007, 09:20) *
Да, RSELx DCOx - стоят по умолчанию, отсюда и частота ~800-900к

Цитата
И я правильно понимаю, что код ... у вас обрамлен неким бесконечным циклом? biggrin.gif

aga smile.gif

Цитата
Чтоб выключить DCO надо перейти в режим LPM1 или ниже. Можно сам осциллятор не выключать а выключить проц, тогда это режим LPM0, то есть взведен CPUOFF.

мне для эксперемента хотелось бы переключить CPU на XT2, а DCO отключить.

DCO выключать не надо чтобы тактироваться от XT2. Достаточно просто переключить SELM, что вы и сделали. Вообще должно работать. Но все же разберитесь сначала с DCO:

Задайте частоту DCO какую нибудь очень низкую, и посмотрите частоту морганий.
Затем самую высокую и посмотрите моргания. Добьетесь этой разницы (а значит понимания, что вы правильно управляете DCO), то будете пробовать XT2
NVade
Не получаете никакой разницы из-за того, что MSP430 просто НЕ переключается на XT2CLK. Там последовательность определенная нужна с очисткой OFIFG. Через эти грабли проходит, как мне кажется, каждый кто работает с MSP430. У меня работает такая последовательность:

FLL_CTL1 &= ~XT2OFF; // turn on secondary high frequency oscillator
FLL_CTL1 |= SELM_XT2 | SELS;
do
{ IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--);
}
while ((IFG1 & OFIFG) != 0); // OSCFault flag still set?
Сергей Борщ
Цитата(NVade @ Jan 26 2007, 12:01) *
Через эти грабли проходит, как мне кажется, каждый кто работает с MSP430.
Это точно. Мое долгое хождение вылилось в такой код:
Код
int __low_level_init(void) {

    WDTCTL = WDTPW | WDTHOLD;

    BCSCTL1 = (0 * XT2OFF) | (0 * XTS) | (DIVA_0) | (0 * RSEL2) | (0 * RSEL1) | (0 * RSEL0);
    BCSCTL2 = DIVS_1 | DIVM_0 | (0 * DCOR) | (1 * SELS) | SELM_2;
    IE1 |= OFIE;

    return 1;
}

#pragma vector = NMI_VECTOR
__root __interrupt void OSCFault (void) {
    BCSCTL2 &= ~SELM_2;            //MCLK=DCO;
    do
        IFG1 &= ~OFIFG;
    while (IFG1 & OFIFG);
    BCSCTL2 |= SELM_2;            //MCLK=XT;
    IE1 |= OFIE;
}
теперь хоть пинцетом кварц короти - после восстановления колебаний процессор снова переключается на кварц.
Dog Pawlowa
А я не переключаю ядро на кварц никогда, я просто ускоряю DCO. Процессор никогда не виснет!
Если уж идет речь о граблях :-)
rezident
Цитата(Dog Pawlowa @ Jan 27 2007, 23:53) *
А я не переключаю ядро на кварц никогда, я просто ускоряю DCO. Процессор никогда не виснет!
Если уж идет речь о граблях :-)

Внешний кварц чаще всего нужен для стабильности и начальной точности тактовой частоты, а не просто для "повышения" частоты. Частота DCO весьма сильно зависит как от напряжения питания, так и от температуры. Естественно в применении с внешним резистором (Rosc) частоту DCO можно "разогнать" и до 100МГц, а генератор MSP430 с кварцем на такой частоте работать не будет. Но ведь и ядро на такой частоте не работает, не так ли? wink.gif Так что каждый способ/источник тактирования нужен для своей области применения.
P.S. более устойчивую работу MSP430 при тактировании от DCO я не опровергаю, а наоборот - подтверждаю. Даже более того, если нужна частота выше искомых 5-6МГц, но температурная стабильность не очень волнует или допускается в задаче проводить перекалибровку частоты DCO по генератору с частотой часового кварца (32768Гц), то я бы весьма рекомендовал использование DCO с внешним резистором или применение FLL, в тех кристаллах, где он есть.
Dog Pawlowa
Цитата(rezident @ Jan 27 2007, 23:19) *
.. Даже более того, если нужна частота выше искомых 5-6МГц, но температурная стабильность не очень волнует ..

Конечно, речь не идет об ускорении любой ценой и уход частоты я учитываю, чтобы не превысить максимум. Получается около 20% потери быстродействия.
Но, программируя на С, не иметь запас производительности в два раза вообще рискованно.
Lucky:)
Спасибо, заработало. Вся проблема была в "последовательности". smile.gif
И идея для защиты от "пинцета" мне очень понравилась. a14.gif
alexsl
Добрый день. Извините что влезаю. У меня проблема с DCO. Почему-то неработает DCO от внешнего резистора(резистор 200кОм на земле и на P2.5). Вот что я делаю(MSP430f1611):
P2SEL |= (1 << 5);
P2DIR &= ~(1 << 5);
DCOCTL = DCO2 + DCO1 + DCO0;
BCSCTL1 = 0;
BCSCTL2 = 1;
после последней строчки все вылетает. Отладка через жтаг невозможна.
Подскажите кто использовал внешний резистор, у кого работает, что у меня не так.
Заранее спасибо. smile.gif
rezident
Не работает видимо поэтому (выделено)
Цитата(alexsl)
резистор 200кОм на земле и на P2.5

Резистор Rosc подключается к Vcc, а не к Vdd.
alexsl
Цитата(rezident @ Oct 19 2007, 19:21) *
Не работает видимо поэтому (выделено)

Резистор Rosc подключается к Vcc, а не к Vdd.

Большое спасибо. Попробую. А вы немогли бы дать ссылку на документ, где это написано. Заранее спасибо.
VAI
Цитата
А вы немогли бы дать ссылку на документ, где это написано.

MSP430x1xx Family User's Guide (Rev. F) (slau049f.pdf, 1544 KB)
http://www.ti.com/litv/pdf/slau049f
стр.4-8, по счету будет 117 из 414.
Цитата
Using an External Resistor (ROSC) for the DCO.
The DCO temperature coefficient can be reduced by using an external resistor ROSC tied to DVCC to source the current for the DC generator
rezident
Цитата(VAI @ Oct 20 2007, 14:45) *
The DCO temperature coefficient can be reduced by using an external resistor ROSC tied to DVCC to source the current for the DC generator

Угу. Кроме того посмотрите на блок-схему Basic Clock Module в любом из User's Guide. Там встроенный резистор нарисован как подключенный к VCC. Если даже по аналогии рассуждать, то с чего ради в таком случае внешний резистор должен быть подключен к GND?
alexsl
Цитата(rezident @ Oct 20 2007, 16:58) *
Угу. Кроме того посмотрите на блок-схему Basic Clock Module в любом из User's Guide. Там встроенный резистор нарисован как подключенный к VCC. Если даже по аналогии рассуждать, то с чего ради в таком случае внешний резистор должен быть подключен к GND?


Большое спасибо. А я как то сразу не обратил внимание. smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.