Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: XMEGA E5 тактирование 8МГц от встроенного 8МГц источника
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Дмитрий_Мигачев
Добрый день уважаемые коллеги.
Пару дней бьюсь и ничего не получается,
Задача такая использовать встроенный генератор 8МГц для тактирования 8 МГц (По дефолту тактирование от этого генератора делится на 4).
Микроконтроллер atxmega32e5.
В интернете всех интересует как затактировать его от встроенного 32МГц генератора, что кстати у меня тоже не получается. Хотя тактирование от кварца проходит.
Начал разбирать свой старый код для atxmega8e5, там у меня была задача как тактировать от внешнего кварца, код такой:
Код
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 ) );
asm ("ldi r16,0xd8");
asm ("ldi r17,0x04");
asm ("out 0x34,r16");
asm ("sts 64,r17");
OSC.CTRL = OSC.CTRL & 0xFE;        //Отключение внутреннего 2 МГц генератора

На эти переменные xoscctrl_reg, pllctrl_reg не обращайте внимания они инициализированы выше в коде.
Самое, что интересное стало сейчас для меня что такой код работает, А что именно мне показалось интересным? То, что в этом коде нет записи в регистр CLK.CTRL
и по идее код на asm вроде как лишний, поскольку для изменения значения в регистре OSC не нужно записывать данные в CCP, но это я не проверял.
(возможно как раз при записи в CCP, происходит автоматическое изменение в регистре CLK.CTRL)

По аналогии я написал такой код:
Код
    OSC.CTRL |= OSC_RC8MEN_bm;
    while( !( OSC.STATUS & OSC_RC8MRDY_bm ) );
    asm ("ldi r16,0xD8");
    asm ("ldi r17,0x04");
    asm ("out 0x34,r16");
    asm ("sts 64,r17");
    CLK.CTRL = CLK_SCLKSEL_RC8M_gc;
    OSC.CTRL &= ~(1<<OSC_RC2MEN_bp);

Хотя я перепробовал очень много вариаций, и все тщетно.
При программной отладке происходит зависание в цикле, на железе зависаний нет, но частота не изменяется.
Можно конечно забить и поставить кварц, под него разведено, но так охото понять почему у меня ничего не получается.
Склихасовский
Цитата(Дмитрий_Мигачев @ Dec 4 2015, 08:44) *
Добрый день уважаемые коллеги.
Пару дней бьюсь и ничего не получается,


Тоже решил попробывать Е5
----
правда на запуске генератора не заморачивался
просто пернес код от мега а
у меня 8 мгц такта от внешнего кварца и PLLx4
--
но на валидность работу генератора ещё не проверял
у меня костыль с таймером ( опишу в другой ветке)

Честно говоря терзают мысли какой то совершенно сырой чип.



Дмитрий_Мигачев
Цитата(Склихасовский @ Dec 4 2015, 15:50) *
Тоже решил попробывать Е5
----
правда на запуске генератора не заморачивался
просто пернес код от мега а
у меня 8 мгц такта от внешнего кварца и PLLx4
--
но на валидность работу генератора ещё не проверял
у меня костыль с таймером ( опишу в другой ветке)

Честно говоря терзают мысли какой то совершенно сырой чип.

Когда я первый раз с ними столкнулся, это вроде середина 2013 года, сырым для него была atmel studio, помню там какой то глючок был серьезный при отладке, потом версию обновили, все стало лучше. На самом деле мне нравятся чипы E5, с другими xmega'ми не работал
Дмитрий_Мигачев
Удалось запустить от встроенного 32 МГц генератора, использовав вместо четырех ассемблерных вставок,
код:
Код
CCP = CCP_IOREG_gc;

при использовании оптимизации: -Os

Уже не помню откуда взялся тот ассемблерный код, но по всей видимости он не укладывается в положенные 4 такта

Я понял свою позорную ошибку 01.gif ,пошел изучать ассемблер, тема закрыта.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.