Перейти к содержанию
    

XMEGA E5 тактирование 8МГц от встроенного 8МГц источника

Добрый день уважаемые коллеги.

Пару дней бьюсь и ничего не получается,

Задача такая использовать встроенный генератор 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);

Хотя я перепробовал очень много вариаций, и все тщетно.

При программной отладке происходит зависание в цикле, на железе зависаний нет, но частота не изменяется.

Можно конечно забить и поставить кварц, под него разведено, но так охото понять почему у меня ничего не получается.

Изменено пользователем Дмитрий_Мигачев

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день уважаемые коллеги.

Пару дней бьюсь и ничего не получается,

 

Тоже решил попробывать Е5

----

правда на запуске генератора не заморачивался

просто пернес код от мега а

у меня 8 мгц такта от внешнего кварца и PLLx4

--

но на валидность работу генератора ещё не проверял

у меня костыль с таймером ( опишу в другой ветке)

 

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

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тоже решил попробывать Е5

----

правда на запуске генератора не заморачивался

просто пернес код от мега а

у меня 8 мгц такта от внешнего кварца и PLLx4

--

но на валидность работу генератора ещё не проверял

у меня костыль с таймером ( опишу в другой ветке)

 

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

Когда я первый раз с ними столкнулся, это вроде середина 2013 года, сырым для него была atmel studio, помню там какой то глючок был серьезный при отладке, потом версию обновили, все стало лучше. На самом деле мне нравятся чипы E5, с другими xmega'ми не работал

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Удалось запустить от встроенного 32 МГц генератора, использовав вместо четырех ассемблерных вставок,

код:

CCP = CCP_IOREG_gc;

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

 

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

 

Я понял свою позорную ошибку :01: ,пошел изучать ассемблер, тема закрыта.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...