ATtiny13a: использование ассемблера GNU-AS в программах на Си

разделы: AVR, АССЕМБЛЕР, дата: 17 февраля 2018г.

То, что Arduino очень медленно обрабатывает внешние прерывания, я заметил еще осенью прошлого года, когда разбирался с RTC. Тогда я пытался тактировать счетчик часов Arduino от 32кHz вывода DS3231, но такие часы у меня отставали секунд на десять в минуту. Для 16 МГц микроконтроллера, это было абсолютное фиаско.

В следующий раз я столкнулся с проблемой на ATtiny13, когда делал счетчик импульсов. В этот раз Arduino досталась роль передатчика, а ATtiny13a работающей на частоте 9.6 МГц был в роли счетчика. Но несмотря на то, что прошивка была написана на чистом Си, а обработчик внешнего прерывания состоял всего из одной строчки: "value++;", максимальная рабочая частота счетчика достигала всего 200кГц.

Такой результат меня тоже не устроил, и я решил, что обработчик прерывания нужно писать на ассемблере. Забегая вперед, скажу, что это дало мне прирост по максимальной частоте в три раза т.е. до 600кГц.

Ок, ассемблер это хорошая штука в плане скорости, но полностью прошивку писать на нем довольно тоскливое занятие. В AVR нет даже целочисленного деления. Выходом может стать написание смешанного кода на ассемблере и Си, т.к. gnu ассемблер по сути является бэкендом gcc-компилятора.

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

    Содержание статьи:
  1. Blink на ассемблере GNU-AS, создание проекта.
  2. Использование в ассемблерной программе мнемоники из Си для портов и регистров.
  3. Добавление таблицы векторов.
  4. Смешивание Си и ассемблерного кода в одной программе.
  5. Передача и получение параметров из Си-программы в ассемблерную функцию.
  6. Переписываем с Си на ассемблер функцию wait_ms() на прерывании таймера.
  7. Линковка проекта.
  8. Счетчик на 4-x разрядном семисегментном индикаторе.
  9. Счетчик импульсов на ассемблерном прерывании.

Архив с полными исходниками, сборочными файлами и скомпилированными прошивками можно будет скачать по ссылке в конце статьи.

Читать дальше

MSP430FR2433 Launchpad: быcтрый старт

разделы: MSP430, дата: 6 февраля 2018г.

Под новый год компания Texas Instruments удачно напомнила о себе устроив распродажу своих новых Launchpad'ов по символической цене в 4.30$. В сочетании с бесплатной доставкой занявшей, в моем случае, всего девять дней со склада в США, получился вполне себе такой приятный подарок. Для сравнения, на "Мышаке" Launchpad MSP430FR2433 стоит сейчас 18$ со сроком доставки в три недели. Так что, как говорится, приобретайте у производителя.

Launchpad MSP430FR2433 занял меня на пару дней, но вот только сейчас дошли руки написать об этой новинке. Я хотел бы рассказать, что это вообще за плата такая, для чего ее можно использовать(как оказалось не только для программирования), и как ее программировать. Я буду говорить в основном об Linux, так как именно здесь кроется большинство проблем. О Windows буду говорить по необходимости, там все делается по аналогии, т.к. весь используемый софт является кроссплатформенным. Так же, я иногда буду сравнивать этот Launchpad с более ранним MSP-EXP430G2.

    Содержание статьи:
  1. Краткий обзор оценочного модуля MSP430FR2433 Lanchpad;
  2. Energia IDE & Linux, или как убить Launchpad за 5 секунд;
  3. Работа с Energia IDE и MSP430FR2433 из под виртуальной машины с Windows 7;
  4. Компиляция тестовой прошивки;
  5. Флешер MSPFlasher;
  6. Использование MSPDebug в качестве флешера;
  7. Отладка Launchpad MSP430FR2433 через MSPDebug;
  8. Code Composer Studio и инструмент EnergyTrace;
  9. CCS Cloud - среда программирования на облаке;

1) Краткий обзор оценочного модуля MSP430FR2433 Lanchpad

Launchpad MSP430FR2433 можно мысленно разделить на три отдельных модуля: модуль программатора eZ-FET, модуль подсчета энергопотребления EnergyTrace, модуль с микроконтроллером MSP430FR2433.

    Микроконтроллер, MSP430FR2433 относится к семейству свехдешевых чипов Value Line Sensing MSP430FR2xxx/MSP430FR4xxx, и имеет следующие характеристики:
  1. 16-битная RISC архитектура;
  2. Рабочая частота до 16 МГц включительно;
  3. Диапазон напряжений питания от 1.8 до 3.6 Вольт;
  4. 8-канальный 10-битный АЦП;
  5. Внутренний источник опорного напряжения на 1.5 Вольт;
  6. Максимальная частота преобразований АЦП - 200 kSPS;
  7. Два расширенных USCI модуля: eUSCI_A c поддержкой режимов UART, IrDA и SPI и один eUSCI_B с поддержкой режимов: SPI, I2C;
  8. Всего четыре таймера:
  9. Два 16-битных трех-канальных таймера Timer_A3;
  10. Два 16-битных двух-канальных таймеров Timer_A2;
  11. Так же имеется еще один 16-битный таймер для RTC;
  12. Аппаратное вычисление 16-битного циклического избыточного кода CRC;
  13. Оперативной памяти - 4 КБайта;
  14. Энергонезависимой FRAM памяти с побайтовым и побитным доступом - 15.5 кБайта
  15. Защита от записи энергонезависимой FRAM памяти;
  16. Коэффициент пропорциональности скорости доступа к FRAM относительно SRAM-памяти составляет 4:1;
  17. Сенсор температуры FRAM памяти;
  18. Чип MSP430FR2433 поддерживает аппаратное умножение реализованное в 32-битном умножителе MPY32;
  19. Дополнительные режимы сбережения LPM 3.5 и LPM 4.5;
  20. Корпус микросхемы - VQFN-24.

На мой взгляд, чип MSP430FR2433 является прямым конкурентом семейству STM8, по перечню периферии и характеристикам они примерно на одном уровне.

Посмотрим более внимательно на дизайн платы Launchpad'а:

Читать дальше