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

 
 
> Xmega не запускается от кварцевого резонатора., Те же "гости" в ту же хату
misyachniy
сообщение Aug 6 2013, 15:36
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454



Собрал первую плату на Xmega.
Программирование и переключение на внутренний 32 МГц генератор работает.
Переключение на кварцевый генератор никак.

В начале проверил/перепроверил аппаратуру.
Прозвонил все выводы XTAL, специально приобрел конденсаторы 15пФ.
Перепробовал три разных кварца из разных партий.
Все равно генерации нет, на одном выводе логический ноль (~0,1В), на втором единица(~3,3В)

Перечитал документацию, нашел особенность, защиты тактирования.
Взял примеры с этого сайта и с других.
Не менее 6 разных вариантов.
CODE
/* От RC генератора работает

CLKSYS_Enable( OSC_RC32MEN_bm );
CLKSYS_Prescalers_Config( CLK_PSADIV_1_gc, CLK_PSBCDIV_1_2_gc );
do {} while ( CLKSYS_IsReady( OSC_RC32MRDY_bm ) == 0 );
CLKSYS_Main_ClockSource_Select( CLK_SCLKSEL_RC32M_gc );

*/

/*
// симулятор останавливается на третьем операторе - тактирования нет

CLKSYS_XOSC_Config( OSC_FRQRANGE_9TO12_gc, false, OSC_XOSCSEL_XTAL_16KCLK_gc );
CLKSYS_Enable( OSC_XOSCEN_bm );
while( CLKSYS_IsReady( OSC_XOSCRDY_bm ) == 0 );

CLKSYS_Main_ClockSource_Select( CLK_SCLKSEL_XOSC_gc );
*/


// симулятор останавливается на третьем операторе - тактирования нет
/*
OSC.XOSCCTRL = 0xCB; // выбор внешнего генератора с временем запуска 16 тыс. CLK и частотой 12-16 МГц
OSC.CTRL = 0x08; // разрешение работы внешнего генератора
while((OSC.STATUS & 0x08) == 0 ); // ожидание появления в регистре статуса бита включения синхронизации от внешнего генератора

OSC.PLLCTRL = 0xC3; // настройка блока PLL на синхронизацию от внешнего источника и 3-х кратоное умножение
OSC.CTRL = OSC.CTRL | 0x10; // разрешение работы блока PLL
while((OSC.STATUS & 0x10) == 0 ); // ожидание появления в регистре статуса бита включения блока PLL
CCP = 0xD8; // включение защиты от изменения регистров ввода-вывода на время изменения синхронизации
CLK.CTRL = 0x04; // настройка системной синхронизации от блока PLL
OSC.CTRL = OSC.CTRL & 0xFE; // отключение системной синхронизации от внутреннего RC-генератора частотой 2 МГц
*/

/*
// симулятор останавливается на четвертом операторе - тактирования нет
CCP = 0xD8;
OSC.XOSCCTRL = 0xCB;
OSC.PLLCTRL = 0xC3;
OSC.CTRL = 0x08;
while((OSC.STATUS & 0x08) == 0);
OSC.CTRL = OSC.CTRL | 0x10;
while((OSC.STATUS & 0x10) == 0 );
CLK.CTRL=0x04;
OSC.CTRL = OSC.CTRL & 0xFE;
*/

// симулятор останавливается на третьем операторе - тактирования нет
/*
OSC.XOSCCTRL=0xCB; // 16MHz, start time 16000 clk
OSC.CTRL= 0x08; // enable external clock
while((OSC.STATUS & 0x08) == 0 ); // ожидание появления в регистре статуса бита включения синхронизации от внешнего генератора
OSC.PLLCTRL = 0xC2; // настройка блока PLL на синхронизацию от внешнего источника и 2-х кратоное умножение
OSC.CTRL = OSC.CTRL | 0x10; // разрешение работы блока PLL
while((OSC.STATUS & 0x10) == 0 ); // ожидание появления в регистре статуса бита включения блока PLL
CCP=0xD8; // load protect IO
CLK.CTRL = 0x04; // настройка системной синхронизации от блока PLL
OSC.CTRL = OSC.CTRL & 0xFE; // отключение системной синхронизации от внутреннего RC-генератора частотой 2 МГц
*/

/*

// симулятор останавливается на третьем операторе - тактирования нет
OSC.XOSCCTRL =0x4b;
OSC.CTRL = 0x08;
while (!(OSC.STATUS &OSC_XOSCRDY_bm));
CCPWrite(&CLK.CTRL,0x03);
OSC.CTRL = 0x08;
*/

/*
// симулятор останавливается на третьем операторе - тактирования нет

CLKSYS_XOSC_Config( OSC_FRQRANGE_2TO9_gc, false, OSC_XOSCSEL_XTAL_16KCLK_gc );
CLKSYS_Enable( OSC_XOSCEN_bm );
do {} while ( CLKSYS_IsReady( OSC_FRQRANGE_9TO12_gc ) == 0 );
CLKSYS_Main_ClockSource_Select( CLK_SCLKSEL_XOSC_gc );
CLKSYS_Disable( OSC_RC2MEN_bm );
CLKSYS_PLL_Config ( OSC_PLLSRC_XOSC_gc, 4);
CLKSYS_Enable( OSC_PLLEN_bm );
CLKSYS_Prescalers_Config( CLK_PSADIV_1_gc, CLK_PSBCDIV_1_1_gc );
do {} while ( CLKSYS_IsReady( OSC_PLLRDY_bm ) == 0 );
CLKSYS_Main_ClockSource_Select( CLK_SCLKSEL_PLL_gc );
*/

Пробовал менять оптимизацию по скорости и размеру (IAR 6.10) толку никакого.
Наверное не там копаю.

Сообщение отредактировал IgorKossak - Aug 6 2013, 16:53
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Дмитрий_Мигачев
сообщение Sep 2 2013, 08:57
Сообщение #2


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

Группа: Участник
Сообщений: 110
Регистрация: 28-02-06
Из: Россия г. Омск
Пользователь №: 14 784



А вот я использую для програмиирования среду Atmel Studio 6. Очень долго не мог заставить работать внешний кварц. В симуляторе и по отладке через JTAG наблюдал, что перед тем как регистр CLK.CTRL изменится на тактирование от PLL происходил сброс в 0 в CCP[0]. Долго не мог понять почему так, на AVRFreaks вычитал что необходимо ставить оптимизацию -Os и это помогло. Я так понимаю, теперь чтобы выбрать другую оптимизацию мне нужно этот участок кода писать на ассемблере?
Сам код:
Код
OSC.XOSCCTRL = xoscctrl_reg;
OSC.CTRL = OSC_XOSCEN_bm;
while( !( OSC.STATUS & OSC_XOSCRDY_bm ) );
OSC.PLLCTRL = pllctrl_reg;
OSC.CTRL |= OSC_PLLEN_bm;
while ( !( OSC.STATUS & OSC_PLLRDY_bm ) );
CCP = CCP_IOREG_gc;
CLK.CTRL = CLK_SCLKSEL_PLL_gc;
OSC.CTRL = OSC.CTRL & 0xFE;


Далее решил проверить, написал простенький код:
Код
ISR(TCC0_OVF_vect)
{
    TCC0.CTRLA = 0;
    PORTF.OUTTGL = PIN6_bm;
}

int main(void)
{
    PMIC.CTRL = PMIC_LOLVLEN_bm;
    PORTF.DIRSET = PIN6_bm;
    PORTF.OUTSET = PIN6_bm;
    while (1)
    {
        asm("sei");
        TCC0.CNT = 0;
        TCC0.PER = 1;
        TCC0.INTCTRLA = 1;
        TCC0.CTRLA = 1;
        while ( TCC0.CTRLA & 1 );
    }
}

И наблюдаю на осциле частоту ногодрыгания 250 кГц. Я конечно читал про виртуальные порты, точно не помню насколько будет прирост (сейчас буду считать), но думаю не более 1 МГц станет?

P.S. Да кстати, частота работы ЦПУ - 32 МГц

Сообщение отредактировал Дмитрий_Мигачев - Sep 2 2013, 08:58


--------------------
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 15:57
Рейтинг@Mail.ru


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