реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Что такое MCLK?, DCO
Lucky:)
сообщение Jan 26 2007, 07:27
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 182
Регистрация: 5-10-06
Пользователь №: 21 031



Вопрос 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);
не даёт желаемого результата.
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Jan 26 2007, 09:08
Сообщение #2


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Цитата(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.
Go to the top of the page
 
+Quote Post
Lucky:)
сообщение Jan 26 2007, 09:20
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 182
Регистрация: 5-10-06
Пользователь №: 21 031



Да, RSELx DCOx - стоят по умолчанию, отсюда и частота ~800-900к

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

aga smile.gif

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

мне для эксперемента хотелось бы переключить CPU на XT2, а DCO отключить.
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Jan 26 2007, 09:32
Сообщение #4


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Цитата(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
Go to the top of the page
 
+Quote Post
NVade
сообщение Jan 26 2007, 13:01
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 71
Регистрация: 7-07-06
Из: Новосибирск
Пользователь №: 18 652



Не получаете никакой разницы из-за того, что 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?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 26 2007, 19:06
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(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;
}
теперь хоть пинцетом кварц короти - после восстановления колебаний процессор снова переключается на кварц.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jan 27 2007, 21:53
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



А я не переключаю ядро на кварц никогда, я просто ускоряю DCO. Процессор никогда не виснет!
Если уж идет речь о граблях :-)


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
rezident
сообщение Jan 27 2007, 22:19
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(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, в тех кристаллах, где он есть.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jan 28 2007, 14:58
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(rezident @ Jan 27 2007, 23:19) *
.. Даже более того, если нужна частота выше искомых 5-6МГц, но температурная стабильность не очень волнует ..

Конечно, речь не идет об ускорении любой ценой и уход частоты я учитываю, чтобы не превысить максимум. Получается около 20% потери быстродействия.
Но, программируя на С, не иметь запас производительности в два раза вообще рискованно.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Lucky:)
сообщение Jan 29 2007, 11:07
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 182
Регистрация: 5-10-06
Пользователь №: 21 031



Спасибо, заработало. Вся проблема была в "последовательности". smile.gif
И идея для защиты от "пинцета" мне очень понравилась. a14.gif
Go to the top of the page
 
+Quote Post
alexsl
сообщение Oct 19 2007, 13:03
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 8-02-07
Пользователь №: 25 165



Добрый день. Извините что влезаю. У меня проблема с DCO. Почему-то неработает DCO от внешнего резистора(резистор 200кОм на земле и на P2.5). Вот что я делаю(MSP430f1611):
P2SEL |= (1 << 5);
P2DIR &= ~(1 << 5);
DCOCTL = DCO2 + DCO1 + DCO0;
BCSCTL1 = 0;
BCSCTL2 = 1;
после последней строчки все вылетает. Отладка через жтаг невозможна.
Подскажите кто использовал внешний резистор, у кого работает, что у меня не так.
Заранее спасибо. smile.gif
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 19 2007, 15:21
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Не работает видимо поэтому (выделено)
Цитата(alexsl)
резистор 200кОм на земле и на P2.5

Резистор Rosc подключается к Vcc, а не к Vdd.
Go to the top of the page
 
+Quote Post
alexsl
сообщение Oct 20 2007, 07:18
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 42
Регистрация: 8-02-07
Пользователь №: 25 165



Цитата(rezident @ Oct 19 2007, 19:21) *
Не работает видимо поэтому (выделено)

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

Большое спасибо. Попробую. А вы немогли бы дать ссылку на документ, где это написано. Заранее спасибо.
Go to the top of the page
 
+Quote Post
VAI
сообщение Oct 20 2007, 08:45
Сообщение #14


Профессионал
*****

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



Цитата
А вы немогли бы дать ссылку на документ, где это написано.

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


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 20 2007, 12:58
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(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?
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 20:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.015 секунд с 7
ELECTRONIX ©2004-2016