Atmel Software Framework (ASF) як це працює
Трохи теорії
Atmel® Software Framework (ASF) — програмна бібліотека для мікроконтролерів, що містить широкий набір вбудованого коду для мікроконтролерів Atmel з усіх сімейств: megaAVR, AVR XMEGA, AVR UC3 та SAM. Основні переваги:
- спрощується використання та освоєння мікроконтролерів, оскільки бібліотека написана на високому та середньому рівнях абстракції;
- ASF розроблено для використання на будь-якій стадії проектування;
- ASF інтегрована в Atmel Studio (яка прийшла на зміну AVR Studio і підтримує всі сімейства мк Atmel) з графічним інтерфейсом користувача, але також може використовуватися з компіляторами IAR і GCC;
- ASF безкоштовна.

Atmel Studio – безкоштовне середовище розробки для мікроконтролерів Atmel, спадкоємиця AVR Studio. Візуальна оболонка від Microsoft Visual Studio. Як компілятор, як і раніше, використовується GCC.
Як бачимо з малюнка вище, ASF складається з кількох шарів абстракції:
- друкована плата (Board),
- драйвера (Drivers),
- компоненти (Components),
- послуги (Services),
- додаток (Applications).
В ASF використовуються три складові блоки:
- Модуль : програмний модуль, який не містить функціюint main (void) (наприклад модуль USART, стек USB). Модулі ASF – це шари: драйвери, компоненти та сервіси. Модуль ASF конфігурується статично та/або динамічно.
- Додаток/приклад : програмний код ASF, який може бути скомпільований, зашитий в мікроконтролер і виконаний. Програми ASF складаються з шарів: драйвери, компоненти, послуги, додаток. Для програм ASF доступна лише статична конфігурація.
- Друкована плата : абстрактний шар для кожного налагоджувального кита Atmel, що підтримується ASF. Зазвичай одному киту відповідає один мікроконтролер. Також передбачена спеціальна користувальницька друкована плата «user board», це порожній шар абстракції для створення програми на базі користувальницької плати.
Для кожного проекту дерево директорій (див. малюнок нижче) складається з:
- Папки для обраного сімейства мк Atmel (на малюнку «sam0»)
- Папки із загальним кодом (на малюнку «common» та «common2»)
- Папки із програмним забезпеченням сторонніх виробників (на малюнку "thirdparty").

Основні етапи роботи з ASF
Поетапне написання коду за допомогою ASF у Atmel Studio виглядає так:
- Завантажте ASF (за допомогою extension manager, робиться один раз).
- Вибрати проект-приклад або створити свій (на стартовій сторінці Atmel Studio).
- Додати необхідні модулі (ASF Wizard).
- Налаштувати модулі (файли xxxx_conf.h).
- Прописати логіку роботи (власне код програми).
Далі розберемо кожний з етапів докладніше. Щоб встановити потрібне розширення:
- Відкрийте Extention Manager (Tools → Extension Manager )
- Введіть ключові слова у полі пошуку
- Завантажте інсталяційний файл (для цього треба бути зареєстрованим користувачем на atmel.com)
- Встановіть програму
Оновлення вже встановлених програмздійснюється так само через Extention Manager.

Створення проекту
При старті Atmel Studio (або File-New-Project…/Example Project…) пропонується на вибір створити новий проект, створити проект-приклад або відкрити створений раніше проект. Проектів-прикладів багато, і розпочати вивчення Atmel Studio, ASF контролерів Atmel найзручніше саме з них. Щоб вибрати потрібний проект, введіть у відповідному полі сімейство мікроконтролерів, налагоджувальну плату або ключове слово. вибирається його тип. Кількість типів і вони залежать від встановлених модулів розширення. На малюнку нижче видно, що доступні в тому числі проекти Qtouch, які можна створювати тільки після встановлення Qtouch Library і Qtouch Composer.

ASF Wizard
Якщо ви відкрили готовий приклад або створили власний проект і вам необхідно додати новий периферійний модуль (наприклад, UART) або бібліотеку (наприклад, FATFS), то вам допоможе ASF Wizard (менюProject → ASF wizard або іконка ). У ньому можна знайти модулі за ключовим словом та за типом (драйвер, компонент, сервіс). Якщо це необхідно, то налаштувати, як вони працюватимуть: з переривання (callback в термінології Atmel) або з опитування (polled), ніж тактуватися або яку роль виконувати (master, host, mass storage тощо) залежно від типу периферії чи бібліотеки ).

- Вважати параметри за замовчуванням за допомогою відповідної функції.
- Змінити деякі параметри, якщо потрібно.
- Записати нові опції.
- Дозволити роботу периферії.
Далі ми розглянемо процедуру додавання нової периферії до проекту на прикладі.
Написання коду
Після додавання необхідних модулів, їх налаштування та включення, приступаємо до написання коду. Приклад Допустимо, ми хочемо навчитися блимати світлодіодами на налагоджувальній платі SAM D21 Xplained Pro Evaluation Kit. Розглянемо докладно, як це зробити в Atmel Studio. Запускаємо Atmel Studio і натискаємо кнопкуNew Example Project :



Тепер потрібно налаштувати таймер. Додаємо функцію:
Пояснення до функції:
- struct tc_config config_tc допоміжна структура, яка зберігає налаштування таймера
- tc_get_config_defaults (&config_tc) зчитуємо налаштування за замовчуванням (заповнюємо структуру).Щоб подивитися які власне налаштування встановлюються за замовчуванням, клацаємо правою кнопкою миші за функцією і в меню вибираємо «goto implementation». Щоб дізнатися, як називається функція, що записує налаштування за замовчуванням, набираєте назву периферії та слово "get" через нижнє підкреслення, а автозаповнення підкаже повне ім'я.
- Змінюємо необхідні нам налаштування. У разі це предделитель, режим роботи та вміст регістру порівняння.
- tc_init (&tc_instance_tc0, TC3, &config_tc) Записуємо змінені дані в структуру і зв'язуємо програмну структуру з апаратним таймером (TC3).
- tc_enable (&tc_instance_tc0) Дозволяємо роботу таймера.
Тепер налаштовуємо переривання і пишемо код, який виконуватиметься по перериванню. Для цього пишемо функції:
Перша функція встановлює обробник якого переривання викликається (tc_register_callback (&tc_instance_tc0, tc0_callback, TC_CALLBACK_CC_CHANNEL0);) і дозволяє цей виклик (tc_enable_callback (&tc_ccc) Друга функція і це те, що виконується в обробнику переривання (callback). Компілюємо, запускаємо, готово!
Atmel Studio спільно з Atmel Software Framework є відмінними засобами для первинного знайомства з периферією мікроконтролерів Atmel, що значно скорочують час освоєння нового сімейства мікроконтролерів за рахунок великої кількості прикладів та зручного середовища розробки.
ASF можна використовувати з IAR. У цьому випадку завантажується stand-alone версія ASF і підключається до проекту в IAR вручну, шляхи до потрібних файлів бібліотеки вказуються в менюOptions-C/C++ Compiler → Preprocessor.