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

 
 
> Xmega, DFLL
zombi
сообщение Jan 22 2012, 19:57
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Достаточно ли для запуска авто-подстройки частоты от внешнего часового кварца этого кода:
Код
    ldi    RTMPA,OSC_RC32MCREF_bm|OSC_RC2MCREF_bm
    sts    (OSC_DFLLCTRL),RTMPA; set ref. ext. clk

    ldi    RTMPA,DFLL_ENABLE_bm
    sts    (DFLLRC2M_CTRL),RTMPA; enable DFLL RC2
    sts    (DFLLRC32M_CTRL),RTMPA; enable DFLL RC32
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zombi
сообщение Jan 23 2012, 13:22
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(_Артём_ @ Jan 23 2012, 03:10) *
Включаем второй DFLL (нам не нужный) и видим - автоподстройка работает.

Включаю оба intRC генератора 2 и 32 MHz.
Выбираю RC32M в качестве системной синхронизации.
Разрешаю/запрешаю DFLL.
Формирую на пине меандр 4MHz.
И наблюдаю вот такую картину :
при комнатной температуре на пине 4.076MHz
грею мк до ~80C частота падает до 3.995MHz
охлаждаю, опять 4.076MHz

Причём с разрешенными или запрещенными DFLL частота на пине меняется абсолютно одинаково!!!
Т.е. автоподстройка не работает вообще.
Может я не правильно тестирую работу DFLL?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jan 23 2012, 14:28
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Я также проверял.
Вот пример кода (но не факт что рабочего - давно это, вроде оно)
CODE
void InitRTC()
{
CLKSYS_XOSC_Config(OSC_FRQRANGE_2TO9_gc, false, OSC_XOSCSEL_32KHz_gc);
//TODO: remove this or change access method when new compiler is ready.
volatile uint8_t * p;

//Set internal 32kHz oscillator as clock source for RTC.
p = &CLK.RTCCTRL;
*p = CLK_RTCSRC_TOSC32_gc | CLK_RTCEN_bm;
//// DFLL var XPlain tranning
CLKSYS_Enable( OSC_XOSCEN_bm );
do {} while ( CLKSYS_IsReady( OSC_XOSCRDY_bm ) == 0 );
// RTC var 0
//Configure RTC period to 1 second.
CLKSYS_RTC_ClockSource_Enable(CLK_RTCSRC_TOSC32_gc);
RTC_Initialize(3, 0x0000, 0x0000, RTC_PRESCALER_DIV1_gc);

//Enable overflow interrupt.
RTC_SetIntLevels(RTC_OVFINTLVL_MED_gc, RTC_COMPINTLVL_OFF_gc);
}

void EnableCorrection(void)
{
InitRTC();
////CLKSYS_AutoCalibration_Enable(OSC_RC32MCREF_bm, true);
////CLKSYS_AutoCalibration_Enable(OSC_RC2MCREF_bm, true);
OSC.DFLLCTRL=1;
DFLLRC2M.CTRL|=1;
CLKSYS_AutoCalibration_Enable( OSC_RC2MCREF_bm, true );

/* Due to an errata on ATxmega128A1 we need to enable the 32MHz internal RC oscillator
* and the Autocalibration for the 32MHz internal RC oscillator in order for the calibration
* to work correctly on the 2 MHz internal RC oscillator*/

CLKSYS_Enable( OSC_RC32MEN_bm );
do {} while ( CLKSYS_IsReady( OSC_RC32MRDY_bm ) == 0 );
CLKSYS_AutoCalibration_Enable( OSC_RC32MCREF_bm, true);
}

int main ()
{
EnableCorrection();
}


Сообщение отредактировал IgorKossak - Jan 23 2012, 15:37
Причина редактирования: [codebox], бездумное цитирование
Go to the top of the page
 
+Quote Post
zombi
сообщение Jan 23 2012, 20:51
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Цитата(_Артём_ @ Jan 23 2012, 17:28) *
Я также проверял.
Вот пример кода (но не факт что рабочего - давно это, вроде оно)

Спасибо _Артём_ Вы натолкнули меня на прочтение нового DS а не того которым я пользовался (старый переведённый на русский).
А в новом четко сказано что для работы DFLL от внешнего кварца нужно просто разрешить XOSC в режиме "32.768 kHz TOSC".
Пол дня блин убил.

Но теперь всё заработало. УРА. yeah.gif

PS. Особой разницы автоподстройки от внешнего кварца или от внутреннего RC32K не увидел. В обоих случаях ~0.2%.
Молодцы Атмел, хороший внутренний RC32K сделали!!!
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jan 23 2012, 22:12
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(zombi @ Jan 23 2012, 22:51) *
Спасибо _Артём_ Вы натолкнули меня на прочтение нового DS а не того которым я пользовался (старый переведённый на русский).
А в новом четко сказано что для работы DFLL от внешнего кварца нужно просто разрешить XOSC в режиме "32.768 kHz TOSC".

Пожалуста.
Это к какой ревизи относится? ("новом четко сказано что ....").
Получается что это
Цитата
Both DFLLs and both oscillators has to be enabled for one to work


уже не нужно? (Есть некоторое кол-во xm256a3 rev. A - надо в дело пустить)

Цитата(zombi @ Jan 23 2012, 22:51) *
PS. Особой разницы автоподстройки от внешнего кварца или от внутреннего RC32K не увидел. В обоих случаях ~0.2%.
Молодцы Атмел, хороший внутренний RC32K сделали!!!

0.2% - это хорошо. Молодцы ли? Ведь с другой стороны посмотреть: плохой RTC32k сделали, что от него толка нет.
И кстати, 0.2% в каком диапазоне температур?
P.S. Код не приведёте? (Штоб було).
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 17th June 2025 - 19:58
Рейтинг@Mail.ru


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