Вы здесь

Использование AVR Software Framework для микроконтроллеров XMEGA

Краткий обзор AVR Software Framework

AVR Studio 4 SF

С появлением микроконтроллеров семейства XMEGA писать код на языке С стало гораздо приятнее. Написав единожды код для работы с каким либо периферийным модулем для одного микроконтроллера, при переходе на другой микроконтроллер (в пределах одного семейства) не придется заново его переписывать. Это стало возможным благодаря унификации модулей (как минимум, в пределах одного семейства). Теперь появился смысл тратить немного больше времени на написание качественных драйверов для модулей, так как вероятность их повторного использования резко возросла.

В итоге, программисты компании ATMEL разработали набор библиотек, облегчающих работу с микроконтроллерами XMEGA. Эти библиотеки были включены в состав AVR Software Framework 2.0.0, который ранее был предназначен только для 32-разрядных микроконтроллеров серии UC3. Какие же преимущества дает использование этой библиотеки кода? Во первых, Вам не придётся разбираться во всех регистрах того или иного модуля, чтобы начать с ним работать. Во вторых, код для Всех статей по применению можно будет запустить на любом микроконтроллере семейства, а не как было ранее (если статья предназначена для одной mega, для другой приходилось основательно править код). В третьих, если Вы счастливый обладатель демонстрационных плат от ATMEL, код из статей так же можно откомпилировать под любую из них (конечно, в разумных пределах).

В состав AVR Software Framework входит следующее:

  • драйверы периферийных модулей;
  • вспомогательные сервисы;
  • описание плат;
  • утилиты для сборки разными компиляторами;
  • примеры кода;
  • документация.

Драйверы периферийных модулей состоят из заголовочного файла и файла исходного кода. Они предназначены для абстрагирования функционала от конкретных регистров и предоставляют простейшие низкоуровневые функции для работы с модулем.

Вспомогательные сервисы, в отличии от драйверов модулей, предоставляют более высокоуровневые функции. Именно использование сервисов позволит Вам сэкономить массу времени на написании и отладке кода.

Описание плат, это наборы файлов, в которых определено, какая периферия к каким линиям микроконтроллера подключена. Естественно, речь идет о той периферии, о которой знает Framework. Это кнопки, светодиоды, кварцевые резонаторы, микросхемы памяти и, возможно, еще что то. Кроме того, описание платы может включать в себя процедуру ее инициализации. В комплекте поставляются описания для большинства демонстрационных плат, выпущенных компанией ATMEL. Если Вы не являетесь счастливым обладателем одной из этих железяк, можно определить описание пользовательской платы (пусть даже и пустое).

Утилиты для сборки разными компиляторами включают в себя заголовочные файлы, учитывающие особенности того или иного компилятора. Это вовсе не набор бинарных модулей, как изначально можно было бы подумать. На данный момент поддерживаются два компилятора: GCC и IAR.

Примеры кода при изучении данного пакета оказывают неоценимую помощь и позволяют написать первое приложение без глубокого изучения документации.

С тем, что из себя представляет AVR Software Framework, мы немного разобрались. Пора на практике познакомится с этим порождением инженерной мысли.

Приступаем к работе с AVR Software Framework

Для начала необходимо скачать AVR Software Framework. Я скачивал полную версию, но из архива распаковывал только каталог «asf-2.0.0\xmega». Кроме распаковки какой либо установки не требуется. Единственное, что крайне желательно сделать, это обновить заголовочные файлы для микроконтроллеров XMEGA в пакете WinAVR. Исправленные заголовочные файлы находятся в том же архиве, что и AVR Software Framework, в каталоге «asf-2.0.0\xmega\utils\header_files».

Так как пакет ASF включает в себя файлы исходного кода, нужно понимать, что Вам придётся включать эти файлы в свой проект. Именно включать, а не копировать. Копировать я не рекомендую, так как этим Вы нарушите дерево каталогов (а зависимости между драйверами весьма жёсткие). Да и обновление драйверов превратится в проблему. Поэтому условьтесь для себя, как относительно директории «asf-2.0.0» будут располагаться Ваши проекты. Вообще, ATMEL рекомендует располагать проекты в каталоге «asf-2.0.0\xmega\applications», но мне этот путь подходит только для проектов, созданных для компиляции примеров из ASF. Я условился располагать каталоги проектов в том же каталоге, что и «asf-2.0.0».

Далее следует определиться, какой makefile Вы будете использовать. Есть два варианта. Первый подразумевает использование созданного в ручную makefile-а. У этого подхода есть неоспоримое преимущество — Вы можете проставлять относительные пути к исходным файлам ASF. То есть при переносе исходного кода на другой компьютер если и придется поправить что либо, то это будет одна строчка, да и то только в том случае, если Ваш проект будет иначе расположен относительно директории «asf-2.0.0». Недостаток этого подхода очевиден, такие файлы придется создавать и редактировать вручную. Во втором случае можно использовать только настройки AVR Studio. Здесь руками править ничего не придется, но все пути включения заголовочных файлов студия упорно проставляет в абсолютном формате, хотя для файлов исходного кода устанавливаются относительные пути. Получается непереносимый (вернее, тяжело переносимый) с компьютера на компьютер проект. Я пока для себя решил пользоваться первым вариантом.

Чтобы продемонстрировать на практике методику подключения AVR Software Framework к своему проекту, я возьму готовый демонстрационный проект и по шагам опишу процесс создания проекта. Взять можно любой проект, мне приглянулся пример работы со встроенным датчиком температуры (находится в директории asf-2.0.0\xmega\drivers\adc\example1).

Итак, приступим. Запускаем AVR Studio, создаем новый проект. Тип проекта выбираем AVR GCC. Жмём далее.

AVR Studio. Шаг 1

На этой странице выбираем отладчик или эмулятор и целевой микроконтроллер. Я буду мучить ATxmega128A1.

AVR Studio. Шаг 2

Далее нам необходимо создать makefile. В примерах, поставляемых в составе AVR Software Framework, файл makefile только подключает два других файла. Первый из них имеет имя «config.mk» и является конфигурационным файлом нашего проекта. О его структуре чуть далее. А второй подключаемый файл входит в состав AVR Software Framework. Его править не потребуется. Именно такой структуры я и буду придерживаться.

Создаем в каталоге с нашим проектом директорию с именем «config». Директория нужна для того, чтобы файлы, генерируемые в процессе сборки проекта, копировались в выделенный каталог (в нашем случае «config»). Далее в созданной директории создаем файл с именем «makefile». Вот как должно выглядеть его содержимое:

include config.mk
include ../../asf-2.0.0/xmega/utils/make/Makefile.in

Там же создайте файл «config.mk». Ниже приведено примерное содержимое этого файла с краткими комментариями:

# Имя проекта
PROJECT = TestASF

# Архитектура процессора: {avr0|...|avr6}
# Для XMEGA указывается конкретно название процессора:
MCU = atxmega128a1

# Пути к компонентам ASF. Нужно править только первую строку.
PRJ_PATH = ../../asf-2.0.0/xmega
APPS_PATH = $(PRJ_PATH)/applications
BRDS_PATH = $(PRJ_PATH)/boards
COMP_PATH = $(PRJ_PATH)/components
DRVR_PATH = $(PRJ_PATH)/drivers
SERV_PATH = $(PRJ_PATH)/services
UTIL_PATH = $(PRJ_PATH)/utils

# Файлы исходного кода на языке C
CSRCS = \
  ../main.c \
  $(DRVR_PATH)/adc/adc.c \
  $(DRVR_PATH)/ioport/ioport.c \
  $(SERV_PATH)/basic/clock/xmega/sysclk.c \
  $(SERV_PATH)/basic/sleepmgr/xmega/sleepmgr.c


# Файлы исходного кода на языке Assembler
ASSRCS = \
  $(DRVR_PATH)/nvm/nvm_asm.s

# Пути к заголовочным файлам
INC_PATH = \
  ../ \
  $(BRDS_PATH)/ \
  $(UTIL_PATH)/ \
  $(UTIL_PATH)/preprocessor/ \
  $(SERV_PATH)/basic/clock/ \
  $(SERV_PATH)/basic/gpio/ \
  $(SERV_PATH)/basic/sleepmgr/ \
  $(DRVR_PATH)/ioport/ \
  $(DRVR_PATH)/cpu/ \
  $(DRVR_PATH)/nvm/ \
  $(DRVR_PATH)/sleep/ \
  $(DRVR_PATH)/pmic/ \
  $(DRVR_PATH)/adc/
  

#  Определяем используемую демонстрационную плату. В нашем случай это самодельная плата
DEFS = -D BOARD=USER_BOARD

Обратите внимание на то, что все пути указаны относительно конфигурационного файла, на не корневой директории проекта.

Далее надо указать студии, что проект надо собирать с помощью нашего maikfile-а. Для этого открываем конфигурацию проекта, ставим флаг «Use external makefile» и указываем наш файл.

AVR Studio. Шаг 3

Теперь попытаемся собрать наш проект. Что мы видим? Правильно, ошибки компилятора. Не найдены заголовочные файлы «user_board.h», «conf_adc.h», «conf_intlvl.h», «conf_sleepmgr.h» и «conf_clock.h». Первый файл — это описание нашей платы. Если вы не собираетесь использовать драйверы, завязанные на поддерживаемую платой периферию, просто создайте в Вашем проекте пустой файл. В противном случае изучите описание стандартных демонстрационных плат и сделайте подобное описание для своей платы.Я создал пустой файл «user_board.h».

Остальные файлы являются конфигурационными для соответствующих драйверов. Я позаимствовал их из указанного выше проекта. Файлы «conf_intlvl.h» и «conf_clock.h» фактически пустые. В файле «conf_adc.h» указано, что мы собираемся использовать функции обратного вызова. В файле «conf_sleepmgr.h» указано, что требуется активировать функции энергосбережения. О доступных конфигурационных параметрах для всех драйверов и сервисов можно узнать из документации на AVR Software Framework.

Снова пытаемся скомпилировать проект. Единственное, на что обругается компилятор, это на отсутствие функции «main». Создаем пустую функцию main и вуаля, компилятор выдал заветную строку «Build succeeded...». Размер оптимизированной прошивки составляет 1560 байт, что совсем не много, учитывая количество подключенных драйверов. Проект готов для дальнейших экспериментов.

Целью данной статьи является показать, как создать проект в AVR Studio, использующий AVR Software Framework. Поэтому код программы мы возьмём все из того же упомянутого выше проекта, получающего значение температуры со встроенного датчика (только я выкинул вызов функции «board_init», так как на моей плате инициализировать нечего, и эту функцию я не реализовывал). После перекомпиляции размер прошивки равен 2616 байт, а из ОЗУ задействовано 16 байт.

Из всего выше описанного можно сделать следующий вывод. Начальная настройка проекта при использовании ASF занимает больше времени, чем для обычных проектов. Однако это едино разовая затрата времени. Так же по другому обстоят дела с добавлением файлов исходного кода. Какой файл Вы не хотели бы добавить в свой проект, будь то файл драйвера или написанный Вами файл исходного кода, вам придется каждый раз лезть в файл «config.mk» и добавлять файл исходного кода вручную. Однако ради функционала и унификации, предоставляемой ASF, стоит потерпеть это неудобство. Не исключено, что в будущем поддержка ASF в AVR Studio будет улучшена. AVR Software Framework (ранее UC3 Software Framework) хорошо зарекомендовал себя при работе со старшими моделями микроконтроллеров. Скорее всего это произойдет и с XMEGA. Уже сейчас начали появляться статьи по применению, исходный код которых основан на ASF (например, AVR1300).

Tags: