Містер - х - або atxmega (на прикладі atxmega32a4) швидкий старт

У порівнянні з серіями ATmega і ATtiny ATXmega придбала досить багато дикою приємних булочок, а саме:

Тактова частота до 32МГц.

Арифметико-логічний пристрій (АЛП). Тепер знакові числа наші друзі, бо МК вміє працювати з ними хардварний!

Багаторівневий (а саме 3х рівневий) контролер переривань.

Старт МК з системою такторіванія за замовчуванням, і вибір потрібної безпосередньо в коді. Тепер помилитися з виставленням фьюз, при виборі системи тактирования неможливо :)

Програмно-оцінний 4х провідний інтерфейс PDI (2 дроти з яких земля і харчування). Шити і налагоджувати через один і той же маленький роз'єм дико круто по-моєму :)

І ще багато булочок про які можна прочитати у наших гавкають товаришів

Так само тепер абсолютно необов'язково ставити RC ланцюжок на RESET пін, але резюка в 10КОм підтягнутий до харчування треба.

Єдине що може злегка збентежити новачка, при переході з класичних AVR контролерів - це те, що серія Xmega вимагає для харчування 3,3в. Поспішаю вас заспокоїти, ця вимога не так суворо як здається. Провівши ряд нелюдських експериментів було встановлено, що МК прекрасно працює хоч від 4,2В, короткочасно було подано 5в, МК навіть не чхнув. Так-же подавалися сигнали рівнем в 5в, і МК абсолютно спокійно з ними працював, не втрачаючи працездатності.

система тактирования
Відмінні особливості

Швидкий час запуску
Безпечне перемикання синхронізації під час роботи
Внутрішні генератори:
Внутрішній RC-генератор частоти 32 МГц з можливістю автоматичного калібрування
Внутрішній RC-генератор частоти 2 МГц з можливістю автоматичного калібрування
Внутрішній калібрований RC-генератор частоти 32 кГц
32 кГц-ий сверхмалопотребляющій генератор (ULP-генератор)
Зовнішні джерела синхронізації
Кварцовий генератор частоти 0.4 ... 16 МГц
Кварцовий генератор частоти 32.768 кГц
Зовнішній сигнал синхронізації
ФАПЧ з внутрішніми і зовнішніми джерелами синхронізації і коефіцієнтом множення частоти від 1 до 31
Подільники частоти синхронізації з коефіцієнтом ділення від 1 до 2048
Швидкодіюча синхронізація УВВ, в 2 і 4 рази перевищує частоту синхронізації ЦПУ
Автоматичне калібрування внутрішніх генераторів
Виявлення відмови кварцового генератора
При запуску або скидання МК стартує від внутрішнього RC-генератора з частотою 2 МГц. А далі ми в коді вже вибираємо те, що нам треба (якщо треба звичайно). Особисто мені вистачило внутрішнього RC-генератора з частотою 32 МГц, бо його стабільність задовольняла всім моїм потребам.

Робиться це так:


Тут все просто:
З початку ми включаємо роботу внутрішнього тактового генератора 32MHz, і він типу запускається, а ми чекаємо в циклі поки він не підготується, тобіш його частота не встановиться, і він стане придатний для використання, про що нам повідомить біт RC32MRDY. Потім ми записуємо значення в регістр CCP. тим самим даючи можливість нам потривожити регістр CLK_CTRL. є захищеним. Але тут теж є плюшка! Щоб дозволити зміну захищеного регістра вводу-виводу або виконати захищену інструкцію протягом інтервалу часу, що становить не більше 4 циклів інструкції ЦПУ, в регістр CCP необхідно записати коректну сигнатуру. Всі переривання, що виникли по ходу цього інтервалу часу, ігноруються, а по його закінченні - обробляються з урахуванням рівня і пріоритету. Ось якраз 0xD8 і дозволяє нам протягом наступних 4-х циклів міняти значення захищеного регістра. Дозвіл отримали, і в регістрі CLK_CTRL говоримо «такт від обраного джерела (в нашому випадку це внутрішній тактовий генератор 32MHz)».

Для інших способів тактирования принцип такий же, тільки регістри інші.

І так, потрібну частоту ми вибрали тепер треба зробити своєрідний «Hello, world!» В стилі МК, а саме моргнути світлодіодом. А для цього нам потрібно навчитися працювати з портами введення-виведення.

У серії Xmega робота з портами подібна роботі з портами в класичних AVR, але є багато додаткових дикою приємних плюші, а саме:

Для роботи з портами у нас є 3 регістра. Призначення лінії введення-виведення налаштовується з програми користувача. У кожного порту передбачені такі регістри управління лініями в / в: регістр напряму (DIR), регістр виведення даних (OUT). Для опитування стану ліній в / в передбачений регістр введення даних (IN), а додаткові можливості кожної лінії в / в можна налаштувати через регістр конфігурації лінії введення-виведення (PINnCTRL. Де n-номер лінії в / в).

Напрямок лінії n задається через окремий біт DIRn регістра напрямки DIR. Якщо біт DIRn зробити рівним одиниці, то лінія n буде працювати, як вихід. Якщо ж біт DIRn зробити рівним нулю, то лінія буде працювати, як вхід. Якщо лінія налаштована, як вихід, то біт OUTn регістра OUT буде визначати її стан. Запис одиниці в біт OUTn призводить до встановлення на лінії n високого рівня, а запис нуля - низького рівня.

Для опитування стану лінії передбачений регістр IN. Опитування стану лінії можна виконати, незалежно від того, працює лінія як вхід або як вихід, крім ситуації, коли відключений цифровий вхідний каскад. Після перекладу МК в стан скидання, всі лінії в / в, незалежно від активності синхронізації, переходять в високоімпедансное стан.

У регістрів DIR і OUT є додаткові регістри SET. CLR. GL де SET - встановити значення, CLR - очистити значення, GL - інвертувати значення потрібного біта просто записом одиниці в потрібний нам біт одного з цих регістрів, в залежності від того, що нам треба. Все це не забороняє нам працювати з регістрами DIR і OU T як в класичних AVR.
що я власне і зробив по початку вивчення ці МК:


Так само кожен порт підтримує конфігурацію 2х будь-яких ніжок на зовнішнє переривання, маючи при цьому окремий вектор кожному з 2х переривань на порту.

Детальніше про порти введення-виведення можна почитати тут

Багаторівневий контролер переривань

Раз ми вже торкнулися роботу з перериваннями, то варто розповісти про те, яким чином з цими перериваннями працювати.
І так, у нас є 2 види дозволу переривань. Глобальне дозвіл, яке робиться установкою біта в регістрі SREG:

Але тільки дана дія не дозволить роботу переривань, бо перед цим нам треба налаштувати сам контролер переривань. Робиться це так:

В даному прикладі ми вирішили всі рівні переривань, яких як можна зрозуміти з прикладу 3. Переривання більш високого рівня можуть виникнути навіть під час переривань нижчого рівня, а більш низькорівневі не можуть перебити переривання більш високого рівня.

Дану статтю прошу вважати вступною частиною по МК серії Xmega. Її метою було поставити перший старт для тих, кому хотілося б вивчити дану серію МК.
Особисто мені ця серія дуже сподобалася легкістю роботи з нею, своєю спритністю і досить терпимого ставлення до нелюдських експериментів.
У наступній статті докладно розглянемо роботу з різноманітними інтерфейсів даного МК.

Ну, є перехідні процеси. Ставимо ємність на Reset, щоб перечекати їх. При установці Fuse на 0 ms ми все одно маємо затримку на N ms, а якщо не ставимо, то МК кілька разів на перехідних «резет» так швидко, що не встигне инициализироваться. Ось і виходить, що при установці Fuse на 0 ms ми маємо ті ж N ms затримки. Ну, а якщо налаштовуємо затримку на N ms, то вона перекриє час перехідних процесів. Ось і виходить, що ємність не потрібна. Інша справа, якщо нам треба трохи «допомогти» триггеру Шмітта для збільшення тривалості гистерезиса, якщо на резет лізе перешкода в процесі роботи МК (ну, наприклад випробування на статику). При хорошому ми ще одного помічника забули - це BOD.

Взагалі, AFAIK всі ці затримки відраховуються тільки після того, як харчування МК вийшло на необхідний рівень і POR дозволив роботу. Так що перехідні процеси по харчуванню МК проходять ще до початку відліку цієї затримки. Вона потрібна, щоб почекати «остаточної» стабілізації живлення і дати час на ініціалізацію інших елементів схеми, а також на стабілізацію кварцового генератора.