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

 
 
> 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



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

 


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


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