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

 
 
 
Closed TopicStart new topic
> XMEGA E5 тактирование 8МГц от встроенного 8МГц источника
Дмитрий_Мигачев
сообщение Dec 4 2015, 05:44
Сообщение #1


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

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



Добрый день уважаемые коллеги.
Пару дней бьюсь и ничего не получается,
Задача такая использовать встроенный генератор 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, 05:49


--------------------
Go to the top of the page
 
+Quote Post
Склихасовский
сообщение Dec 4 2015, 08:50
Сообщение #2


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

Группа: Участник
Сообщений: 77
Регистрация: 29-11-06
Пользователь №: 22 912



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


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

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



Go to the top of the page
 
+Quote Post
Дмитрий_Мигачев
сообщение Dec 4 2015, 08:57
Сообщение #3


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

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



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

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

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


--------------------
Go to the top of the page
 
+Quote Post
Дмитрий_Мигачев
сообщение Dec 4 2015, 10:31
Сообщение #4


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

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



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

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

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

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


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

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 14:32
Рейтинг@Mail.ru


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