- PVSM.RU - https://www.pvsm.ru -
Atmel® Software Framework (ASF) — программная библиотека для микроконтроллеров, которая содержит широкий набор встраиваемого кода для микроконтроллеров Atmel из всех семейств: megaAVR, AVR XMEGA, AVR UC3 и SAM.
Основные преимущества:
Как видим из рисунка выше, ASF состоит из нескольких слоев абстракции:
В ASF используются три составных блока:
Для каждого проекта дерево директорий (см. рисунок ниже) состоит из:
В каждой из этих папок организация подпапок соответствует уровням абстракции (приложения, сервисы, компоненты, драйверы, платы).
Поэтапно написание кода с помощью ASF в Atmel Studio выглядит так:
Далее разберём каждый из этапов подробнее.
Расширения для Atmel Studio (в том числе и библиотека ASF) загружаются с помощью Extension Manager (Tools-Extension Manager). Чтобы установить необходимое расширение:
Обновление уже установленных приложений осуществляется так же через Extention Manager.
При старте Atmel Studio (либо File-New-Project…/Example Project…) предлагается на выбор создать новый проект, создать проект-пример или открыть созданный ранее проект.
Проектов-примеров много, и начать изучение Atmel Studio, ASF и контроллеров Atmel удобнее всего именно с них. Для выбора нужного проекта введите в соответствующем поле семейство микроконтроллеров, отладочную плату, либо ключевое слово.
После выбора проекта укажите папку для размещения и название (если хотите, чтобы оно отличалось от названия по умолчанию).
При создании нового проекта выбирается его тип. Количество типов и сами они зависят от уже установленных модулей расширения. На рисунке ниже видно, что доступны в том числе проекты Qtouch, которые возможно создавать только после установки Qtouch Library и Qtouch Composer.
Если вы открыли готовый пример или создали собственный проект и вам необходимо добавить новый периферийный модуль (например, UART) или библиотеку (например, FATFS), то в этом вам поможет ASF Wizard (меню Project -> ASF wizard или иконка ). В нем можно найти модули по ключевому слову и по типу (драйвер, компонент, сервис). Если это необходимо, то настроить, как они будут работать: по прерыванию (callback в терминологии Atmel) или по опросу (polled), чем тактироваться или какую роль выполнять (master, host, mass storage и так далее в зависимости от типа периферии или библиотеки).
После добавления модуля в проект в дереве каталогов в папке config появляется соответствующий файл типа conf_xxxx.h. В этом файле содержатся общие настройки модуля библиотеки.
Настройка соответствующей периферии проводится в 4 этапа:
Далее мы рассмотрим процедуру добавления новой периферии в проект на примере.
После добавления необходимых модулей, их настройки и включения, приступаем к написанию кода.
Допустим, мы хотим научиться мигать светодиодами на отладочной плате SAM D21 Xplained Pro Evaluation Kit [2].
Рассмотрим подробно, как это сделать в Atmel Studio.
Запускаем Atmel Studio и нажимаем кнопку New Example Project:
Скачиваем и устанавливаем ASF последней версии, если этого не было сделано раньше (см. выше как это сделать).
Создаем новый пример-проект (см рисунок).
Выбираем семейство контроллеров samd, вводим в поиске ключевое слово led. Видим список доступных проектов.
Выбираем из них нужный.
Вводим новое название проекта и выбираем расположение.
Готово! Нажимаем «ОК». Теперь у нас есть проект-пример, который можно скомпилировать и залить в отладочную плату.
Теперь, предположим, мы хотим изменить код. Пусть у нас светодиоды зажигаются по таймеру. Для этого идем в ASF Wizard, вводим в поиске ключевое слово timer, выбираем режим callback, затем нажимаем Add и Apply.
Настраиваем таймер. Для этого объявляем глобально структуру, которая и будет хранить и параметры таймера:
struct tc_module tc_instance_tc0;
Теперь нужно настроить таймер. Добавляем функцию:
void configure_tc0(void)
{
struct tc_config config_tc;
tc_get_config_defaults(&config_tc);
config_tc.wave_generation = TC_WAVE_GENERATION_MATCH_FREQ;
config_tc.counter_16_bit.compare_capture_channel[0] = 1000;
config_tc.clock_prescaler=TC_CLOCK_PRESCALER_DIV1024;
// config_tc.oneshot=true;
tc_init(&tc_instance_tc0, TC3, &config_tc);
tc_enable(&tc_instance_tc0);
}
Пояснения к функции:
Теперь настраиваем прерывания и пишем код, который будет выполняться по прерыванию. Для этого пишем функции:
void configure_tc0_callbacks(void)
{
tc_register_callback(&tc_instance_tc0,tc0_callback,TC_CALLBACK_CC_CHANNEL0);
tc_enable_callback(&tc_instance_tc0, TC_CALLBACK_CC_CHANNEL0);
}
void tc0_callback(struct tc_module *const module_inst)
{
port_pin_toggle_output_level(LED_0_PIN);
}
Первая функция устанавливает обработчик какого прерывания вызывается (tc_register_callback(&tc_instance_tc0,tc0_callback,TC_CALLBACK_CC_CHANNEL0);) и разрешает этот вызов (tc_enable_callback(&tc_instance_tc0, TC_CALLBACK_CC_CHANNEL0);). Вторая функция и это то, что выполняется в обработчике прерывания (callback).
Компилируем, запускаем, готово!
Atmel Studio совместно с Atmel Software Framework являются отличными средствами для первичного знакомства с периферией микроконтроллеров Atmel, значительно сокращают время освоения нового семейства микроконтроллеров за счет большого количества примеров и удобной среды разработки.
ASF можно использовать и с IAR. В этом случае скачивается stand-alone версия ASF [3] и подключается к проекту в IAR вручную, пути к нужным файлам библиотеки указываются в меню Options-C/C++ Compiler -> Preprocessor.
Автор: marus-ka
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/mikrokontrollery/97495
Ссылки в тексте:
[1] atmel.com: http://www.atmel.com/
[2] SAM D21 Xplained Pro Evaluation Kit: http://www.atmel.com/ru/ru/tools/ATSAMD21-XPRO.aspx
[3] stand-alone версия ASF: http://www.atmel.com/ru/ru/tools/avrsoftwareframework.aspx?tab=overview
[4] Источник: http://geektimes.ru/post/260938/
Нажмите здесь для печати.