|
Что такое MCLK?, DCO |
|
|
|
Jan 26 2007, 07:27
|
Частый гость
 
Группа: Свой
Сообщений: 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); не даёт желаемого результата.
|
|
|
|
|
Jan 26 2007, 09:08
|

тут может быть ваша реклама
    
Группа: Свой
Сообщений: 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); у вас обрамлен неким бесконечным циклом? Цитата(Lucky:) @ Jan 26 2007, 07:27)  Вопрос 2.Как можно выключить DCOCLK? Manual говорит надо установить SCG0, но Код _BIS_SR(SCG0 + GIE); не даёт желаемого результата. смотрите стр 2-15 даташита на первое семейство. Чтоб выключить DCO надо перейти в режим LPM1 или ниже. Можно сам осциллятор не выключать а выключить проц, тогда это режим LPM0, то есть взведен CPUOFF.
|
|
|
|
|
Jan 26 2007, 09:20
|
Частый гость
 
Группа: Свой
Сообщений: 182
Регистрация: 5-10-06
Пользователь №: 21 031

|
Да, RSELx DCOx - стоят по умолчанию, отсюда и частота ~800-900к Цитата И я правильно понимаю, что код ... у вас обрамлен неким бесконечным циклом? biggrin.gif aga  Цитата Чтоб выключить DCO надо перейти в режим LPM1 или ниже. Можно сам осциллятор не выключать а выключить проц, тогда это режим LPM0, то есть взведен CPUOFF. мне для эксперемента хотелось бы переключить CPU на XT2, а DCO отключить.
|
|
|
|
|
Jan 26 2007, 09:32
|

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

|
Цитата(Lucky:) @ Jan 26 2007, 09:20)  Да, RSELx DCOx - стоят по умолчанию, отсюда и частота ~800-900к Цитата И я правильно понимаю, что код ... у вас обрамлен неким бесконечным циклом? biggrin.gif aga  Цитата Чтоб выключить DCO надо перейти в режим LPM1 или ниже. Можно сам осциллятор не выключать а выключить проц, тогда это режим LPM0, то есть взведен CPUOFF. мне для эксперемента хотелось бы переключить CPU на XT2, а DCO отключить. DCO выключать не надо чтобы тактироваться от XT2. Достаточно просто переключить SELM, что вы и сделали. Вообще должно работать. Но все же разберитесь сначала с DCO: Задайте частоту DCO какую нибудь очень низкую, и посмотрите частоту морганий. Затем самую высокую и посмотрите моргания. Добьетесь этой разницы (а значит понимания, что вы правильно управляете DCO), то будете пробовать XT2
|
|
|
|
|
Jan 26 2007, 13:01
|
Участник

Группа: Свой
Сообщений: 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?
|
|
|
|
|
Jan 26 2007, 19:06
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Jan 27 2007, 22:19
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(Dog Pawlowa @ Jan 27 2007, 23:53)  А я не переключаю ядро на кварц никогда, я просто ускоряю DCO. Процессор никогда не виснет! Если уж идет речь о граблях :-) Внешний кварц чаще всего нужен для стабильности и начальной точности тактовой частоты, а не просто для "повышения" частоты. Частота DCO весьма сильно зависит как от напряжения питания, так и от температуры. Естественно в применении с внешним резистором (Rosc) частоту DCO можно "разогнать" и до 100МГц, а генератор MSP430 с кварцем на такой частоте работать не будет. Но ведь и ядро на такой частоте не работает, не так ли?  Так что каждый способ/источник тактирования нужен для своей области применения. P.S. более устойчивую работу MSP430 при тактировании от DCO я не опровергаю, а наоборот - подтверждаю. Даже более того, если нужна частота выше искомых 5-6МГц, но температурная стабильность не очень волнует или допускается в задаче проводить перекалибровку частоты DCO по генератору с частотой часового кварца (32768Гц), то я бы весьма рекомендовал использование DCO с внешним резистором или применение FLL, в тех кристаллах, где он есть.
|
|
|
|
|
Jan 29 2007, 11:07
|
Частый гость
 
Группа: Свой
Сообщений: 182
Регистрация: 5-10-06
Пользователь №: 21 031

|
Спасибо, заработало. Вся проблема была в "последовательности".  И идея для защиты от "пинцета" мне очень понравилась.
|
|
|
|
|
Oct 19 2007, 13:03
|
Участник

Группа: Участник
Сообщений: 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; после последней строчки все вылетает. Отладка через жтаг невозможна. Подскажите кто использовал внешний резистор, у кого работает, что у меня не так. Заранее спасибо.
|
|
|
|
|
Oct 20 2007, 07:18
|
Участник

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

|
Цитата(rezident @ Oct 19 2007, 19:21)  Не работает видимо поэтому (выделено)
Резистор Rosc подключается к Vcc, а не к Vdd. Большое спасибо. Попробую. А вы немогли бы дать ссылку на документ, где это написано. Заранее спасибо.
|
|
|
|
|
Oct 20 2007, 08:45
|

Профессионал
    
Группа: Модераторы
Сообщений: 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
--------------------
Если зайца бить, его можно и спички научить зажигать Сколько дурака не бей - умнее не будет. Зато опытнее
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|