Пишем данные на SD карту с помощью AVR-DOS « схемопедия
Давно вынашивал в планах опробовать работу с SD карточкой, так как записывать большие данные на такой носитель гораздо эффективней и удобней, чем на внешнюю EEPROM. Для работы с внешними дисками в Bascom-AVR существует библиотека AVR-DOS, которая позволяет организовать работу с файлами на флэшке, с присущей Bascom’у простотой. Эту библиотеку то мне и хотелось попробовать запустить, и наконец руки дотянулись до паяльника.
Так как библиотека AVR-DOS любит когда у микроконтроллера много памяти, чтобы не приперло в ненужный момент, взял микроконтроллер с запасом – ATMega64. Благо у меня их куча, за что спасибо товарищу Syph4r с http://army.xclan.ru/ Для работы карточки памяти необходимо напряжение 3,3 вольта, максимально допустимый порог 3,6 вольт – иначе сгорит. Поэтому для подключения к микроконтроллеру использована буферная микросхема 74LCV244. Можно конечно и обойтись без буфера – запитать всю схему целиком пониженным напряжением.
схема подключения получилась следующая:
Из внешнего повесил на PortB.7 светодиод, иначе без индикации будет скучно. Плата получилась как образец минимализма – кроме разъема для подключения карточки памяти и разъема программатора на плате ничего не предусмотрено.
Плата разведена на одностороннем текстолите, с использованием трех перемычек. Если надумаете повторить плату не забудьте о них. На разъеме еще предусмотрены контакты, которые замыкаются когда карта вставлена в разъем, эти контакты тоже использованы – сигнал заводится на PortD.7 (на схеме это не показано)
Микроконтроллер планируется тактировать от внутреннего RC, поэтому кварца на плате тоже нет, я сразу поставил частоту 8 МГц. При программировании фьюз у ATMega64 нужно помнить что в них есть режим совместимости с ATMega103, его необходимо отключить.
тестовый код работы с картой памяти:
$regfile = “m64def.dat”
$crystal = 8000000
$baud = 1200
$hwstack = 128
$swstack = 128
$framesize = 128
Config Portb.7 = Output ‘подключаем светодиод
Led Alias Portb.7
‘подключение библиотеки AVR-DOS
$include “Config_AVR-DOS.BAS”
Dim B As Byte
B = Initfilesystem(1) ‘инициализация флэшки
If B <> 0 Then ‘если инициализация не прошла
Led = 1 ‘зажигаем светодиод
Stop ‘и останавливаем программу
End If
‘если инициализация флэшки прошла успешно продолжаем программу
‘объявление переменных
Dim P As Byte ‘переменная которую будем записывать на флэшку
Dim File As String
Dim Size As Long ‘здесь будет хранится размер флэшки
Dim Size_str As String * 50
Dim Free As Long ‘размер свободной памяти
Size = Disksize() ‘узнаем объем флэшки в байтах
Free = Diskfree() ‘узнаем сколько байт свободно
Size_str = “Свободно ” + Str(free) + ” из ” + Str(size) + ” байт” ‘готовим строку
File = “log.txt” ‘имя и расширение файла который будем создавать на флэшке
Open File For Output As #1 ‘открываем файл Log.txt и записываем в него данные
Print #1 , “AVRproject.ru” ‘напишем вот такой текст
Print #1 , “Запись данных на SD карту с помощью Bascom-AVR!!!”
Print #1 , Size_str ‘выведем информацию о размере флэшки
Print #1 , ‘пустая строка
Close #1
‘основной цикл програмы
Do
Led = 1 ‘на время записи зажгем светодиод
Open File For Append As #1 ‘открываем наш файл для записи
Print #1 , P ‘записываем переменную
Close #1 ‘закрываем файл
Incr P ‘изменим переменную
Waitms 100
Led = 0 ‘гасим светодиод
Wait 1
Loop ‘повторяем цикл
End
Результат работы программы ниже, на флэшке создается текстовый файл с именем LOG.TXT и в него записывается все то что мы отправляем командой Print
Исходник хорошо прокомментирован, поэтому все максимально доступно для понимания, а остальные команды поддерживающие AVR-DOS описаны в хэлпе к Bascom’у.
Печатная плата (Dip Trace)
Исходники с библиотекой AVR-DOS
Пишем данные на SD карту с помощью AVR-DOS — Готовые устройства — Каталог статей — Микроконтроллеры
Давно вынашивал в планах опробовать работу с SD карточкой, так как записывать большие данные на такой носитель гораздо эффективней и удобней, чем на внешнюю EEPROM. Для работы с внешними дисками в Bascom-AVR существует библиотека AVR-DOS, которая позволяет организовать работу с файлами на флэшке, с присущей Bascom’у простотой. Эту библиотеку то мне и хотелось попробовать запустить, и наконец руки дотянулись до паяльника.
Так как библиотека AVR-DOS любит когда у микроконтроллера много памяти, чтобы не приперло в ненужный момент, взял микроконтроллер с запасом — ATMega64. Благо у меня их куча, за что спасибо товарищу Syph4r с http://army.xclan.ru/
Для работы карточки памяти необходимо напряжение 3,3 вольта, максимально допустимый порог 3,6 вольт — иначе сгорит. Поэтому для подключения к микроконтроллеру использована буферная микросхема 74LVC244. Можно конечно и обойтись без буфера — запитать всю схему целиком пониженным напряжением. Но хотелось проверить работу этой микросхемы в деле, а во-вторых возможность подключать плату к пяти вольтовым устройствам еще пригодится.
Из внешнего повесил на PortB.7 светодиод, иначе без индикации будет скучно. Плата получилась как образец минимализма — кроме разъема для подключения карточки памяти и разъема программатора на плате ничего не предусмотрено.
Плата разведена на одностороннем текстолите, с использованием трех перемычек. Если надумаете повторить плату не забудьте о них. На разъеме еще предусмотрены контакты, которые замыкаются когда карта вставлена в разъем, эти контакты тоже использованы — сигнал заводится на PortD.7 (на схеме это не показано)
Микроконтроллер планируется тактировать от внутреннего RC, поэтому кварца на плате тоже нет, я сразу поставил частоту 8 МГц. При программировании фьюз у ATMega64 нужно помнить что в них есть режим совместимости с ATMega103, его необходимо отключить.
Результат работы программы ниже, на флэшке создается текстовый файл с именем LOG.TXT и в него записывается все то что мы отправляем командой Print
Исходник хорошо прокомментирован, поэтому все максимально доступно для понимания, а остальные команды поддерживающие AVR-DOS описаны в хэлпе к Bascom’у.
Компьютеры на базе AVR-микроконтроллеров — ARCAdaptor
Вместо предисловия
Многие профессионалы-разработчики электроники часто «воротят нос» от семейства микроконтроллеров производства Atmel — фи, мол, эта ваша Атмега — только лампочками поморгать. Однако, это спорное утверждение.
Дешевизна, легкость программирования (как физической «заливки» прошивки, так и создания самих программ) превращают микроконтроллеры семейства AVR в универсальный инструмент, доступный начинающему радиолюбителю, а богатейшая линейка устройств — от самых простых ATTiny до устройств Mega256 с огромным количеством периферии «на борту» позволят реализовать самый смелый и амбициозный проект.
В этот раз мы рассмотрим конкретные примеры реализации одноплатных (и не очень) конструкторов на базе микроконтроллеров семейства ATMega. Все они вполне реализуемы в домашних условиях, а некоторые можно приобрести на сайте авторов. Для начала — небольшое отступление про «одноплатники» вообще.
Название говорит само за себя — все компоненты компьютера, необходимые для его базового функционирования размещены на одной плате. Совсем юные читатели сразу подумают о новинках вроде Raspberry Pi, а те, кто уже имеют понятие о мироустройстве — вспомнят РК-86, ZX-Spectrum и БК-0010, например.
Именно так — те самые «компьютеры в клавиатуре» были одноплатными. Да, допускались различные расширения, но кто о них помнит сейчас, тем более приобрести их в магазине было довольно проблематично. Да и нужды не было по большому счету.
И вот 21 век сдвинул «окно ностальгии» в нужную позицию и радиолюбители по всему миру не сговариваясь выпустили несколько проектов, которые по характеристиками ну очень напоминают те самые «эр-кашки» и «спектрумы» конца восьмидесятых годов прошлого века. А некоторые — в точности повторяют, но обо всём по порядку.
AVR Chip Basic
Первый персонаж нашего обзора — компьютер AVR Chip Basic, точнее это целое семейство компьютеров, различающееся по степени «навороченности» и наличию той или иной периферии.
Из под пера автора ( Jörg Wolfram ) вышла целая плеяда устройств:
- AVR-ChipBasic8 на базе ATMega8 или ATMega88 (та же микросхема используется в ARCAdaptor)
- AVR-ChipBasic на базе ATMega16
- AVR-ChipBasic32 на базе ATMega32
- AVR-ChipBasic2 на базе ATMega644
Все они имеют (как минимум) ТВ-выход и общаются с пользователем с помощью языка BASIC. В качестве устройства ввода используется стандартная PS/2 клавиатура.
Как уже говорилось, каждое из устройств обладает разными характеристиками, так например, AVR-ChipBasic8 имеет чёрно-белый видеовыход, может хранить программы на языке BASIC на подключаемой микросхеме EEPROM, ибо память самой микросхемы оставляет лишь 512 байт для хранения исходного текста.
Тем не менее — имеется и звуковой выход, и даже «свободные ножки», на которые можно повесить дополнительное оборудование.
Диалект бейсика очень сильно урезан, но позволяет вдоволь наиграться с этим языком программирования.
Из «фишек» интересное — прошивку можно собрать самостоятельно как под PAL развертку, так и под NTSC.
Остальные аппараты уже в состоянии выводить цветной видеосигнал через разъем SCART, и даже подключаться к совместимой TFT-матрице. Также к услугам пользователя возможность работы с периферией, последовательный интерфейс RS-232 с возможностью общения с «большим братом» и даже «картриджи памяти»! — съемные блоки памяти с записанными на них программами.
Более того, версии на ATMega16,32 и 644 используют одну и ту же плату, то есть достаточно поставить микросхему в панельку и загрузить нужную прошивку.
Остальные подробности можно почерпнуть на странице автора. К сожалению страничка на немецком языке, но онлайновые переводчики значительно облегчат жизнь.
Кстати, среди его проектов есть и эмулятор компьютера ZX-81 на микроконтроллерах AVR.
FIGnition
Движемся дальше — следующий экспонат — одноплатный компьютер Fignition.
Автор Julian Skidmore создал «одноплатник», работающий под управлением ФОРТ-машины. Устройство способно управляться с экраном размером 25×24 символов, 16 пользовательскими символами, ну или графикой размером 160×160 точек.
Стоит отметить, что устройство может работать как с PAL-телевизорами, так и с NTSC — зависит от загруженной прошивки микроконтроллера ATMega168.
Особый интерес вызывает способ ввода данных. Обычно с AVR-устройствами часто интегрируют поддержку PS/2 клавиатуры, коих в избытке (пока что). Автор подготовился к вселенской катастрофе и организовал ввод с помощью восьми кнопок… Перебор значений на них организован по образу и подобию набора SMS в кнопочных мобильных телефонах.
Безусловно, такое устройство будет интересно в первую очередь поклонникам языка FORTH.
Сам автор предлагает приобрести комплект для сборки, хотя схема открыта, и в принципе желающие могут собрать подобное устройство самостоятельно.
Сайт проекта
Если до этого шла речь о самобытных устройствах, то следующая часть статьи будет почти полностью посвящена эмуляторам и репликам существующих (за некоторым очень интересным исключением).
PMD-85
Первый в списке — компьютер PMD-85. Это довольно интересное устройство, которое выпускалось с 1985 по 1989 в социалистической Чехословакии. По характеристикам он очень похож на семейство «РК-86», выпускавшийся в СССР в середине и конце восьмидесятых годов прошлого века — процессор i8080 и небольшой объем памяти.
Подробнее можно почитать в Википедии , ну а пока что рассмотрим аппаратную реализацию на ATMega.
Даже по этой иллюстрации видно — на плате всего лишь 2 микросхемы — непосредственно контроллер ATMega128 и микросхема памяти.
Ввод осуществляется с клавиатуры PS/2, вывод — через черно-белый ТВ. Для того, чтобы запустить ту или иную игру — необходимо скомпилировать соответствующую прошивку, которая содержит тот или иной набор программ. Вот несколько скриншотов от «родных» игр.
А вот видео работы, правда записано с настоящего PMD:
Подробности можно почерпнуть по этой ссылке , сайт же поклонников PMD-85 из бывшего соцлагеря тут.
Проект был бы весьма интересен отечественным фанатам РК-86, тем более что уже есть реализация на микроконтроллере PIC в проекте Maximite.
AVR-CP/M
Дальше — больше. Если возможна эмуляция i8080, то почему бы не попытаться запустить на АТМеге операционную систему CP/M ?
Это стоит сделать хотя бы ради великого и ужасного ZORK! И ведь запускают.
В качестве устройства отображения используется serial port.
Для него в плату установлен конвертер Serial->USB, но вполне можно обойтись и без него, точнее — обойтись внешним конвертером.
Сама схема представляет собой контроллер ATMega328 и несколько чипов памяти (из старых видеокарт или материнских плат).
Диск эмулируется через набор образов, размещенных на SD-карте. Схемы, прошивки и прочее можно найти здесь. Сайт на немецком языке, но онлайновые переводчики сделают свое дело.
UzeBox
Постепенно переходим к жемчужинам этого собрания. Первая в списке — самодельная, полностью открытая приставка UzeBOX.
Мало того, что приставка полностью «повторяема» в домашних условиях — её программное обеспечение имеет вполне достойный уровень, и более того — игры для неё разрабатываются энтузиастами прямо-таки в промышленных количествах.
Что «под капотом»:
- Низкая стоимость. Всего 2 чипа (микроконтроллер и кодер NTSC), более того — второй не обязателен, если есть телевизор с полноценным разъемом SCART.
- Ядро управляется прерываниями. Нет «тормозов», никто не отсчитывает такты процессора, генерация аудио и видео происходит в фоне.
- 256 цветов 4 звуковых канала — 3 wavetable +1 шумовой
- MIDI-интерфейс
- Стандартные джойстики от SNES (на 15 долларов на Aliexpress можно приобрести несколько штук).
- Есть возможность использовать NES (Dendy), но потребуется перекомпиляция игр, хотя это вообще не проблема
- Поддержка манипулятора «мышь» от SNES
- Поддержка SD-карточек UART и SPI интерфейсы доступны, также есть некоторое количество свободных «ножек» ATMega
- Есть эмулятор для разработки игр Загрузчик игр/программ с SD Развитое API для разработки Полностью открытая схемотехника и код
Приставка оказалась настолько удачной, что комплектами для сборки подторговывал магазин Adafruit Industries — признанный лидер в DIY движении.
Сама приставка базируется на микросхеме ATMega644 в DIP-исполнении (об этом чуть подробнее ниже). Этого контроллера вполне хватает для вышеописанных задач, а на выходе можно наблюдать игры примерно такого качества:
Без сомнения — классика не стареет.
Неплохо для микроконтроллера, правда ?
Автор разработки — канадец Alec (Uze) Bourque. Проекту не один год, но сообщество, сложившееся вокруг консоли всё еще полно идей и энтузиазма для дальнейшего движения вперед.
По этой ссылке можно ознакомиться с минимальной версией UzeBox — полностью модульной системой, которая состоит из базовой платы с микроконтроллером и SCART-выходом, а также дополнений — платы энкодера NTSC, платы адаптера SD-карты и платы MIDI-переходника.
Последний, кстати, никогда не был воплощен «в металле» за отсутствием MIDI-оборудования 🙂 Выглядит «домашняя версия» в сборе примерно так:
Так что с уверенностью заявляем — «дизайн» проверен и работает.
Конечно же, нужно упомянуть о недостатках.
- Для обеспечения нужной скорости ATMega работает в режиме «overclock» — аж на 28.6 Mhz
- Для сборки подходят только DIP-версии микросхемы
- При использовании SMD-версий перестает работать UART, перебои с SD-картой и вообще большой риск «не завестись». Причина тому — указанный выше «разгон»
- Чип AD725 (энкодер NTSC) в наших краях редкость и довольно дорого обходится (хотя он по большому счету и не нужен в начальной конфигурации)
- SNES-джойстики не так распространены и уж тем более «ответные» разъемы для них
- Нормально работают далеко не все SD-карты (точнее, большинство не работает, хотя подобрать в конце концов можно)
Достоинства консоли, кстати, с лихвой перевешивают описанные недостатки, так что её действительно можно рекомендовать к сборке даже новичкам.
Официальный сайт консоли со всей информацией, исчерпывающей документацией и весьма позитивным форумом здесь.
AVR ZX Spectrum 2.0
Ну и в финале — действительно потрясающий проект нашего соотечественника — Василия Лисицына — полностью функциональный «клон» компьютера ZX-Spectrum!
Спецификации впечатляют:
- Разрешение экрана: 256 х 192 точки
- Матрица знакомест экрана: 32 х 24
- Количество цветов на знакоместо: 2
- Число цветов экранной области: 8
- Число цветов бордюра: 8
- Число градаций яркости для каждого цвета: 2
- Эквивалентная частота ЦП: 2,333 МГц
- Порты ввода/вывода: 0xFE, 0x7FFD, 0x7FFD, 0xBFFD
- Клавиатурный интерфейс: PS/2
- Число задействованных клавиш: 82
- Число каналов звукового сопровождения: 4
- Перечень каналов звукового сопровождения: левый AY8910, правый AY8910, средний AY8910, бипер
- Видеовыходы: ЧБ выход, RGB выход, отдельный выход синхронизации
- Поддержка загрузки/выгрузки «на ленту»: имеется
- Дополнительные устройства ввода/вывода: micro-SD карта
- Поддерживаемые модели ZX Spectrum: Pentagon 128 K, ZX Spectrum 128 K, ZX Spectrum 48 K, ZX Spectrum +2, ZX Spectrum +3, ZX Spectrum 48 K ` 2006, OPEN SE BASIC 128 K, OPEN SE BASIC 48 K
- Дополнительная операционная система: SD DOS
- Файловая система: FAT32
- Разъём шины ввода/вывода: имеется
- Конструкция: двухсторонняя печатная плата 140 х 22 мм, установка внутри клавиатуры или в отдельный корпус
- Питание устройства: соединитель mini-USB «F», напряжение +5 В
На фото — плата AVR ZX-Spectrum 2.0 с установленным эмулятором AY8910(12), кстати тоже на ATMega.
Плата в базовой конфигурации имеет на борту 3 микроконтроллера и микросхему динамической памяти аж на 512 кб:
- Центральный процессор (ATMega128)
- Видеопроцессор (опять ATMega128)
- Контроллер клавиатуры (ATTiny2313)
Это позволяет «в теории» реализовать компьютер с таким объемом памяти. Помимо этого на плате есть некоторое количество микросхем мелкой логики.
Уже сейчас помимо «спектрума» плата может функционировать, как Robotron 1715. То есть на этой базе можно реализовывать и другие компьютеры!
Что может быть лучше ретро-платы все в одном! Впрочем, о тайнах и возможностях может поведать сам автор:
К сожалению, на данный момент у автора нет веб-сайта, но есть надежда, что он появится. А пока что со схемой и описанием можно ознакомиться, например, вот здесь.
Заключение
Микроконтроллеры — отличная возможность прикоснуться с миру разработки микроэлектроники. Для «олдскульщиков» — возможность «нырнуть» в то время, когда они были молодыми, а компьютеры простыми. Для поколения Arduino — шаг вперед в образовании. И пусть фанаты навороченных FPGA и ARMов утверждают о том, что время ATMega прошло — мы-то знаем на что она способна.
Удачных самоделок!
AVR911: Open Source программатор для микроконтроллеров AVR | avr
Здесь приведен перевод апноута Atmel «AVR911: AVR Open Source Programmer 8-bit Atmel Microcontrollers» [1], описывающего программу для компьютера с открытым исходным кодом. Утилита из коробки может служить программой для управления стандартными программаторами, поддерживающими протокол STK200, и может быть расширена для поддержки других протоколов и программаторов. Утилита Atmel AVR Open Source Programmer обладает следующими особенностями:
• Открытый исходный код на C++ (Open source)
• Модульный дизайн
• Может читать информацию устройств из файлов XML Atmel® AVR Studio®
• Поддерживает бутлоадер в Atmel AVR® 109
• Поддерживает ISP-программатор Atmel AVR910
• Является эквивалентом утилит командной строки AVR Studio
• Может расширяться для поддержки других программаторов
• Может расширяться до других каналов обмена с компьютером, например до USB
[Введение]
Atmel AVR Open Source Programmer (AVROSP) является программой — оболочкой для программатора устройств AVR (микроконтроллеров компании Atmel), которая является эквивалентом утилиты AVRProg, поставляемой совместно с AVR Studio. Это утилита командной строки, использующая тот же самый синтаксис, как и другие утилиты командной строки в AVR Studio.
Открытый исходный код и модульный дизайн AVROSP делают возможным простое портирование этого приложения на другие платформы (не Windows) и добавление поддержки программаторов других типов, а также других каналов обмена с компьютером (не COM-порт). В настоящее время AVROSP поддерживает программаторы, описанные в апноутах Atmel AVR109 и AVR910 [3, 4], подключающиеся через стандартный PC serial port (RS-232, COM-порт). В этой статье говорится от том, как расширять возможности утилиты AVROSP.
AVROSP может читать и записывать файлы в формате Intel® HEX [2], и может использовать существующую инсталляцию AVR Studio для получения требуемых параметров программируемых микроконтроллеров. Это означает, что AVROSP автоматически поддерживает все устройства, поддерживаемые AVR Studio. Таким образом, не требуется обновление AVROSP для поддержки новых устройств, если будет обновлена инсталляция AVR Studio.
[1. Общее теоретическое описание]
С точки зрения пользователя, программирование устройств Atmel AVR обычно состоит из следующих шагов: написание программы для микроконтроллера, подготовка двоичных файлов, которые должны быть запрограммированы в микроконтроллер, и наконец запуск утилиты программатора, чтобы записать эти файлы в память микросхемы микроконтроллера. Все эти шаги всегда те же самые, они не зависят от типа программатора. Приложение AVROSP пытается обобщить эту процедуру в одно применение, таким образом избавляя от необходимости использовать различные приложения с разным синтаксисом и использованием для каждого типа программатора. Независимо от того, используете ли Вы бутлоадер, или программатор ISP, или программатор другого производителя, процедура обычно та же самая. AVROSP дает непротиворечивый интерфейс для операции программирования.
Апноуты Atmel AVR109 [3] и AVR910 [4] описывают Bootloader (бутлоадер) и In-System Programmer (ISP, программатор чипов прямо в системе). И тот и другой поддерживают одну и ту же операцию — Bootloader прошивает память программ, получая данные из собственного встроенного UART, и ISP через программатор, построенный на микроконтроллере AT90S1200. Bootloader отдельно компилируется специально для каждого микроконтроллера, и поддерживает программирование только его. ISP не обновлялся для прямой поддержки устройств, появившихся позже Atmel ATmega163, но имеет «универсальную команду» (Universal Command), которая может использоваться для программирования всех устройств (микроконтроллеров), которые поддерживают внутрисхемное программирование (in-system programming, ISP). Утилита AVROSP поддерживает оба типа программаторов. Она читает сигнатуру программатора и принимает решение, какие команды нужно использовать для обмена данными с программатором. Таким образом, пользователю не нужно указывать тип программатора, если программатор корректно отвечает на команду чтения идентификатора программатора (правильно отвечает на команду «Read programmer ID»). Для получения дополнительной информации по протоколу обратитесь к [3, 4].
Для программирования микроконтроллера требуется минимальный набор информации — объемы памяти FLASH и EEPROM, биты защиты (lock bits) и фьюзы (fuse bits) и т. п. Эта информация доступна в XML-файлах описания (XML Part Description Files), находящихся в инсталляции Atmel AVR Studio.
AVROSP читает необходимую информацию из этих файлов XML. Если AVR Studio не установлена, например если AVROSP используется для программирования в производстве, или портирована на другие платформы (к примеру Linux®), то эти XML Part Description Files все еще могут быть использованы. Программа AVROSP сначала пытается их найти в текущей директории, затем в домашней директории AVROSP, директориях, указанных в переменной окружения PATH, и затем в инсталляции AVR Studio. Таким образом, файлы описания XML Part Description Files могут быть скопированы в директорию, находящуюся в путях PATH, и тогда нет необходимости в инсталляции AVR Studio.
Прим. переводчика: для AVR Studio 4.19 и Atmel Studio 6.0 эти файлы находятся в каталогах c:\Program Files\Atmel\Atmel Studio 6.0\devices, c:\Program Files\Atmel\Atmel Studio 6.0\tools\AVRDragon\xml, c:\Program Files\Atmel\Atmel Studio 6.0\tools\AVRISPmkII\xml, c:\Program Files\Atmel\Atmel Studio 6.0\tools\AVRONE\xml, c:\Program Files\Atmel\Atmel Studio 6.0\tools\JTAGICE3\xml, c:\Program Files\Atmel\Atmel Studio 6.0\tools\JTAGICEmkII\xml, c:\Program Files\Atmel\Atmel Studio 6.0\tools\STK500\xml, c:\Program Files\Atmel\Atmel Studio 6.0\tools\STK600\xml, c:\Program Files\Atmel\AVR Tools\Partdescriptionfiles, c:\Program Files\Atmel\Flip 3.4.2\bin\PartDescriptionFiles, c:\Program Files\Atmel\Flip 3.4.7\bin\PartDescriptionFiles.
Оригинальные файлы описаний Part Description Files очень большие, и для их парсинга требуется некоторое время. Поэтому AVROSP создает маленький файл XML, содержащий только интересующие параметры, и сохраняет его в домашней директории AVROSP. Если оригинальные файлы были обновлены, например при обновлении AVR Studio, то кэширующие файлы XML должны быть удалены из домашней директории, что укажет AVROSP пересоздать их заново.
В настоящее время файлы Part Description Files не содержат какую-либо информацию по алгоритму программирования каждого устройства. Так что модуль ISP утилиты AVROSP реализует алгоритм, использующийся в большинстве устройств AVR. Из-за этого не поддерживается ISP программирование некоторых устройств, у которых алгоритм программирования незначительно отличается. Это относится к следующим устройствам Atmel: ATtiny26 и ATtiny2313. Модуль бутлоадепа AVROSP поддерживает все устройства, которые имеют возможность использования бутлоадера.
Примечание: Atmel ATtiny28L не поддерживает программирование ни через ISP, ни через bootloader, и поэтому не поддерживается утилитой AVROSP. Однако пользователь может самостоятельно доработать код AVROSP чтобы добавить поддержку других программаторов, например последовательного высоковольтного программирования (serial high-voltage programmer, HVSP).
[2. Быстрый старт]
Эта секция описывает нужны шаги для быстрого запуска, если Вам не нужно модифицировать или подстраивать код приложения. Для использования утилиты AVROSP требуется только исполняемый файл avrosp.exe. Он находится в архиве avr911.zip [5], который поставляется с этим апноутом. ZIP-файл также содержит весь исходный код и копию файлов описания Part Description Files из инсталляции AVR Studio.
Скопируйте исполняемый файл в новый каталог, и добавьте имя (полный путь) этого каталога в переменную окружения PATH. Если Вы не хотите специально устанавливать Atmel AVR Studio, скопируйте файлы описания XML в поддиректорию (чтобы предотвратить перезапись оригинальных файлов файлами кэширования AVROSP), и также добавьте путь этого подкаталога в PATH. Теперь все готово для использования AVROSP.
Примечание: установки последовательного порта (скорость baud rate, контроль четности parity control и т. д.) должны быть установлены вручную до использования AVROSP. Например, для использования AVROSP совместно с бутлоадером, обменивающимся через COM1 на скорости 115200 bps, no parity control, 8 data bits, запустите для настройки COM-порта следующую команду DOS:
mode com1 baud=115200 parity=n data=8
[3. Синтаксис и параметры командной строки AVROSP]
Все параметры командной строки должны начинаться со знака минус, одного или нескольких символов и опциональных значений. Между минусом, символами или опциональными значениями не должно быть пробелов. Порядок следования параметров не имеет значения. В случае указания конфликтующих друг с другом параметров, например, при выборе для обмена и COM1, и COM2, будет всегда применен последний указанный параметр. Поддерживаемые параметры командной строки перечислены в таблице 3-1.
Таблица 3-1. Параметры командной строки AVROSP.
Параметр | Описание |
-d< name > | Задается имя программируемого устройства (микроконтроллера). Опция должна быть указана при программировании устройства. |
-if< infile > | Входное имя для программирования памяти программ (FLASH). Требуется для программирования и проверки FLASH. Формат файла Intel Extended Hex. |
-ie< infile > | Входное имя для программирования энергонезависимой памяти данных (EEPROM). Требуется для программирования и проверки EEPROM. Формат файла Intel Extended Hex. |
-of< outfile > | Выходное имя для файла памяти FLASH. Требуется для чтения и сохранения в файл содержимого памяти FLASH. Формат файла Intel Extended Hex. |
-oe< outfile > | Выходное имя для файла памяти EEPROM. Требуется для чтения и сохранения в файл содержимого памяти EEPROM. Формат файла Intel Extended Hex. |
-s | Прочитать байты сигнатуры. |
-O< addr > | Прочитать байт калибровки генератора (oscillator calibration byte) устройства. Параметр addr необязателен. |
-O#< addr > | Заданное пользователем значение калибровки генератора. Используйте его для предоставление своего значения калибровки вместо чтения его из устройства командой -O< addr >. |
-Sf< addr > | Запись байта калибровки генератора в память FLASH. Параметр addr необязателен. |
-Se< addr > | Запись байта калибровки генератора в память EEPROM. Параметр addr необязателен. |
-e | Очистка устройства (erase). Память устройства будет очищена перед тем как произойдет любое программирование. |
-p< t > | Программирование устройства (program). Установите параметр t в значение f для FLASH, и в значение e для EEPROM, или укажите b для программирования и FLASH, и EEPROM. Для этой операции потребуются соответствующие входные файлы. |
-r< t > | Прочитать устройство (read). Установите параметр t в значение f для FLASH, и в значение e для EEPROM, или укажите b для чтения и FLASH, и EEPROM. Для этой операции потребуются соответствующие выходные файлы. |
-v< t > | Проверить устройство (verify). Установите параметр t в значение f для FLASH, и в значение e для EEPROM, или укажите b для проверки и FLASH, и EEPROM. Для этой операции потребуются соответствующие входные файлы. |
-l< value > | Установка байта защиты (lock byte). Значение value должно быть указано как 8-битное шестнадцатеричное. |
-L< value > | Проверка байта защиты (lock byte). Значение для проверки value должно быть указано как 8-битное шестнадцатеричное. |
-y | Прочитать байт защиты из устройства. |
-f< value > | Установить байты фьюзов (fuse bytes). Значение value должно быть указано как 16-битное шестнадцатеричное, чтобы задать этим значение старшего и младшего байтов фьюзов. |
-E< value > | Установка расширенного байта фьюзов (extended fuse byte). Значение value должно быть 8-битным шестнадцатеричным. |
-F< value > | Проверить байты фьюзов (fuse bytes). Значение value должно быть указано как 16-битное шестнадцатеричное. |
-G< value > | Проверка расширенного байта фьюзов (extended fuse byte). Значение value должно быть 8-битным шестнадцатеричным. |
-q | Прочитать байты фьюзов из устройства. |
-x< value > | Заполнить неуказанные места значением (00-FF). По умолчанию не указанные во входных HEX-файлах места памяти не программируются. |
-af< start >,< stop > | Указывается диапазон адресов FLASH для операций. По умолчанию используется весь диапазон адресов FLASH. Адреса байтовые, и должны быть указаны в шестнадцатеричном формате. |
-ae< start >,< stop > | Указывается диапазон адресов EEPROM для операций. По умолчанию используется весь диапазон адресов EEPROM. Адреса байтовые, и должны быть указаны в шестнадцатеричном формате. |
-c< port > | Выбор порта для обмена данными с компьютером, от COM1 до COM8. Если этот параметр опущен, то программа будет сканировать порты для поиска программатора. |
-b< t > | Получить ревизии подключенного программатора. Установите t в значение h для получения версии аппаратуры или в значение s для получения версии firmware. |
-g | «Тихая работа». В консоль не будет произведено никакого вывода. |
-z | Отключить индикатор прогресса. Это полезно, к примеру, если сделано перенаправление вывода консоли в файл с целью лога — в файл не будут выведены символы прогресс-индикации. |
-Y< addr > | Используется для калибровки внутреннего RC генератора устройств ATtiny4/5/9/10/20/40. См. апноут AVR057. |
-h | Вывести подсказку (справку) по командной строке. Отменяет все другие опции. |
-? | То же самое, что и -h. |
Вот несколько примеров использования утилиты AVROSP.
avrosp –dATmega128 –pf –vf –ifprogram.hex –e
Вышеуказанный пример сначала очистит все содержимое памяти, затем запрограммирует и проверит данные, содержащиеся в файле program.hex, в подключенное устройство Atmel ATmega128.
avrosp –dATmega32 –re –oedump.hex –ae0,ff –cCOM2
Этот пример прочитает первые 256 байт памяти EEPROM устройства ATmega32 в файл dump.hex. Будет использован только COM2.
avrosp –dATmega64 –O#a0 –Se0 –lc0
Этот пример запишет пользовательское значение калибровки генератора (oscillator calibration value) 0xA0 в EEPROM по адресу 0, и затем защитит память ATmega64 путем записи байта бит защиты в значение 0xC0.
Примечание: когда программируются фьюзы (fuse bits), записываемая битовая маска не проверяется на предмет корректных значений фьюзов для этого устройства. Будьте особенно внимательны, чтобы не запрограммировать неверные значения фьюзов, так как это может привести к полной неработоспособности запрограммированного устройства. Программирование высоким напряжением (High-voltage programming, HVSP) может помочь восстановить микроконтроллер.
[4. Описание программной реализации AVROSP]
Подразумевается, что читающий эту секцию имеет некоторые знания по концепции объектно-ориентированного программирования, в частности по программированию на языке C++.
Исходный код AVROSP [5] является полностью свободным. Это означает, что пользователи могут модифицировать, расширять приложение и распространять его как пожелают. Дополнительную информацию по свободной лицензии можно посмотреть на сайте gnu.org.
Рис. 4-1. Классы AVROSP.
Почти вся работа приложения AVROSP на верхнем уровне инкапсулирована в классе JobInfo. Этот класс использует объекты классов XMLFile, HEXFile и AVRDevice для чтения и записи файлов XML и HEX, и распаковки информации из файлов описания программируемых устройств XML Part Description Files. Два класса-помощника Utility и ErrorMsg используются для вывода информации из приложения. Часть JobInfo, которая реализует рабочий интерфейс, не нуждается в знании используемого канала обмена с компьютером. Она декодирует командную строку, и создает экземпляры требуемых производных классов, к примеру класса SerialPort. Остальная часть кода просто работает через обобщенный класс родителя CommChannel. В настоящее время для коммуникации реализован только класс PC COM port, но могут быть также добавлены классы для работы через USB или TCP/IP (или через другие каналы обмена), для чего Вы можете сделать производный класс из базового класса CommChannel, и добавить проверку этого типа канала в парсер командной строки.
Такой же метод используется и для типа программатора. Код, который работает с программатором, не должен знать о том, какой тип программатора подключен. класс JobInfo получает от программатора строку идентификатора (programmer ID), и создает подходящий объект для нужного специфического типа программатора. Остальной код работает через обобщенный интерфейс AVRProgrammer. В настоящий момент реализованы только классы для бутлоадера [3] и для ISP-программатора [4]. Однако, Вы можете создать свой собственный производный класс для любого Вашего программатора на базе класса AVRProgrammer, и добавить проверку и декодирование его строки ID в JobInfo.
Такой дизайн AVROSP делает приложение очень гибким. Будущие расширения AVROSP в плане добавления каналом коммуникации и типов программаторов становятся простой задачей.
4.2 Описания классов
Здесь описаны только публичные методы интерфейса (public interface methods), которые доступны для использования в других классах и модулях. Читатель должен обратиться к комментариям в коде для получения подробной информации по внутренней работе различных классов. Каждый класс описан с кратким введением в назначение класса, и каждый из публичных методов описан с типом возврата, параметрами и назначением.
AVRDevice
Этот класс предоставляет контейнер для соответствующих параметров программируемого устройства (микроконтроллера), таких как объемы памяти (FLASH, EEPROM) и байты сигнатур. Класс также содержит функционал для получения информации устройства из инсталляции Atmel AVR Studio.
AVRDevice
Это конструктор для класса. Он получает строковый параметр — имя устройства, для которого запрашивается информация. Параметры не запрашиваются автоматически. Класс предоставляет метод для чтения информации для AVR Studio, но производные классы могут реализовать другой способ получения такой информации.
~AVRDevice
Это деструктор класса. В настоящее время в нем нет никакого функционала, это просто вместилище для дальнейших расширений.
readParametersFromAVRStudio
Этот метод делает поиск по текущей директории, по домашней директории приложения, директориям в переменной окружения PATH и, если это доступно, в инсталляции AVR Studio для требуемого файла XML. Чтобы получить путь до инсталляции AVR Studio, запрашивается база данных реестра Windows® на предмет ключа «HKEY_LOCAL_MACHINE\Software\Atmel\AVRTools\AVRToolsPath». Метод делает парсинг файла XML и получает оттуда нужную информацию. Будет выброшено исключение (exception thrown), если файл не найден или в файле есть ошибки. Метод берет список путей поиска, и ничего не возвращает.
getFlashSize
Это метод доступа к параметру объема памяти FLASH. У метода нет параметров, и он возвращает значение типа long, которое показывает количество байт (размер) FLASH.
getEEPROMSize
Это метод доступа к параметру объема памяти EEPROM. У метода нет параметров, и он возвращает значение типа long, которое показывает количество байт (размер) EEPROM.
getPageSize
Это метод доступа к параметру размера страницы FLASH. Метод допустим только тех AVR, которые имеют страницы FLASH. Для всех других AVR, у которых нет страниц памяти, возвращаемое значение будет –1. У метода нет параметров, и он возвращает значение типа long, которое показывает количество байт в каждой странице FLASH.
getFuseStatus
Это метод доступа для проверки фьюзов (fuse bits), если устройство их имеет. У метода нет параметров, и он возвращает true если в XML-файле есть секция «FUSE», иначе возвращает false.
getXFuseStatus
Это метод доступа для проверки — есть или нет в устройстве расширенные биты фьюзов (extended fuse bits). У метода нет параметров, и он возвращает true если устройство имеет extended fuses, иначе возвращает false.
getSignature
Это метод доступа для запроса байтов сигнатуры устройства. Имейте в виду, что это не байты сигнатуры, прочитанные из реально подключенного программируемого устройства, а байты сигнатуры, прочитанные из файлов XML. Метод берет в качестве параметров три указателя на long, и ничего не возвращает. Байты сигнатуры копируются в переменные, на которые указывают указатели, переданные в качестве параметров. Если любой из указателей окажется нулевым (null pointer), то будет выброшено исключение (exception thrown).
AVRProgrammer
Это абстрактный класс, предоставляющий фреймворк для реализации интерфейса для специфичного программатора AVR, например bootloader или программатор ISP. Почти все методы являются виртуальными и пустыми, они должны быть перегружены в производных классах. Программатор работает через обобщенный байт-ориентированный канал обмена, который должен быть предоставлен в момент создания экземпляра этого класса.
AVRProgrammer
Это конструктор для класса. Он получает один параметр, указатель на объект CommChannel. Это канал обмена, который будет использоваться для будущего обмена с реальным программатором. Будет выброшено исключение (exception thrown), если для предоставлен нулевой указатель на объект канала коммуникации.
~AVRProgrammer
Это деструктор класса. В настоящее время в нем нет никакого функционала, это просто вместилище для дальнейших расширений.
readProgrammerID
Это статический метод для чтения строки идентификации (ID-string) подключенного программатора. Этот метод отправляет ‘S’ в программатор через канал обмена, переданный в качестве параметра как указателя на объект CommChannel. Используйте этот метод, чтобы решить — какой нужно создать производный объект программатора. Этот метод возвращает ID-string программатора из 7 символов. Выбрасывается исключение, если в качестве канала обмена дан указатель null, или если произошла ошибка при обмене данными с программатором.
setPagesize
Это метод доступа к информации страницы FLASH программатора. Он должен быть вызван перед любыми операциями с памятью FLASH. Метод принимает один параметр типа long, размер страницы FLASH в байтах, и ничего не возвращает.
enterProgrammingMode
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен указать подключенному программатору войти в режим программирования. Метод не получает параметров, и возвращает true, если эта операция поддерживается программатором, иначе возвращает false. Должно быть сгенерировано исключение (exception thrown), если произошла любая ошибка в обмене данных.
leaveProgrammingMode
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен указать подключенному программатору выйти из режима программирования. Метод не получает параметров, и возвращает true, если эта операция поддерживается программатором, иначе возвращает false. Должно быть сгенерировано исключение (exception thrown), если произошла любая ошибка в обмене данных.
chipErase
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен указать подключенному программатору стереть (erase) содержимое подключенного программируемого устройства (микроконтроллера). Метод не получает параметров, и возвращает true, если эта операция поддерживается программатором, иначе возвращает false. Должно быть сгенерировано исключение (exception thrown), если произошла любая ошибка в обмене данных.
RC_Calibrate
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен указать подключенному программатору калибровать внутренний RC-генератор для устройств Atmel ATtiny4/5/9/10/20/40. Метод не принимает никаких параметров, и возвращает значение калибровки, отправленное программатором, иначе отправляет 0. За подробностями обратитесь к апноуту Atmel AVR057.
readOSCCAL
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен прочитать один из байтов калибровки генератора из подключенного программируемого устройства. Этот метод получает два параметра, значение типа long показывающее какое значение OSCCAL нужно прочитать, и указатель на long для переменной, куда должна быть скопирована прочитанная из устройства величина. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена или если в параметре предоставлен нулевой указатель.
readSignature
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен прочитать байты сигнатуры из подключенного устройства. Метод получает 3 параметра, 3 long указателя на переменные, куда должны быть скопированы прочитанные значения. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена или если в параметре предоставлен нулевой указатель.
checkSignature
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен проверить предоставленные байты сигнатуры на соответствие байтам из подключенного устройства. Метод получает 3 параметра типа long, содержащие проверяемую сигнатуру. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена или если в устройстве имеются несовпадающие байты сигнатуры.
writeFlashByte
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен записать байт в память FLASH подключенного устройства. Метод принимает два параметра типа long — один это адрес байта во FLASH, а другой значение записываемого байта. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена.
writeEEPROMByte
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен записать байт в память EEPROM подключенного программируемого устройства. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена.
writeFlash
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен записать содержимое предоставленного HEX-файла в память FLASH подключенного программируемого устройства. Метод принимает 1 параметр, указатель на требуемый объект HEXFile. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена, или если в параметре предоставлен указатель null.
readFlash
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен прочитать данные из памяти FLASH подключенного программируемого устройства, и записать их в предоставленные объект файла HEX. Метод принимает 1 параметр, указатель на требуемый объект HEXFile. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена, или если в параметре предоставлен указатель null.
writeEEPROM
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен записать содержимое предоставленного HEX-файла в память EEPROM подключенного программируемого устройства. Метод принимает 1 параметр, указатель на требуемый объект HEXFile. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена, или если в параметре предоставлен указатель null.
readEEPROM
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен прочитать данные из памяти EEPROM подключенного программируемого устройства, и записать их в предоставленные объект файла HEX. Метод принимает 1 параметр, указатель на требуемый объект HEXFile. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена, или если в параметре предоставлен указатель null.
writeLockBits
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен установить биты защиты (lock bits) подключенного программируемого устройства в предоставленное значение. Метод принимает 1 параметр типа long, содержащий нужное значение для lock bits. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена.
readLockBits
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен прочитать значения битов защиты (lock bits) из подключенного программируемого устройства. Метод принимает 1 параметр — указатель на long, куда должны быть скопированы прочитанные значения lock bits. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена, или если в параметре предоставлен указатель null.
writeFuseBits
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен установить фьюзы (fuse bits, сразу и младший, и старший байты) подключенного программируемого устройства в предоставленное значение. Метод принимает 1 параметр типа long, содержащий нужное значение для fuse bits. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена.
readFuseBits
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен прочитать значения фьюзов (fuse bits, сразу и младший и старший байт) из подключенного программируемого устройства. Метод принимает 1 параметр — указатель на long, куда должны быть скопированы прочитанные значения fuse bits. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена, или если в параметре предоставлен указатель null.
writeExtendedFuseBits
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен установить расширенные фьюзы (extended fuse bits) подключенного программируемого устройства в предоставленное значение. Метод принимает 1 параметр типа long, содержащий нужное значение для extended fuse bits. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена.
readExtendedFuseBits
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен прочитать значения расширенных фьюзов (extended fuse bits) из подключенного программируемого устройства. Метод принимает 1 параметр — указатель на long, куда должны быть скопированы прочитанные значения extended fuse bits. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена, или если в параметре предоставлен указатель null.
programmerSoftwareVersion
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен прочитать версию firmware подключенного программатора. Метод принимает 2 параметра — 2 long указателя на переменные, куда должны быть скопированы номера версий major и minor. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена, или если в параметре предоставлен указатель null.
programmerHardwareVersion
Этот метод является виртуальным, и он не реализован в этом абстрактном базовом классе. Он должен прочитать версию аппаратуры подключенного программатора. Метод принимает 2 параметра — 2 long указателя на переменные, куда должны быть скопированы номера версий major и minor. Метод возвращает true, если операция поддерживается программатором, иначе возвращает false. Должно быть выброшено исключение в случае любой ошибки обмена, или если в параметре предоставлен указатель null.
AVRBootloader
Это класс, который является производным от базового класса AVRProgrammer. Он предоставляет обычный интерфейс для приложения бутлоадера [3]. Класс AVRBootloader переназначает все виртуальные методы базового класса, и предоставляет конструктор с эквивалентными параметрами.
AVRInSystemProg
Это класс, который является производным от базового класса AVRProgrammer. Он предоставляет обычный интерфейс для приложения ISP программатора [4].
Класс AVRInSystemProg переназначает все виртуальные методы базового класса, и предоставляет конструктор с эквивалентными параметрами.
CommChannel
Этот класс является абстрактным, предоставляющим фреймворк для реализации байт-ориентированного канала обмена. Все методы класса CommChannel являются виртуальными и пустыми, они должны быть перезагружены в производных классах.
~CommChannel
Это деструктор класса. В настоящее время в нем нет никакого функционала, это просто вместилище для дальнейших расширений.
openChannel
Этот метод должен выполнять необходимые операции для открытия канала коммуникации. Он всегда должен быть вызван перед началом любого обмена. Метод не принимает параметров, и не возвращает значений. Должно быть выброшено исключение, если произошла любая ошибка.
closeChannel
Этот метод должен выполнять необходимые операции для закрытия канала коммуникации. Он всегда должен быть вызван, когда обмен данными полностью завершен. Метод не принимает параметров, и не возвращает значений. Должно быть выброшено исключение, если произошла любая ошибка.
sendByte
Этот метод должен послать байт через канал обмена. Метод принимает 1 параметр — значение типа long, содержащее отправляемый байт. Метод не возвращает значений. Должно быть выброшено исключение, если произошла любая ошибка обмена, или если канал не был открыт.
getByte
Этот метод должен ожидать и принимать байт из канала обмена. Метод не принимает параметров, и возвращает long, содержащий принятый байт. Должно быть выброшено исключение, если произошла любая ошибка обмена, или если канал не был открыт.
flushTX
Этот метод должен сбрасывать (flush) буфер передачи. Метод не принимает параметров, и не возвращает значений. Должно быть выброшено исключение, если произошла любая ошибка обмена, или если канал не был открыт.
flushRX
Этот метод должен сбрасывать (flush) буфер приема. Метод не принимает параметров, и не возвращает значений. Должно быть выброшено исключение, если произошла любая ошибка обмена, или если канал не был открыт.
sendMultiple
Этот метод должен отправить массив байт через канал обмена. Метод принимает 2 параметра — указатель на первый байт в массиве unsigned char, и long содержащее количество байт. Метод не возвращает значения. Должно быть выброшено исключение, если произошла любая ошибка обмена, или если канал не был открыт.
SerialPort
Это класс, производный из базового класса CommChannel. Он предоставляет обычный интерфейс обмена по каналу для стандартного COM-порта PC (RS-232 или виртуальный USB COM-порт). Класс SerialPort перезагружает все виртуальные методы базового класса, и имеет свой специфический конструктор.
SerialPort
Это конструктор для класса. Он инициализирует порт, но не открывает канал для обмена. Конструктор принимает 2 параметра — long содержащий номер COM-порта (от 1 до 8) и long содержащий лимит таймаута для обмена в секундах. Будет выброшено исключение, если указан недопустимый номер порта, или недопустимое значение таймаута.
HEXFile
Это класс, предоставляющий базовый функционал для чтения и записи файлов в формате Intel Extended HEX [2]. В классе есть также методы ждя задание диапазона используемой памяти. Это полезно для того, чтобы читать или записывать только определенные части областей памяти AVR.
HEXFile
Это конструктор для класса. Он получает 2 параметра — long указывающий на максимальный требуемый размер буфера и long содержащий значение байта по умолчанию, используемое для инициализации содержимого буфера. Будет выброшено исключение, если нет достаточного объема памяти для буфера.
~HEXFile
Это деструктор для класса. Он освобождает всю предварительно выделенную память.
readFile
Этот метод читает данные из HEX-файла. Метод принимает один параметр, имя HEX-файла, и не возвращает никаких значений. Будет выброшено исключение, если произошла любая ошибка с доступом к файлу, или если файл имеет ошибочный формат.
writeFile
Этот метод записывает данные в HEX-файл. Метод принимает один параметр, имя HEX-файла, и не возвращает никаких значений. Будет выброшено исключение, если произошла любая ошибка с доступом к файлу.
setUsedRange
Этот метод переназначает индикаторы диапазона памяти. Это может использоваться для пределов диапазона для операций чтения и записи. Метод принимает 2 параметра long, содержащие новые лимиты start и end соответственно. Метод не возвращает значения. Будет выброшено исключение, если предоставленный диапазон является недопустимым.
clearAll
Этот метод устанавливает весь буфер данных в нужное значение байта. Метод принимает 1 параметр long, содержащий нужное значение байта, которое будет записано во все ячейки буфера, и не возвращает значение.
getRangeStart
Это метод доступа к начальному адресу текущего диапазона. Метод не принимает параметров, и возвращает начальный адрес.
getRangeEnd
Это метод доступа к конечному адресу текущего диапазона. Метод не принимает параметров, и возвращает начальный адрес.
getData
Это метод доступа к данным буфера. Принимает 1 параметр long, содержащий адрес байта, и возвращает long, содержащее значение байта буфера. Будет выброшено исключение, если адрес вышел за пределы допустимого диапазона.
setData
Это метод доступа для установки данных в буфере. Принимает 2 параметра — long содержащий адрес байта, и long содержащий значение байта. Будет выброшено исключение, если адрес вышел за пределы допустимого диапазона.
getSize
Это метод доступа для запроса размера буфера. Метод не принимает параметров и возвращает long, содержащее размер буфера в байтах.
XMLFile
Это класс, предоставляющий простой парсер XML для чтения файлов описания AVR (Part description files), которые поставляются совместно с Atmel AVR Studio (их можно также скачать в архиве [5]). Класс можно также использовать в других проектах для общего парсинга XML. Имейте в виду, что класс не поддерживает атрибуты внутри тегов, так что не будет сгенерировано ошибок если такие произойдут с тегами. Атрибуты просто игнорируются. Класс читает весь файл XML и строит в памяти резидентное дерево из его содержимого.
XMLFile
Это конструктор для класса. Принимает 1 строковый параметр, имя файла XML для парсинга. Конструктор немедленно прочитает файл, так что если не будет выброшено исключений, то будет построено готовое дерево XML, когда конструктор завершит работу.
~XMLFile
Это деструктор для класса. Он освобождает всю память, выделенную ранее для резидентного дерева XML.
exists
Этот метод проверяет, есть ли указанный узел (node) по данному пути дерева XML. Метод принимает 1 строковый параметр, полный путь включающий имя узла, и возвращает true если node существует, иначе false.
getValue
Этот метод получает значение из узла (node value) дерева XML. Метод принимает 1 строковый параметр, полный путь включающий имя узла (node name), и возвращает строку значения из узла. Выбрасывается исключение, если узел не найден. Используйте метод exists, чтобы убедиться, что нужный узел существует.
print
Этот метод печатает все содержимое дерева в коротком формате. Этот метод был изначально реализован для целей отладки. Метод не принимает параметров, и ничего не возвращает.
JobInfo
Это класс, содержащий все информацию, распакованную из параметров командной строки. Класс также содержит функционал для выполнения всех нужных операций.
JobInfo
Это конструктор для класса. Он инициализирует всю его информацию в значения по умолчанию.
parseCommandline
Этот метод делает парсинг параметров командной строки. Принимает 2 параметра, стандартные int argc и char *argv[] от функции main(). Метод ничего не возвращает. Будет выброшено исключение, если встретился любой неправильный параметр.
doJob
Этот метод делает всю работу, необходимую для выполнения всех задач, полученных из параметров командной строки. Он также заботится о создании требуемых объектов канала обмена и программатора. Метод не принимает параметров, и ничего не возвращает. Будет выброшено исключение, если произойдет любая ошибка.
Utility
Этот класс является контейнером и пространством имен для часто используемых функций. Он реализован в исходном файле, external ссылка на объект Util object предоставлена в файле хедера. Класс специально используется для вывода сообщений лога и прогресса, и для разрешения фоновых операций.
Utility
Это конструктор для класса. Он не принимает параметров. Конструктор инициализирует внутренний лог и статус прогресса для того, чтобы разрешить работу лога и сообщений прогресса.
~Utility
Это деструктор для класса. В нестоящее время в нем нет никаких действий, это просто место для будущих расширений.
muteLog
Этот метод предотвращает вывод всех дальнейших сообщений лога на экран. Он не принимает параметров, и ничего не возвращает.
muteProgress
Этот метод предотвращает вывод всех дальнейших сообщений лога на экран. Он не принимает параметров, и ничего не возвращает.
log
Этот метод печатает сообщения лога на экран, если это не заглушено методом muteLog. Метод принимает 1 параметр — строку сообщения. Метод ничего не возвращает.
Progress
Этот метод печатает сообщения прогресса на экран, если это не заглушено методом muteProgress. Метод получает 1 параметр — строку сообщения. Метод ничего не возвращает.
convertHex
Этот метод конвертирует шестнадцатеричную строку в число. Метод получает 1 параметр — строку, и возвращает long, содержащее преобразованную величину. Будет выброшено исключение, если при преобразовании произошла ошибка.
convertLong
Этот метод преобразует число в строку, используя указанное основание системы счисления. Метод принимает 2 параметра — long содержащий число для преобразования, и long содержащий нужное используемое основание.
getRegistryValue
Этот метод запрашивает значение из базы данных реестра Windows. Метод принимает 2 параметра — строку содержащую путь до ключа реестра, и строку содержащую имя ключа. Метод возвращает строку, содержащую значение ключа из реестра. Будет выброшено исключение, если произошла любая ошибка при доступе к базе данных реестра.
ErrorMsg
Это класс, содержащий контейнер для сообщений об ошибках и для выбрасывания их как исключений.
ErrorMsg
Это конструктор для класса. Принимает 1 параметр, строку сообщения об ошибке.
~ErrorMsg
Это деструктор для класса. Сейчас тут нет никакого функционала, это просто контейнер для дальнейшего расширения.
What
Это метод доступа к строке сообщения об ошибке. Метод не принимает параметров, и возвращает копию сообщения об ошибке.
[5. История ревизий]
Ревизия | Дата | Комментарий |
2568B | 10/2012 | Новый шаблон (template) и некоторые незначительные исправления. Устаревшее в ревизии A удалено. |
2568A | 07/2004 | Первый документированный релиз. |
[Ссылки]
1. AVR911: AVR Open Source Programmer 8-bit Atmel Microcontrollers site:atmel.com.
2. Intel HEX: описание формата файла.
3. AVR109 site:site:atmel.com.
4. AVR910 site:atmel.com.
5. avr911.zip — исходный код и скомпилированный исполняемый файл (Windows) утилиты программатора AVROSP, XML-файлы описания устройств (XML part description files).
6. Макетирование и изготовление программатора AVRISP-MKII в домашних условиях.
Если вы разрабатываете устройство, которое, например, будет управлять вашим домом или мастерской, защищать ваш дом от грабителей, утечек воды, пожара и т. Д., То вам нужен какой-то регистратор данных для последующего изучения вышеупомянутых событий. Возможно, вы захотите узнать, кто ввел код на клавиатуре, когда произошел сбой питания, что вызвало срабатывание сигнализации и т. Д. Мой проект включал управление системой центрального отопления: регистрацию температуры и управление масляной горелкой и насосами.При этом меня ждал неприятный сюрприз: микроконтроллер сам по себе перезагружался без видимой причины. Изучая программу, я не обнаружил проблемы, поэтому добавил возможность логирования на карту MMC. Я начал регистрировать вход и возврат из всех подпрограмм следующим образом: Температура чтения: Печать №2, шестнадцатеричный (sph); Шестигранник (spl); «E: Readtemp» . . . . Печать №2, шестнадцатеричный (sph); Шестигранник (spl); «R: Readtemp T =»; температура Возврат Я напечатал следующее: (Hex (sph); Hex (spl)), потому что я также хотел знать, что происходит со стеком.Я подозревал, что проблема именно в этом! Я использовал карту, похожую на те, что используются в цифровых камерах, с большим объемом памяти. Это давало возможность писать на карту в течение месяца или около того. Для этого мне потребовалась AVR-DOS. К сожалению, AVR-DOS требует много оперативной памяти, поэтому его можно использовать только с микроконтроллерами, такими как ATmega32 или другими членами семейства AVR с таким или большим объемом ОЗУ. Слева на Рисунке 1 вы можете увидеть разъем IDC, который подключается к плате разработки Mini-Pin, а справа вы видите гнездо для карты MMC.Для карты MMC требуется источник питания 3,3 В. Однако если наш микроконтроллер работает от 5 В, то нам понадобится подходящий регулятор напряжения, например GL1117-33. Кроме того, сигналы, поступающие от микроконтроллера (SS, MOSI, CLK), должны быть понижены с помощью цепи резисторов, чтобы соответствовать логическим уровням MMC 3,3 В. Сигнал MISO, поступающий с карты MMC, имеет логический уровень 3,3 В, который наш микроконтроллер уже принимает как логическую 1. Все 4 сигнала (MISO, MOSI, CLK и SS) подключены к свободным контактам порта ввода-вывода микроконтроллера. , который мы позже должны назначить в AVR-DOS. Использование SD-карты с AVR — файловая система DOS 2012_AVR_UK_83 Читать далееПлощадь магазина |
Ассемблер AVR Gerd
Ассемблер AVR Gerd Дорожка: Главная => AVR-Ассемблер (Diese Seite на немецком языке: )С днем: версия 5.0!
Посмотреть некоторые долгосрочные статистические данные можно здесь.
Ассемблер командной строки для всех типов AT90S-, AT90CAN-, AT90USB-, ATtiny-, ATmega и ATxmega. микроконтроллеров ATMEL, со многими расширенными и новыми функциями.Работает с командой Win64 и Linux (i386) линий. Преимущества гавразма:Примечание
gavrasm также доступен в графической версии. Эта версия встроена в Симулятор AVR avr_sim. Эта версия на английском языке.Следующие версии avr_sim соответствуют версиям gavrasm:
- avr_sim 2.4: gavrasm 5.0
- avr_sim 2.3: гавразм 4.9
- avr_sim 2.2: гавразм 4.8
- avr_sim 2.1: гавразм 4.7
- avr_sim 2.0: гавразм 4.6
- avr_sim 1.9: гавразм 4.6
- avr_sim 1.8: гавразм 4.5
- avr_sim 1.7: гавразм 4.4
- avr_sim 1.6: гавразм 4.3
- avr_sim 1.5: гавразм 4.2
- avr_sim 1.4: гавразм 4.1
- avr_sim 1.3: гавразм 4.0
- avr_sim 1.2: гавразм 3.9
- avr_sim 1.1: гавразм 3.8
- avr_sim 1.0: гавразм 3.7
Языки
Мой AVR-Assembler доступен на английском, французском, немецком и турецком языках и может легко переводится на другие языки (пришлите мне отредактированный файл gavrlang_xx.па и ReadMe.Txt для дальнейшего перевода на другие языки). Подопытный китаец версия доступна на Github. Увидеть Немецкая страница для немецкой версии.Характеристики
Просмотрите ReadMe.Txt для получения дополнительной информации о функциях. См. Также введение в использование и некоторые примечания по специальным особенности гавразма.Почта о выпусках новых версий
Пожалуйста, заполните форму и отправьте ее мне по почте. Вы будете получать письмо по электронной почте всякий раз, когда выходит новая версия gavrasm.Скачивание и установка
Для Linux и Windows предусмотрены 64-битные скомпилированные версии.Распаковать исполняемый файл и файл readme в желаемое место. См. Ознакомительные сведения о параметрах командной строки. и пользуйся.Исходный код написан на Паскале для FreePascal. Это доступно для Linux и DOS / Win (отличается только кодировкой конца строки).
Распакуйте заархивированные файлы, скопируйте нужный языковой файл gavrlang_xx.pas, переименуйте его в gavrlang.pas и скомпилировать с помощью компилятора Pascal (fpc, см. http://www.freepascal.org).
Все доступные версии
Версии уже не доступны
Версия | Дата | Версия | Дата | Версия | Дата | Версия | Дата |
---|---|---|---|---|---|---|---|
4.6 | февраль 2020 | 4,5 | ноябрь 2019 | 4,4 | октябрь 2019 | 4,3 | июль 2019 |
4,2 | март 2019 | 4,1 | декабрь 2018 | 4,0 | сентябрь 2018 г. | 3,9 | июнь 2018 г. |
3,8 | апрель 2018 г. | 3,7 | октябрь 2017 г. | 3,6 | Январь 2017 г. | 3.5 | Январь 2016 г. |
3,4 | Декабрь 2014 г. | 3,3 | Июнь 2012 г. | 3,2 | май 2011 г. | 3,1 | декабрь 2011 г. |
3,0 | июль 2011 г. | 2,9 | январь 2011 г. | 2,8 | Январь 2011 г. | 2,7 | Ноябрь 2010 г. |
2,6 | Май 2010 г. | 2,5 | Февраль 2010 г. | 2.4 | Январь 2010 г. | 2,3 | Май 2009 г. |
2,2 | Декабрь 2008 г. | 2,1 | Декабрь 2006 г. | 2,0 | сентябрь 2006 г. | 1,9 | август 2006 г. |
1,8 | июль 2006 г. | 1,7 | май 2006 г. | 1,6 | декабрь 2005 г. | 1,5 | сентябрь 2005 г. |
1,4 | июль 2005 г. | 1.3 | Май 2005 | 1,2 | март 2005 г. | 1,1 | январь 2005 г. |
1,0 | октябрь 2004 г. | 0,9 | март 2004 г. | 0,8 | февраль 2004 г. | 0,7 | ноябрь 2003 г. |
0,6 | сентябрь 2003 г. | 0,5 | август 2003 г. | 0,4 | июль 2003 г. | 0,3 | июнь 2003 г. |
0.2 | май 2003 г. | 0,1 | декабрь 2002 г. |
Отчеты об ошибках
Это программное обеспечение интенсивно тестировалось, но все еще может содержать ошибки. Поэтому возьмите осторожность при использовании. Сообщения об ошибках и отсутствующих функциях, пожалуйста, gavrasm (at) avr-asm-tutorial.net, Subject = gavrasm-bug 5.0.© 2003-2021 автор http://www.avr-asm-tutorial.net
Поддержка APSolute Vision в отчете AVR
Следующие отчеты AVR доступны в категории Learning Reports .
Обратите внимание, что модуль APSolute Vision AVR поддерживает DefensePro и AppWall.
Отчеты о базовых показателях DoS для поведения.
Эти отчеты предоставляют исторические отчеты для базовых показателей DoS для поведения. Отчеты поддерживаются для IPv4 и IPv6, входящего и исходящего трафика, информации Kbps и PPS, а также для различных протоколов.
Существующий отчет, который предоставляет информацию в реальном времени для базовых уровней BDoS, доступен с помощью клиента APSolute Vision, перспективы «Мониторинг безопасности», вкладки «Мониторинг защиты » , отчета «Трафик сетевых правил» .
Отчет BDoS доступен для каждого правила / политики.
Отчеты о базовых показателях DNS
Эти отчеты предоставляют исторические отчеты для базовых показателей DNS. Отчеты поддерживаются для IPv4 и IPv6, только для входящего трафика, для QPS и для различных протоколов.
Существующий отчет, который предоставляет информацию в реальном времени для базовых показателей DNS, доступен в клиенте APSolute Vision, в перспективе «Мониторинг безопасности», на вкладке «Мониторинг защиты » , в отчете «Сетевое правило DNS-трафик» .
Базовый отчет DNS доступен для каждого правила / политики.
Отчеты о базовых показателях HTTP
В следующих отчетах представлены исторические отчеты для базовых показателей HTTP, непрерывные отчеты о базовых показателях.
- Скорость получения и отправки запросов
- Скорость других запросов
- Исходящая пропускная способность
- запросов на соединение
- запросов на источник
Существующие отчеты, которые предоставляют информацию в реальном времени для базовых показателей HTTP, доступны с помощью клиента APSolute Vision, перспективы «Мониторинг безопасности», вкладки HTTP Reports , отчетов Continuous Learning Statistics .
Базовый отчет HTTP доступен для каждого сервера.
Примечание :
Использование трафика поддерживается только для платформы DefensePro с EZChip.
Раздел загрузки для нового стека с функциями веб-клиента. | — | Мы продолжим поддерживать это программное обеспечение как часть нового стека TCP / IP. |
eth_rem_dev_tcp-2.17.tar.gz | mtime: 2009-03-11, размер: 114542 байта | Исходный код AVR с веб-интерфейсом и исходный код клиента udpcom с предварительно скомпилированными версиями для linux, mac osx и windows (dos shell) Изменения с последней версии: — обновления Makefile и README. |
eth_rem_dev_tcp-2.15.tar.gz | mtime: 2009-02-11, размер: 114260 байт | Исходный код AVR с веб-интерфейсом и udpcom исходный код клиента с предварительно скомпилированными версиями для linux, mac osx и windows (dos shell) Изменения по сравнению с последней версией: — косметическая очистка кода |
eth_rem_dev_tcp-2.14.tar.gz | mtime: 18.01.2009, размер: 113401 байт | Исходный код AVR с веб-интерфейсом и исходный код клиента udpcom с предварительно скомпилированными версиями для linux, mac osx и windows (dos shell) Изменения с последней версии: — исправлены ошибки. |
eth_rem_dev_tcp-2.13.tar.gz | mtime: 2008-12-31, размер: 113199 байт | Исходный код AVR с веб-интерфейсом и исходный код клиента udpcom с предварительно скомпилированными версиями для Linux, Mac OSX и Windows (dos shell) Изменения по сравнению с последней версией: — Обновлен файл README |
eth_rem_dev_tcp-2.12.tar.gz | mtime: 2008-12-27, размер: 113908 байт | Исходный код AVR с веб-интерфейсом и исходный код клиента udpcom с предварительно скомпилированными версиями для linux, mac osx и windows (dos shell) Изменения с последней версии: — обновлено для поддержки чипа atmega328 |
eth_rem_dev_tcp-2.11.tar.gz | mtime: 2008-08-03, размер: 116950 байт | Исходный код AVR с веб-интерфейсом и исходный код клиента udpcom с предварительно скомпилированные версии для linux, mac osx и windows (dos shell) Изменения по сравнению с последней версией: — изменения только в коде udp.Никаких изменений кода веб-сервера / TCP. |
eth_rem_dev_tcp-2.10.tar.gz | mtime: 2007-11-28, размер: 1014438 байт | Исходный код AVR с веб-интерфейсом и исходный код клиента udpcom с предварительно скомпилированными версиями для Linux, Mac OSX и Windows (dos shell) Изменения по сравнению с последней версией: — без изменений кода, добавлена поддержка avrdude для atmeag168 |
eth_rem_dev_tcp-2.9.tar.gz | mtime: 2007-10-10, размер: 114438 байт | Источник код с веб-интерфейсом и исходный код udpcom с предварительно скомпилированными версиями для linux, mac osx и windows (dos shell) Изменения по сравнению с последней версией: — Добавить приведение для совместимости с компилятором codevision |
eth_rem_dev_tcp-2.8.tar.gz | mtime: 2007-09-15, размер: 114227 байт | Исходный код с веб-интерфейсом и исходный код udpcom с предварительно скомпилированными версиями для linux, mac osx и windows (dos shell) Изменения с момента последнего версия: — Удалить жестко заданный URL. Добавьте функцию «перемещен навсегда». Теперь нужно настроить только Ip и Mac. Это дает преимущества при использовании NAT, поскольку серверу не нужно знать о внутренних или внешних адресах. |
eth_rem_dev_tcp-2.7.tar.gz | mtime: 2007-03-12, размер: 113548 байт | Исходный код с веб-интерфейсом и исходный код udpcom с предварительно скомпилированными версиями для linux, mac osx и windows (dos shell) Изменения с момента последнего версия: — Добавьте прагму, чтобы избежать кеширования страниц в мобильных телефонах и прокси-серверах, так как это может привести к отображению неправильного состояния вывода. |
eth_rem_dev_tcp-2.6.tar.gz | mtime: 2007-03-07, размер: 113446 байт | Исходный код с веб-интерфейсом и исходный код udpcom с предварительно скомпилированными версиями для linux, mac osx и windows (dos shell) Изменения по сравнению с последней версией: — обновления для нового оборудования с часами от enc28j60.Это программное обеспечение работает также на старом оборудовании. |
eth_rem_dev_tcp-2.5.tar.gz | mtime: 2007-02-19, размер: 111800 байт | Исходный код с веб-интерфейсом и исходный код udpcom с предварительно скомпилированными версиями для linux, mac osx и windows (dos shell) Изменения по сравнению с последней версией: — файл README обновлен — сбросить enc только с помощью команды |
eth_rem_dev_tcp-2.4.tar.gz | mtime: 2006-12-15, размер: 134855 байтов | исходный код с веб-интерфейсом и исходный код udpcom с предварительно скомпилированными версиями для linux, mac osx и windows (оболочка dos) Изменения по сравнению с последней версией: — файл README, читаемый с помощью текстового редактора или веб-браузера — увеличить длину кадра Ethernet (некоторые браузеры отправляют огромный список «Принять:») |
eth_rem_dev_tcp-2.3.tar.gz | mtime: 2006-11-26, размер: 134327 байт | Исходный код с веб-интерфейсом и исходный код udpcom с предварительно скомпилированными версиями для linux, mac osx и windows (dos shell) Изменения с момента последнего версия: — порт прослушивания для веб-сервера avr теперь настраивается в main.c |
eth_rem_dev_tcp-2.2.tar.gz | mtime: 2006-11-01, размер: 133284 байта | Исходный код с веб-интерфейсом и исходный код udpcom с предварительно скомпилированными версиями для Linux, Mac OSX и Windows (оболочка dos). Изменения по сравнению с последней версией: — Редакционные изменения и улучшенная обработка порядковых номеров |
eth_rem_dev_tcp-2.1.tar.gz | mtime: 2006-10-30, размер: 134066 байт | Исходный код с веб-интерфейсом и исходный код udpcom с предварительно скомпилированными версиями для linux, mac osx и windows (dos shell) Изменения с момента последнего версия: — первая общедоступная версия |
— | — | — |
uip06_tuxgraphics_eth-0.1.tar.gz | mtime: 2007-05-18, размер: 30818 байт | Порт Адама Данкеля uIP на плату tuxgraphics eth с помощью atmega168.Содержит пример telnet-сервера. Этот код предоставил Бен Зийлстра. См. Прилагаемый файл README.htm для получения дополнительных сведений. Стек uIP намного больше, чем стек tuxgraphics, но он может отправлять и получать несколько пакетов за сеанс tcp — функция, необходимая для таких приложений, как telnet. |
— | — | — |
article06061 | Описание оборудования | — |
article06111, встроенный веб-сервер | Статья с описанием этого веб-сервера |
Внутреннее оборудование АРН — Kamami.pl
© MCS Electronics, 1995-2006 Chip
© MCS Electronics, 1995-2006 Frequ
© MCS Electronics, 1995-2006 RS ad
© MCS Electronics, 1995-2006 Ключ m
© MCS Electronics, 1995-2006 Param
© MCS Electronics, 1995–2006 Для
© MCS Electronics, 1995–2006 F
© MCS Electronics, 1995–2006; BAS
© MCS Electronics, 1995-2006 гг. Optio
© MCS Electronics, 1995-2006 гг. USB-I
© MCS Electronics, 1995-2006 You c
© MCS Electronics, 1995-2006 Так далее
© MCS Electronics, 1995-2006 Botto
© MCS Electronics, 1995-2006 Справка
© MCS Electronics, 1995-2006 Это
© MCS Electronics, 1995-2006 CTRL +
© MCS Electronics, 1995-2006 Когда
© MCS Electronics, 1995-2006 Подробнее
© MCS Electronics, 1995-2006 $ 12 P
© MCS Electronics, 1995–2006. I
© MCS Electronics , 1995-2006 AVR I
© MCS Electronics, 1995-2006 Exter
© MCS Electronics, 1995-2006 E POR
© MCS Electronics, 1995–2006 Для e
© MCS Electronics, 1995–2006 Теперь c
© MCS Electronics, 1995–2006 065 0
© MCS Electronics, 1995-2006 ‘Когда
© MCS Electronics, 1995-2006 BUS A
© MCS Electronics, 1995-2006 Печать
© MCS Electronics, 1995–2006 Использование
© MCS Electronics, 1995–2006 Короткие
© MCS Electronics, 1995–2006
© MCS Electronics, 1995-2006 Mode
© MCS Electronics, 1995-2006 гг. равно
© MCS Electronics, 1995-2006 гг. In pr
© MCS Electronics, 1995-2006 Чипы
© MCS Electronics, 1995-2006 AT90S
© MCS Electronics, 1995-2006 AT90S
© MCS Electronics, 1995-2006 AT90S
© MCS Electronics, 1995-2006 AT90C
© MCS Electronics, 1995-2006 This
© MCS Electronics, 1995-2006 ATtin
© MCS Electronics, 1995-2006 ATMEG
© MCS Electronics, 1995-2006 ATMEG
© MCS Electronics, 1995-2006 ATMEG
© MCS Electronics, 1995 -2006 ATMEG
© MCS Electronics, 1995-2006 ATMEG
© MCS Electronics, 1995-2006 ATMEG
© MCS Electronics, 1995-2006 ATMEG
© MCS Electronics, 1995-2006 ATMEG
© MCS Electronics, 1995-2006 BASCO
© MCS Electronics , 1995-2006> Gre
© MCS Electronics, 1995-2006 k = g
© MCS Electronics, 1995-2006 Там
© MCS Electronics, 1995-2006 Каждые
© MCS Electronics, 1995-2006 То же
© MCS Electronics, 1995-2006 4.Th
© MCS Electronics, 1995-2006 Для e
© MCS Electronics, 1995-2006 In bo
© MCS Electronics, Декларация 1995-2006 гг.
© MCS Electronics, 1995-2006 RET S
© MCS Electronics, 1995-2006 IN Rd
© MCS Electronics, 1995-2006, INK
© MCS Electronics, 1995-2006 80 Co
© MCS Electronics, 1995-2006 261 A
© MCS Electronics, 1995-2006, когда
© MCS Electronics, 1995-2006 090 1
© MCS Electronics, 1995-2006 In th
© MCS Electronics, 1995-2006 ‘8 C /
© MCS Electronics, 1995-2006 гг. Actio
© MCS Electronics, 1995-2006 гг. Конец $
© MCS Electronics, 1995-2006 гг. $ DEFA
© MCS Electronics, 1995-2006 гг. №
© MCS Electronics, 1995-2006 8, C
© MCS Electronics, 1995-2006 ‘копия
© MCS Electronics, 1995-2006 $ INIT
© MCS Electronics, 1995-2006 $ lcdr
© MCS Electronics, 1995 -2006 Dim W
© MCS Electronics, 1995-2006 Пример
© MCS Electronics, 1995-2006 Synta
© MCS Electronics , 1995-2006 CONST
© MCS Electronics, 1995-2006 Вы c
© MCS Electronics, 1995-2006 Для J
© MCS Electronics, 1995-2006 ‘Как
© MCS Electronics, 1995-2006 $ NOIN
© MCS Electronics, 1995-2006 Actio
© MCS Electronics, 1995-2006 Synta
© MCS Электроника, 1995-2006 гг. Возврат
© MCS Electronics, 1995-2006 $ SERI
© MCS Electronics, 1995-2006 Var A
© MCS Electronics, 1995-2006 ‘или e
© MCS Electronics, 1995-2006 Remar
© MCS Electronics, 1995-2006 для t
© MCS Electronics, 1995-2006 Печать
© MCS Electronics, 1995-2006 Next
© MCS Electronics, 1995-2006 Ar (i)
© MCS Electronics, 1995-2006 $ swst
© MCS Electronics, 1995-2006 См.
© MCS Electronics, 1995-2006 ‘Purp
© MCS Electronics, 1995-2006 Пример
© MCS Electronics, 1995-2006 Outpu
© MCS Electronics, 1995-2006 Relai
© MCS Electronics, 1995-2006 См.
© MCS Electronics, 1995-2006 Confi
© MCS Electronics, 1995-2006 frequ
© MCS Electronics, 1995 -2006 для t
© MCS Electronics, 1995-2006 ‘co py
© MCS Electronics, 1995-2006 BIN A
© MCS Electronics, 1995-2006 Actio
© MCS Electronics, 1995 -2006 $ crys
© MCS Electronics, 1995-2006 См.
© MCS Electronics, 1995-2006 Plaat
© MCS Электроника, 1995-2006 Synta
© MCS Electronics, 1995-2006 One i
© MCS Electronics, 1995-2006 ‘—-
© MCS Electronics, 1995-2006 Wait
© MCS Electronics, 1995-2006 Synta
© MCS Electronics, 1995-2006 Home
© MCS Electronics, 1995-2006 Каждые
© MCS Electronics, 1995-2006 You w
© MCS Electronics, 1995-2006 Case
© MCS Electronics, 1995-2006 Также
© MCS Electronics, 1995-2006 гг. Пример
© MCS Electronics, 1995-2006 гг. Мужской
© MCS Electronics, 1995-2006 Synta
© MCS Electronics, 1995-2006 Confi
© MCS Electronics, 1995-2006 ‘micr
© MCS Electronics, 1995-2006 $ swst
© MCS Electronics, 1995-2006 Dim T
© MCS Electronics, 1995-2006 ‘You
© MCS Electronics, 1995-2006 I
© MCS Electronics, 1995-2006 s
© MCS Electronics, 1995-2006 ‘You
© MCS Electronics, 1995-2006 Actio
© MCS Electronics, 1995 -2006 As th
© MCS Electronics, 1995-2006 ‘circ
© MCS Electronics, 1995-2006 CONFI
© MCS Электроника, 1995-2006 Печать
© MCS Electronics, 1995-2006 frequ
© MCS Electronics, 1995-2006 ‘CONN
© MCS Electronics, 1995–2006 Displ
© MCS Electronics, 1995–2006 гг. Пример
© MCS Electronics, 1995–2006 chara
© MCS Electronics, 1995-2006 Actio
© MCS Electronics, 1995-2006 DATA
© MCS Electronics, 1995-2006 Actio
© MCS Electronics, 1995-2006 Thres
© MCS Electronics, 1995-2006 ‘So w
© MCS Electronics, 1995-2006 Dim N
© MCS Electronics, 1995-2006′ и
© MCS Electronics, 1995-2006 CONFI
© MCS Electronics, 1995-2006 cbi D
© MCS Electronics, 1995-2006 By se
© MCS Electronics, 1995-2006 GATEW
© MCS Electronics, 1995-2006 Когда
© MCS Electronics, 1995- 2006 Actio
© MCS Electronics, 1995-2006 Con fi
© MCS Electronics, 1995-2006 На TI
© MCS Electronics, 1995-2006 Bitra
© MCS Electronics, 1995 -2006 ‘Pri
© MCS Electronics, 1995-2006 ——
© MCS Electronics, 1995-2006 ’31 s
© MCS Electronics, 1995-2006 Actio
© MCS Electronics, 1995-2006 и t
© MCS Electronics, 1995-2006 См.
© MCS Electronics, 1995-2006 Ldi R
© MCS Electronics, 1995-2006 Actio
© MCS Electronics, 1995-2006 OPEN
© MCS Electronics, 1995-2006 Lcd «
© MCS Electronics, 1995-2006 Когда
© MCS Electronics, 1995-2006 F
© MCS Electronics, 1995-2006 ‘Exa
© MCS Electronics, 1995-2006 Strda
© MCS Electronics, 1995-2006 Do If
© MCS Electronics, 1995-2006 I2cwb
© MCS Electronics, 1995-2006 См.
© MCS Electronics, 1995-2006 f
© MCS Electronics, 1995-2006 ‘ Exa
© MCS Electronics, 1995-2006 Печать
© MCS Electronics, 1995-2006 _hour
© MCS Electronics, 1995- 2006 DBG A
© MCS Electronics, 1995-2006 lab el
© MCS Electronics, 1995-2006 Dim A
© MCS Electronics, 1995-2006 Synta
© MCS Electronics, 1995 -2006 Sub T
© MCS Electronics, 1995-2006 DEG2R
© MCS Electronics, 1995-2006 Synta
© MCS Electronics , 1995-2006 $ hwst
© MCS Electronics, 1995-2006 INT0
© MCS Electronics, 1995-2006 DISKF
© MCS Electronics, 1995-2006 гг.
© MCS Electronics, 1995-2006 DO-LO
© MCS Electronics, 1995-2006 Actio
© MCS Electronics, 1995-2006 ASM C
© MCS Electronics, 1995-2006 Outpu
© MCS Electronics, 1995-2006 Sdtmf
© MCS Electronics, 1995-2006 Печать
© MCS Electronics, 1995-2006 ENABL
© MCS Electronics, 1995-2006 ‘comm
© MCS Electronics, 1995-2006 255 E
© MCS Electronics, 1995-2006 См.
© MCS Electronics, 1995-2006 Sdate
© MCS Electronics, 1995-2006 Печать
© MCS Electronics, 1995–2006 INITF
© MCS Electronics, 1995–2006 $ fram
© MCS Electronics, 1995–2006 Synta
© MCS Electronics, 1995-2006 Par ti
© MCS Electronics, 1995-2006 #chan
© MCS Electronics, 1995-2006 Parti
© MCS Electronics, 1995 -2006 End ‘
© MCS Electronics, 1995-2006 для F
© MCS Electronics, 1995-2006 Data
© MCS Электроника, 1995-2006 гг. Сканирование
© MCS Electronics, 1995-2006 Remar
© MCS Electronics, 1995-2006 Для
© MCS Electronics, 1995-2006 GETTC
© MCS Electronics, 1995-2006 С
© MCS Electronics, 1995-2006 Actio
© MCS Electronics, 1995-2006 См.
© MCS Electronics, 1995-2006 HIGHW
© MCS Electronics, 1995-2006 Remar
© MCS Electronics, 1995-2006 Remar
© MCS Electronics, 1995-2006 Synta
© MCS Electronics, 1995-2006 ‘—-
© MCS Electronics, 1995-2006 var =
© MCS Electronics, 1995-2006 гг. $ Swst
© MCS Electronics, 1995-2006 ‘—-
© MCS Electronics , 1995-2006 Ввод
© MCS Electronics, 1995-2006 1234.
© MCS Electronics, 1995-2006 press
© MCS Electronics, 1995-2006 LCD a
© MCS Electronics, 1995- 2006 Deflc
© MCS Electronics, 1995-2006 Showp
© MCS Electronics, 1995-2006 LINE (
© MCS Electronics, 1995-2006 прозрачный
© MCS Electronics, 1995-2006 НАГРУЗКА
© MCS Electronics, 1995-2006 Идентификатор
© MCS Electronics , 1995-2006 Промывка
© MCS Electronics, 1995-2006 $ noty
© MCS Electronics, 1995-2006 Synta
© MCS Electronics, 1995-2006 Synta
© MCS Electronics, 1995-2006 гг. Пример
© MCS Electronics, 1995-2006 гг. Пример
© MCS Electronics, 1995-2006 гг. Печать
© MCS Electronics, 1995-2006 гг. Пример
© MCS Electronics, 1995-2006 NOSAV
© MCS Electronics, 1995-2006 Этикетка
© MCS Electronics, 1995-2006 гг. $ Fram
© MCS Electronics, 1995-2006 In VB
© MCS Electronics, 1995-2006 OUT A
© MCS Electronics, 1995-2006 POKE
© MCS Electronics, 1995-2006 Пример
© MCS Electronics, 1995-2006 Печать
© MCS Electronics, 1995-2006 ‘7 / C
© MCS Electronics, 1995-2006 XYB
© MCS Electronics, 1995-2006 См.
© MCS Electronics, 1995-2006 Long /
© MCS Electronics, 1995-2006 Synta
© MCS Electronics, 1995-2006 Norma
© MCS Electronics, 1995-2006 B
© MCS Electronics, 1995-2006 Это
© MCS Electronics, 1995-2006 Когда
© MCS Electronics, 1995-2006 Remar
© MCS Electronics, 1995-2006 Remar
© MCS Electronics, 1995-2006 Печать
© MCS Electronics, 1995-2006 ——
© MCS Electronics, 1995-2006 Actio
© MCS Electronics, 1995-2006 Parti
© MCS Electronics, 1995-2006 Читать /
© MCS Electronics, 1995-2006 Do In
© MCS Electronics, 1995-2006 Actio
© MCS Electronics, 1995-2006 (Re)
© MCS Electronics, 1995-2006 $ fram
© MCS Electronics, 1995-2006 Relea
© MCS Electronics, 1995-2006 I 43
© MCS Electronics, 1995-2006 гг. $ Crys
© MCS Electronics, 1995-2006 frequ
© MCS Electronics, 1995-2006 frequ
© MCS Electronics, 1995-2006 Up Tc
© MCS Electronics, 1995- 2006 Конец A
© MCS Electronics, 1995–2006 Конец S
© MCS Electronics, 1995–2006 ‘Кому u
© MCS Electronics, 1995-2006 Shift
© MCS Electronics, 1995-2006 $ bgf
© MCS Electronics, 1995-2006 You c
© MCS Electronics, 1995-2006 запятая
© MCS Electronics, 1995-2006 13 SO
© MCS Electronics, 1995-2006 progr
© MCS Electronics, 1995-2006 ‘копия
© MCS Electronics, 1995-2006 SPIMO
© MCS Electronics, 1995-2006 ‘meg
© MCS Electronics, 1995-2006 You m
© MCS Electronics, 1995-2006 St -y
© MCS Electronics, 1995-2006 ‘micr
© MCS Electronics, 1995-2006 См.
© MCS Electronics, 1995-2006 Remar
© MCS Electronics, 1995-2006 Synta
© MCS Electronics, 1995-2006 Wsysd
© MCS Electronics, 1995-2006 TCPCH
© MCS Electronics, 1995- Проверка 2006 г.
© MCS Electronics, 1995-2006 Байт
© MCS Electronics, 1995-2006 Const
© MCS Electronics, 1995-2006 End E
© MCS Electronics, 1995- 2006 См.
© MCS Electronics, 1995-2006 Когда
© MCS Electronics, 1995-2006 Actio
© MCS Electronics, 1995-2006 confi
© MCS Electronics, 1995-2006 Note
© MCS Electronics, 1995-2006 Const
© MCS Electronics , 1995-2006 VAL A
© MCS Electronics, 1995-2006 FILED
© MCS Electronics, 1995-2006 ‘копия
© MCS Electronics, 1995-2006 At 4
© MCS Electronics, 1995-2006 гг.
© MCS Electronics, 1995-2006 Do In
© MCS Electronics, 1995-2006 Synta
© MCS Electronics, 1995-2006 Inter
© MCS Electronics, 1995-2006 Confi
© MCS Electronics, 1995-2006 CONFI
© MCS Electronics, 1995-2006 The b
© MCS Electronics, 1995-2006 PCF85
© MCS Electronics, 1995-2006 page
© MCS Electronics, 1995-2006 Memor
© MCS Electronics, 1995-2006 99 cp
© MCS Electronics, 1995-2006 http:
© MCS Electronics, 1995-2006 ester
© MCS Electronics, 1995-2006 Vtan
© MCS Electronics, 1995-2006 страница
© MCS Electronics, 1995-2006 ‘you
© MCS Electronics, 1995-2006′ this
© MCS Electronics, 1995-2006 Const
© MCS Electronics, 1995-2006 DATE
© MCS Electronics, 1995-2006 BCCAR
© MCS Electronics , 1995-2006 ‘conn
© MCS Electronics, 1995-2006 BCDEF
© MCS Electronics, 1995-2006 гг. Пример
© MCS Electronics, 1995-2006 гг. » *
© MCS Electronics, 1995-2006 Инструменты
© MCS Electronics, 1995-2006 Index
© MCS Electronics, 1995-2006 гг. ATMEG
© MCS Electronics, 1995-2006 гг. CRC32
© MCS Electronics, 1995-2006 гг. GETKB
© MCS Electronics, 1995-2006 MAX 5
© MCS Electronics, 1995-2006 SHIFT
© MCS Electronics, 1995-2006 © MC
Габриэль Дос Reis — Re: [Patch, avr] PR54461: улучшенная интеграция AVR-Libc
Gabriel Dos Reis — Re: [Patch, avr] PR54461: улучшенная интеграция AVR-LibcЭто почтовый архив gcc-patches @ gcc.gnu.org список рассылки для проекта GCC.
- Из : Габриэль Дос Рейс <руководитель компании Integrable-Solutions dot net>
- Кому : Георг-Иоганн Лай
- Cc : gcc-patches at gcc dot gnu dot org, Денис Чертыков
, Эрик Веддингтон , Йорг Вунш - Дата : Пн, 3 сентября 2012 г. 13:33:43 -0500
- Тема : Re: [Patch, avr] PR54461: Улучшенная интеграция AVR-Libc
- Ссылки : <[email protected]>
В понедельник, 3 сентября 2012 г., в 11:29, Георг-Иоганн Лайнаписал: > AVR-Libc поставляется с написанными вручную оптимизированными функциями поддержки с плавающей запятой. > на ассемблере. Эти функции используют те же соглашения об именах, что и > libgcc. Бывают ситуации, когда конфликт этих названий приводит к производительности > регресс, потому что функции из libgcc связаны. Один пример > - это новая поддержка фиксированной точки, которая преобразует фиксированную точку в / из числа с плавающей запятой > и ссылаться на функции преобразования float / int из libgcc.> > Реализация float в libm.a обсуждалась несколько раз > с тем единственным результатом, что очень маловероятно, что код будет > когда-либо быть интегрированным в libgcc, потому что первоначальные авторы не > еще кругом. И гораздо меньше работы по добавлению нового переключателя конфигурации. > чем портировать и интегрировать код, если не было проблем с лицензией. > Одним из аргументов против такого расширения было то, что такое изменение компилятора > устанавливает зависимость между компилятором и AVR-Libc, но это > решение было принято давно, приняв код, который на самом деле должен > был добавлен в libgcc - но не по какой-то причине.> > Этот патч устраняет снижение производительности, удаляя > дважды реализованные функции из libgcc с помощью новой конфигурации > вариант --with-avrlibc. Иоганн, как я сказал вчера, я не понимаю, зачем нужен еще один вариант настройки. NATURAL libc для мишеней ARV - это ARV-libc. Мы не должен нуждаться в переключатель для этого. - Габи > > Более того, некоторые спецификации изменены так, что -lm очень похож на > -lgcc, чтобы пользователю не нужно было указывать -lm вручную для основного числа с плавающей запятой > Поддержка преобразования типа int / float.> > Без этого патча компиляции LTO также приводят к снижению производительности > потому что lto добавляет -plugin-opt = -pass-through = -lgcc и т. д. до -lm > указывается пользователем. > > Другие случаи, когда код улучшается, - это программы на C ++, см. PR28718 для > обсуждение. > > > В gcc.dg / fixed-point сбоев меньше, предположительно из-за округления > соответствует ожиданиям тестовых примеров, т.е. ошибок округления нет, так как > упоминается в обзоре PR54222: > http: // gcc.gnu.org/ml/gcc-patches/2012-08/msg01586.html > > Хорошо для установки? > > > Иоганн > > > PR целевой / 54461 > * configure.ac (noconfigdirs, target = avr - * - *): добавить target-newlib, > target-libgloss, если настроено --with-avrlibc. > * configure: Восстановить. > > libgcc / > PR целевой / 54461 > * config.host (tmake_file, host = avr - * - *): добавить avr / t-avrlibc, если > настроен --with-avrlibc. > * config / avr / t-avrlibc: новый файл.> > gcc / > PR целевой / 54461 > * config.gcc (tm_file, target = avr - * - *): добавить avr / avrlibc.h, если > настроен --with-avrlibc. > (tm_defines, target = avr - * - *): добавить WITH_AVRLIBC, если настроено > --with-avrlibc. > * config / avr / avrlibc.h: новый файл. > * config / avr / avr-c.c: Встроенное определение __WITH_AVRLIBC__, если > настроен --with-avrlibc.
ПРОГРАММИРОВАНИЕ И НАСТРОЙКА МИКРОКОНТРОЛЛЕРА AVR Dhananjay V Gadre — Sistemas Embarcados
er уменьшается.Точно так же, когда данные извлекаются из стека, указатель стека становится сначала увеличивается, а затем данные копируются из стека в регистр назначения. Давайте теперь воспользуемся этой информацией о вызове подпрограмм и улучшим наши индикаторы и переключает систему, так что теперь она будет ждать нажатия переключателя, и после того, как переключатель При нажатии загорится соответствующий светодиод и будет ждать следующего переключателя. Если два переключателя- es, затем для той, которая была нажата ранее, светодиод, соответствующий этому переключатель будет гореть.Следующая программа также доступна на компакт-диске в каталоге кода в виде файла newswich.asm. ; newswich.asm ; 4 светодиода на PORTB, 4 переключателя на PORTD ; ПЕРЕКЛЮЧАТЕЛЬ PORTD0 ——-——> Светодиод PORTB0 ; ПЕРЕКЛЮЧАТЕЛЬ PORTD1 ——-——> Светодиод PORTB1 ; ПЕРЕКЛЮЧАТЕЛЬ PORTD2 ——-——> Светодиод PORTB2 ; ПЕРЕКЛЮЧАТЕЛЬ PORTD3 ——-——> Светодиод PORTB3 ; Нажмите переключатель, и загорится соответствующий светодиод. ; нажмите другой переключатель, и первый светодиод погаснет и ; загорится светодиод, соответствующий новому переключателю. 102 ОБОРУДОВАНИЕ И ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ, ВЗАИМОДЕЙСТВИЕ С AVR ; собран с использованием ассемблера Avrasm от Atmel.; следующий файл .inc следует поместить в тот же каталог, что и ; эта программа сборки .include «1200def.inc» .cseg .org 0 rjmp RESET; Ручка сброса rjmp СБРОС rjmp СБРОС СБРОС: ldi r16, 0b11111111; загрузить регистр r16 со всеми единицами out DDRB, r16; настроить ПОРТ B для всех выходов ldi r16, 0b00000000; загрузить регистр r16 всеми нулями out DDRD, r16; настроить PORTD для всех входов ldi r16, 255; все светодиоды выключены из PORTB, r16 loopit: rcall get_switch; вызвать подпрограмму для ; определить, какой переключатель нажат.; подпрограмма возвращает результат ; в регистре r17 out PORTB, r17; вывести значение на PORTB rjmp loopit; получить больше ; ----- —————————————- ; GET_SWITCH: подпрограмма для определения нажатого переключателя. ; включить возвращаемое значение в r17 ; PD0 0b11111110 ; PD1 0b11111101 ; PD2 0b11111011 ; PD3 0b11110111 ; регистры уничтожены: r18, r19 ; вызываемые подпрограммы: delay20ms ; ----- —————————————- get_switch: в r18, PIND; читать буфер PIND andi r18, $ 0F; cpi r18, $ 0F; если ни один переключатель не нажат ; затем вернитесь назад, пока не нажмете breq get_switch cpi r18, 0b00001110; проверка, нажата ли кнопка SW0 brne not_0; если нет, проверьте еще its_0: rjmp next_step not_0: cpi r18, 0b00001101; проверьте, нажат ли SW1 brne not_1; если нет, проверьте еще its_1: rjmp next_step not_1: cpi r18, 0b00001011; проверьте, нажат ли SW2 brne not_2; если нет, проверьте еще its_2: rjmp next_step not_2: cpi r18, 0b00000111; проверка, нажата ли SW3 brne get_switch; если не проблема, вернитесь назад следующий шаг: rcall delay20ms; вызов подпрограммы задержки дребезга waitfor_rel:; теперь подождите, пока переключатель будет в r19, PIND; будет выпущен andi r19, $ 0F; при отпускании переключателя все cpi r19, $ 0F; биты PIND0–3 будут «1» brne waitfor_rel rcall delay20ms; ОК, переключатель отпущен ; разоблачить это mov r17, r18; поместите код переключателя в r17 ori r17, $ F0 ret; и return РАБОТА СТЕКЛА В ПРЕССОРАХ AVR 103 ; ----- ; DELAY20MS: подпрограмма задержки 20 мс ; Частота кристалла 4 МГц ; регистры уничтожены: r21, r20 ; ----- задержка 20 мс: ldi r21, 31 external_loop: ldi r20, 255 inner_loop: нет нет нет нет нет нет нет декабрь r20 brne inner_loop декабрь r21 brne outer_loop Ret 6.4 Реализация Combinational Логика В предыдущей главе мы упоминали, как контроллер можно использовать для реализации простого уравнение комбинационной логики, как показано на рисунке 1.3 в главе 1. На рисунке показаны четыре входа, подключенные к контактам PB0, PB1, PB2 и PB3. Выход- положить схему на вывод PB4. Следующая программа реализует логическое уравнение: Выход = ((/ A * B) + (/ B * A)) * (C * / D) Следующая программа (также доступная на компакт-диске как combi.asm) предназначена только для иллюстрации того, как AVR может использоваться для реализации комбинационной логики.Программа не оптимизирована. Например, требуемый выход требует XOR между двумя входами, что AVR может выполнять. Однако я решил реализовать XOR, используя NOT, AND и OR. инструкции. ; combi.asm .include «1200def.inc» .def A = r16 .def Abar = r17 .def B = r18 .def Bbar = r19 .def C = r20 .def Dbar = r21 .def temp = r22 .cseg .org 0 rjmp RESET; дескриптор сброса СБРОС: ldi temp, 0b00001111; 104 ОБОРУДОВАНИЕ И ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ, ВЗАИМОДЕЙСТВИЕ С AVR out DDRB, temp; PB0-3 - входы ; PB4-7 - выходы loop_here: in temp, PINB; читать выводы PORTB mov A, temp mov Абар, темп com Abar; инвертировать A mov B, temp mov Bbar, temp com Bbar; инвертировать B mov C, temp mov Dbar, temp com Dbar; инвертировать D andi A, 1; изолировать бит для A Энди Абар, 1 год; изолируйте коронку для Абара lsr B; получить вход B в позицию bit0 lsr Bbar lsr C; получить вход C в позицию bit0 lsr C lsr Dbar; получить ввод D в позицию bit0 lsr Dbar lsr Dbar Энди Б, 1 Энди Ббар, 1 andi C, 1 Анди Дбар, 1 и A, Bbar; A = A * Bbar и B, Abar; B = Abar * B и C, Dbar; C = C * Dbar или A, B; A = (A * Bbar) + (Abar * B) и A, C; A = ((A * Bbar) + (Abar * B)) * (C * Dbar) и A, 1 cpi A, 1 breq Its1 cbi PORTB, 4; нет его 0, поэтому сбросьте PB4 rjmp loop_here Its1: sbi PORTB, 4 rjmp loop_here 6.5 Подключение AVR к ПК Последовательный порт Теперь, когда мы написали и протестировали пару программ, пришло время подключить AVR. процессор к ПК. Самый простой порт для подключения на ПК - это последовательный порт RS-232. Ты Возможно, вы захотите подробно ознакомиться с работой порта RS-232, представленной в следующих главах. Многие процессоры AVR оснащены встроенным последовательным портом. На начальном уровне таких процессоров, как AT90S1200, можно создать программный последовательный порт. В этом разделе представлены оба этих метода.Конечно, пользоваться встроенным в последовательный порт процессора AVR с помощью всего нескольких инструкций. Процессор заботится сериализации и сдвига данных на выходном контакте и сборки входящих данных в байт. Пользователь должен установить параметры последовательного порта, такие как скорость передачи (которая указывает количество бит в секунду), количество бит в передаче, количество стоповых бит, и бит четности. Процессор может генерировать большинство стандартных и популярных скоростей передачи с подходящая тактовая частота.ПОДКЛЮЧЕНИЕ AVR К ПОСЛЕДОВАТЕЛЬНОМУ ПОРТУ ПК 105 Последовательный порт AVR нельзя правильно подключить к последовательному порту ПК. RS- 232 сигналы биполярны и находятся в диапазоне от 12 В до 12 В, тогда как АРН может только обрабатывать dle сигналы уровня ТТЛ (при питании от сети ± 5 В). Кроме того, данные, отображаемые на RS- 232 строка перевернута. То есть, когда ПК хочет отправить логический «0», напряжение на линия RS-232 составляет ± 12 В, и когда ПК хочет отправить логическую «1», линейное напряжение составляет �12 В.Итак, какой-то драйвер линии RS-232 и приемник, который преобразует уровень сигнала RS-232. els в TTL и наоборот. Также необходимо выполнение инверсии сигнала. Очень популярный драйвер и приемник линии RS-232, который я часто использовал, - это MAX232. от Maxim, а также ADM232, совместимый по выводам, от Analog Devices. Схема Схема интерфейса RS-232 проиллюстрирована на Рисунке 6.19, который появится позже в этом разделе. глава. В следующем фрагменте кода показано, как настроить встроенный последовательный порт (называемый UART в таблицах данных AVR) процессоров AVR.