Микроконтроллер AT91SAM7S256 — Быстрое обучение на примерах.-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Микроконтроллер AT91SAM7S256 — Быстрое обучение на примерах.

 

 

 

HOWTO — Быстрое обучение на примерах. @ On-Line документ.

 

 

 

 

 

 

Приходько С.Г. Харьков, 2006г. (с) veter

 

Оригинал документа всегда доступен по адресу – http://www.projects.org.ua

Документ обновляется по мере возможностей.


 

 

Содержание

 

 

Введение. 4

Список сокращений используемых в данном документе. 5

1.     Описание микроконтроллера —  AT91SAM7S256. 7

1.1       Основные функциональные возможности МК: 7

1.2       Общее описание: 10

1.3       Функциональные блоки МК, их назначение. 11

1.4       Структурная схема AT91SAM7S256/128/64/321: 12

1.5       Структурная схема AT91SAM7S32: 13

1.6       Архитектура ядра ARM7TDMI 14

Сжатие инструкций. 14

Набор инструкций Thumb. 14

1.6.1        Краткая характеристика ядра ARM7TDMI 15

Конвейер инструкций. 15

Доступ к памяти. 16

Интерфейс памяти. 16

Логика EmbeddedICE. 17

Типы данных. 17

Форматы памяти. 17

Прямой порядок (Little-endian) 18

Обратный порядок (Big-Endian) 18

1.6.2        Режимы работы.. 18

1.6.3        Сброс. 19

1.7       Flash-память. 20

1.8       Периферийный контроллер прямого доступа к памяти (Peripheral Data Controller, PDC) 21

1.9       Интерфейс USB.. 22

1.10     Аналогово-цифровой преобразователь. 23

1.11     Широтно-импульсный модулятор (ШИМ, PWM) 25

1.12     Энергопотребление. 26

1      Блок PIOA.. 28

2.1 Пример: 28

2.2 Пример — мигание светодиодами. 29

2.2.1 Заметка. 29

2      Блок PMC.. 30

3.1.1 Заметка. 30

3      Блок AIC.. 31

4      Блок DBGU.. 33

5.1 Программирования МК из Linux: 33

6. Инициализация. 34

6.1 Инициализация DBGU.. 34

6.2 Пример: 34

6.2.1 Заметка. 34

7. Блок WDT. 34

8. Сборка макетной платы для МК AT91SAM7S256. 35

8.1 Выводы питания. 35

8.2 Выводы тактирования МК.. 39

8.2.1 Заметка. 40

9. Компилятор. 41

9.1 GCC – параметры и ключи компилятора. 41

9.1.1 Пример файла —  Makefile. 41

9.2 Использование прерывания. 43

9.2.1 Включение прерывания таймера. 44

9.2.2 Заметка. 44

9.2.2 Пример использования прерывания. 45

 

 


 

Введение

 

Компания Atmel представляет первое семейство микроконтроллеров, выполненных на основе ядра ARM7, по самым низким ценам среди известных аналогов и ориентированные на обновление 8-разр. проектов. AT91SAM7S32 и AT91SAM7S64 — первые представители серии ARM7-микроконтроллеров с малым числом выводов (серия SAM7S) с размером флэш-памяти: 32 кбайт и 64 кбайт, соответственно. Версии с размером памяти 128 кбайт и 256 кбайт T91SAM7S128 и AT91SAM7S256, соответственно, станут, доступны в конце текущего года.

Помимо скачка в производительности по сравнению с 8-разр. микроконтроллерами они являются первыми 32-разр. микроконтроллерами, которые интегрируют полный набор функций защиты, в т.ч. сторожевой таймер, тактируемый встроенным RC-генератором, контроль напряжения питания и аппаратная защита флэш-памяти. Микроконтроллеры AT91SAM7 поддерживаются недорогими отладочными средствами, перенося возможности 32-разр. обработки информации в реальном времени в чувствительные к стоимости приложения, функциональные возможности которых сдерживались возможностями 8-разр. микроконтроллеров.

Серия AT91SAM7S за счет перехода с 8-разр. на 32-разр. архитектуру позволит

улучшить характеристики реально-временных приложений. Производительность выполнения однотактных инструкции из встроенной флэш-памяти составляет 27 млн. операции в секунду. Модернизированный контроллер прерываний усиливает возможности прерываний процессора ARM7 и позволит работать по векторам прерываний при минимальном количестве тактов выполнения инструкций. Аппаратная установка/сброс бит регистров допускает однотактную манипуляцию над битом, устраняя потребность маскирования в последовательности чтение-модификация-запись.

К типичным сферам применения микроконтроллеров серии AT91SAM7S относятся: управление приборами, измерительные устройства, системы обеспечения безопасности, регистраторы информации, мобильные телефоны с USB-портом, а также аксессуары ПК.

Яко Вилбринк, директор по ARM-продукции компании Atmel прокомментировал:

«Серия SAM7S является первым изделием из существующего семейства

ARM-микроконтроллеров, которое заполняет брешь между стоимостью 8-разр.

микроконтроллеров и производительностью 32-разр. микроконтроллеров. Они

обеспечивают простоту и скорость проектирования приложений с превосходными

характеристиками и безопасностью при очень малых затратах».

AT91SAM7S32 выпускается в 48-выв. корпусе LQFP, а AT91SAM7S64 в 64-выв.

LQFP и при покупке 10 тыс. штук стоят, соответственно, 2.90 и 4.05 долл.США.

На самом же деле, ARM микроконтроллеры производят много фирм, такие как ATMEL, PHILIPS, INTEL, ANALOG DEVICE, SIEMENS, и еще много тех производителей которые менее известны.

Данный документ позволяет с минимальными затратами на изучение – понять что к чему в данном микроконтроллере и как с ним можно работать.

Здесь приведен пример работы с микроконтроллером под ОС Linux. В качестве дистрибутива тест производился на DeepStyle 1.0 rc1 и Debian Sarge RC1.

Список сокращений используемых в данном документе

Данные сокращения или слова часто встречаются в этом документе, для понимания приводится пояснение к некоторым сокращениям или словам.

AT91SAM7S256 — микроконтроллер, который описывается в данном документе

МКAT91SAM7S256 – ( микроконтроллер )

Вывод — физический вывод МК

Входвывод сконфигурированный на вход

Выходвывод сконфигурированный на выход

ШИМ — широтно-импульсная модуляция

OS Linux — операционная система Linux

Datasheet — документ на изделие, в данном случае — описывающий МК

Minicom — терминальная программа в OS Linux

 

При написании документа использовались документы

http://www.gaw.ru/html.cgi/txt/ic/Atmel/micros/arm/AT91SAM7S32_321_64_128_256.htm

 

рекомендуется для ознакомления

http://www.gaw.ru/pdf/Atmel/ARM/AT91SAM7S256_128_64_321_32.pdf

6138 Kb Engl Полное описание микроконтроллера AT91SAM7S32, AT91SAM7S321, AT91SAM7S64, AT91SAM7S128, AT91SAM7S256

 

http://www.gaw.ru/pdf/Atmel/ARM/AT91_Third_Party_Development_Tools_Catalog.pdf

1761 Kb Engl AT91 Third Party Development Tools Catalog

 

http://www.gaw.ru/html.cgi/txt/doc/micros/arm/index.htm

— Rus Архитектура и система команд

 

http://www.efo.ru/doc/Atmel/Atmel.pl?2199

 


Примеры программ

Для упрощения задач разработки ПО предлагаются примеры базовых программ. Последние версии примеров программ можно найти по адресу www.at91.com, либо на файловом сервере пользователей AT91.

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

Полезные ссылки

1.   Описание микроконтроллера —  AT91SAM7S256

 

 

ARM (Advansed RISC Mashine) Микроконтроллер представляет из себя систему

аппаратных блоков и периферии управляемую ядром ARM. Шина микроконтроллера,

внешняя и внутренняя, имеет разрядность 32 бита. Полное описание на МК имеется

в datasheet на него и приобрести его можно с сайта производителя, называется

— «doc6175.pdf», 544 страницы.

1.1   Основные функциональные возможности МК:

Отличительные особенности:

Содержит процессор ARM7TDMI ARM Thumb

— Высокоэффективная 32-разрядная RISC-архитектура

— Высокоплотный набор 16-разрядных инструкций

— Лидер по соотношению производительность/потребление

— Встроенное ядро внутрисхемной эмуляции, поддержка отладочного коммуникационного канала

Внутренняя высокоскоростная флэш-память

— 256 кбайт, 1024 страницы по 256 байт (AT91SAM7S256)

— 128 кбайт, 512 страниц по 256 байт (AT91SAM7S128)

— 64 кбайт, 512 страниц по 128 байт (AT91SAM7S64)

— 32 кбайт, 256 страниц по 128 байт (AT91SAM7S321/32)

— однотактный доступ при частоте до 30 МГц при наихудших условиях

— буфер упреждающей выборки для оптимизации выполнения Thumb-инструкций на максимальной тактовой частоте

— длительность программирования страницы 6 мс, в т.ч. автоматическое стирание страницы, время полного стирания: 15 мс

— 10 тысяч циклов записи, сохранность данных в течение 10 лет, возможность блокировки секторов, бит защиты флэш-памяти

— интерфейс быстрого программирования флэш-памяти для высокосерийного производства

Внутреннее высокоскоростное статическое ОЗУ, однотактный доступ при максимальном быстродействии

— 64 кбайт (AT91SAM7S256)

— 32 кбайт (AT91SAM7S128)

— 16 кбайт (AT91SAM7S64)

— 8 кбайт (AT91SAM7S321/32)

Контроллер памяти (MC)

— Контроллер встроенной флэш-памяти, информирование об аварийном прекращении операции и детекция отклонений

Контроллер сброса (RSTC) -сброс при подаче питания и сброс при снижении напряжения ниже откалиброванного на стадии производства порога

— обработка внешнего сигнала сброса и формирование информации об источнике сброса

Тактовый генератор (CKGR)

— маломощный RC-генератор, встроенный генератор 3..20 МГц и одна схема ФАПЧ

Контроллер управления потреблением (PMC)

— возможность программной оптимизации потребления путем снижения тактовой частоты до 500 Гц и перевода в режим холостого хода

— три программируемых внешних тактовых сигнала

Расширенный контроллер прерываний (AIC)

— индивидуально-маскируемые векторизованные источники прерываний с 8-уровнями приоритетов

— два (AT91SAM7S256/128/64/321) или одно (AT91SAM7S32) внешнее прерывание и один источник быстродействующего прерывания, защита от ложных прерываний

Блок отладки (DBGU)

— 2-проводной УАПП и поддержка прерывания по отладочному каналу, программируемое предотвращение доступа со стороны ВСЭ

Таймер периодических интервалов (PIT) >

— 20-разрядный программируемый счетчик + 12-разрядный счетчик интервалов

Сторожевой таймер с оконной организацией (WDT)

— Программируемый счетчик, защищенный 12-разрядным ключом

— Формирует сигналы прерывания или сброса

— Счетчик может быть остановлен, когда процессор находится в состоянии отладки или режиме холостого хода

Таймер реального времени (RTT)

— 32-разрядный циклический счетчик с сигнализацией

— Работа от встроенного RC-генератора

Один контроллер параллельного ввода-вывода (PIOA)

— 32 (AT91SAM7S256/128/64/321) или 21 (AT91SAM7S32) программируемые линии ввода-вывода, мультиплексируемых с 2 периферийными устройствами ввода-вывода

— поддержка прерывания по изменению состояния на каждой линии ввода-вывода

— возможность раздельной программной конфигурации: открытый сток, подтягивающий резистор и синхронизированный выход

11 (AT91SAM7S256/128/64/321) или 9 (AT91SAM7S32) каналов контроллера прямого доступа к памяти (ПДП) периферийных устройств

Один полноскоростной порт устройства USB 2.0 (12 Мбит/сек) (за исключением AT91SAM7S32).

— встроенный трансивер, интегрированные конфигурируемые буферы FIFO размером 328 байт

Один синхронизированный последовательный контроллер (SSC)

— раздельные сигналы тактирования и синхронизации посылки для каждого приемника и передатчика

— поддержка аналогового интерфейса I?S, поддержка мультиплексирования с разделением по времени

— высокоскоростной непрерывный поток данных с 32-разрядным форматом данных

Два (AT91SAM7S256/128/64/321) или один (AT91SAM7S32) универсальный синхронный/асинхронный приемо-передатчик (УСАПП)

— раздельные генераторы скорости связи, инфракрасная модуляция/демодуляция IrDA

— поддержка смарт-карт ISO7816 T0/T1, аппаратное подтверждение установления связи, поддержка RS485

— кодер/декодер Манчестер-кода (AT91SAM7S256/128)

— полный модемный интерфейс у УСАПП1 (AT91SAM7S256/128/64/321)

Один последовательный интерфейс SPI с поддержкой ведущего/подчиненного режимов

— программируемая длина данных 8-16 бит, четыре выхода выбора микросхем

Один трехканальный (AT91SAM7S256/128/64/321) или два двухканальных (AT91SAM7S32) 16-разрядных таймер-счетчика (TC)

— Три (AT91SAM7S256/128/64/321) или один (AT91SAM7S32) входы/вход внешней синхронизации, две линии ввода-вывода общего назначения на каждый канал

— Два ШИМ-генератора, режим захвата, прямой/обратный счет

Один четырехканальный 16-разрядный ШИМ-контроллер (PWMC)

Один двухпроводной интерфейс (TWI)

— поддержка только ведущего режима, поддерживаются все двухпроводные последовательные ЭСППЗУ компании Atmel

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

Загрузочный помощник SAM-BA™

— загрузочная программа по умолчанию

— интерфейс с графическим пользовательским интерфейсом SAM-BA

Граничное сканирование в соответствии со стандартом IEEE 1149.1 JTAG на всех цифровых линиях ввода-вывода

Ввод-вывод, совместимый 5В-ыми уровнями, в т.ч. 4 сильноточных выхода с нагрузочной способностью каждого до 16 мА

Источники питания

— Встроенный стабилизатор 1.8В/100 мА для питания ядра и внешних компонентов

— Питания линий ввода-вывода 3.3В или 1.8В (VDDIO), отдельное питание 3.3В флэш-памяти VDDFLASH

— Напряжение питания ядра VDD=1.8В с учетом работы детектора снижения питания

Полностью статическая работа в диапазоне частот до 55 МГц при наихудших рабочих условиях (напряжение питания 1.65В и температура +85°C)

Выпускается в 64-выводных (AT91SAM7S256/128/64/321) и 48-выводных (AT91SAM7S32) экологически безопасных корпусах LQFP

Функциональные блоки микроконтроллеров AT91SAM7S

В отличие от традиционных 32-разрядных микроконтроллеров, для AT91SAM7S характерна высокая интеграция блоков и компонентов на кристалле. Примером показателя высокой интеграции является тот факт, что для «обвязки» микроконтроллера достаточно всего 20 внешних компонентов:

  • стабилизатор на 3.3 Вольта;
  • 2 конденсатора и 1 резистор для фильтра ФАПЧ;
  • 2 конденсатора и 1 кварц для высокочастотного тактового генератора;
  • 13 развязывающих конденсаторов.


1.2   Общее описание:

AT91SAM7S — серия флэш-микроконтроллеров с малым количеством выводов, выполненных на основе 32-разрядного процессора ARM с архитектурой RISC. Они содержат высокобыстродействующие флэш-память и статическое ОЗУ, большой набор периферийных устройств, в т.ч. порт устройства USB 2.0 (за исключением AT91SAM7S32) и полный набор системных функций минимизируют число внешних компонентов.

Микроконтроллеры идеальны для перевода существующих приложений на основе 8-разрядных микроконтроллеров к 32-разрядной архитектуре с целью улучшения рабочих характеристик и расширения памяти.

Встроенная флэш-память может программироваться внутрисистемно через интерфейс JTAG-ICE или через параллельный интерфейс с помощью производственного программатора, что выполняется перед монтажом на плату. Встроенные биты блокировки и бит защиты позволяют защитить прошивку микроконтроллера от несанкционированной перезаписи или хищения.

В состав системного контроллера микроконтроллеров AT91SAM7S входит контроллер сброса, который управляет последовательностью действий при подаче питания микроконтроллера и всей системы. Контроль за корректностью работы микроконтроллера выполняют детектор снижения напряжения питания и сторожевой таймер, тактируемый встроенным RC-генератором.

AT91SAM7S — серия микроконтроллеров общего назначения. Интегрирование порта USB-устройства делает привлекательным применение данных микроконтроллеров в периферийных устройствах, требующих подключение к ПК или сотовому телефону. Привлекательная стоимость и высокая степень интеграции микроконтроллеров позволяет их использовать в чувствительных к стоимости приложениях с высокой серийностью.

Микроконтроллеры AT91SAM7S256, AT91SAM7S128, AT91SAM7S64, AT91SAM7S321 и AT91SAM7S32 отличаются размером памяти, набором периферийных устройств и корпусами (см. информацию для заказа).

За исключением AT91SAM7S32, все остальные микроконтроллеры AT91SAM7S совместимы по посадочному месту и расположению выводов.

Рисунок 1  —  структурная схема МК и ее функциональные блоки.

1.3   Функциональные блоки МК, их назначение.

PIOA           — параллельная шина В/В, 32 бита, конфигурируемый каждый вывод

PMC             — менеджер источников тактирования

AIC             — расширенный контроллер прерываний

DBGU          — дебаг-юнит + посл. порт USART

USART0       — посл. порт 0

USART1       — посл. порт 1

SPI              — посл. Шина SPI

ADC            — аналого-цифровой преобразователь (10бит/8портов)

PMWC          — ШИМ контроллер

SSC             — последовательный синхронный порт

TC               — таймер

TWI             — 2-х проводный интерфейс (I2C)

Std.perif       — PIT,WDT, RTT, etc

1.4   Структурная схема AT91SAM7S256/128/64/321:

1.5   Структурная схема AT91SAM7S32:


1.6   Архитектура ядра ARM7TDMI

Процессор ARM7TDMI поддерживает два набора инструкций:

  • 32-разрядный набор инструкций ARM;
  • 16-разрядный набор инструкций Thumb.

Процессор ARM7TDMI является разновидностью архитектуры ARMv4T. Более детально о наборах инструкций ARM и Thumb можно узнать в «ARM Architecture Reference Manual» (справочное руководство по архитектуре ARM).

В данном разделе описывается:

  • Сжатие инструкций;
  • Набор инструкций Thumb.

Сжатие инструкций

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

Thumb реализует 16-разрядный набор инструкций в составе 32-разрядной архитектуры, который обеспечивает:

  • более высокую производительность по сравнению с 16-разрядной архитектурой
  • более высокую плотность кода по сравнению с 32-разрядной архитектурой.

Набор инструкций Thumb

Набор инструкций Thumb является выборкой наиболее часто используемых 32-разрядных инструкций ARM. Thumb-инструкции характеризуются размером 16 бит и имеют соответствующую 32-разрядную инструкцию ARM. Соответствующие инструкции оказывают одинаковое влияние на модель процессора. Thumb-инструкции работают со стандартной конфигурацией ARM-регистра, обеспечивая превосходное взаимодействие между состояниями ARM и Thumb.

В процессе выполнения 16-разрядная инструкция подвергается декомпрессии в реальном времени до полных 32-разрядных инструкций ARM без потери производительности.

Thumb наследует все преимущества 32-разрядного ядра:

  • 32-разрядное адресное пространство
  • 32-разрядные регистры
  • 32-разрядное сдвиговое устройство и арифметико-логического устройство (АЛУ)
  • Пересылка в память 32-разрядных данных.

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

Код Thumb обычно занимает 65% от ARM-кода и достигает 160% производительности ARM-кода при исполнении из 16-разрядной системы памяти. Следовательно, Thumb, делает ядро ARM7TDMI идеально подходящим во встраиваемые приложения, где в качестве критичных параметров выступают плотность кода и габариты.

Доступность обоих наборов инструкций, 16-разрядного Thumb и 32-разрядного ARM, дает разработчикам гибкость по оптимизации быстродействия или размера кода на уровне процедуры в соответствии с требованиями к их приложению. Например, критические циклы в таких приложениях, как обработка часто возникающих прерываний и алгоритмы цифровой обработки сигналов, могут кодироваться с помощью полных ARM-инструкций, а затем линкована Thumb-кодом.

1.6.1      Краткая характеристика ядра ARM7TDMI

Ядро ARM7TDMI — представитель семейства ARM 32-разрядных микропроцессоров общего назначения. Семейство ARM характеризуется высокой производительностью при очень низком уровне потребления и малых размерах.

Архитектура ARM выполнена на основе принципов RISC (компьютер с сокращенным набором инструкций). Набор инструкций RISC и связанный с ним механизм дешифрации является более простым по сравнению CISC-архитектурой (компьютер со сложным набором инструкций). За счет этого достигается:

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

Конвейер инструкций

Для ускорения потока инструкций, поступающего к процессору, в ядре ARM7TDMI используется конвейер. Он позволяет выполнять несколько операций одновременно, а также обеспечивает постоянство работы системы памяти и обработки. Используется трехступенчатая конвейеризация, т.к. инструкции выполняются в три этапа:

  • Выборка
  • Дешифрация
  • Исполнение.

Конвейер инструкций показан на рисунке 1.1.

Рисунок 1.1. Конвейер инструкций

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

Счетчик программы указывает на загружаемую из памяти инструкцию, а не на исполняемую инструкцию. Это важно знать, т.к. значение счетчика программы (PC), которое используется при выполнении инструкции, всегда на две инструкции опережает адрес.

Доступ к памяти

Ядро ARM7TDMI использует фон-неймановскую архитектуру доступа к памяти с одной 32-разрядной шиной данных, по которой передаются как инструкции, так и данные. Доступ к данным к памяти могут осуществлять только инструкции чтения, записи и обмена. В качестве данных могут выступать:

  • 8 бит (байт);
  • 16 бит (полуслово);
  • 32 бит (слово).

Слова должны быть выровнены к 4-байтным границам, а полуслова — к 2-байтным.

Интерфейс памяти

При разработке интерфейса памяти процессора ARM7TDMI стояла задача максимально полностью использовать потенциал по быстродействию и при этом минимизировать использование памяти. Чтобы обеспечить возможность реализации функций системного управления на основе стандартной маломощной логики критичные к быстродействию сигналы управления были конвейеризованы. Данные сигналы управления упрощают использование быстродействующих пакетных режимов передачи, которые используются большинством встроенной и внешней технологий памяти.

Ядро ARM7TDMI поддерживает четыре основных цикла доступа к памяти:

  • холостой цикл
  • непоследовательный цикл
  • последовательный цикл
  • цикл передачи регистра сопроцессора.

Логика EmbeddedICE

Логика EmbeddedICE — вспомогательный аппаратный блок, который делает ARM-процессоры отлаживаемыми и существенно облегчает процесс отладки. Он позволяет с помощью программных инструментальных средств отлаживать программный код, который исполняется целевым процессором. Логика EmbeddedICE управляется через порт JTAG с использованием интерфейса EmbeddedICE. Более подробная информация по встроенной отладке приведена в разделе 5 «Интерфейс отладки» и приложении Б «Детальное описание отладки».

Типы данных

Процессор ARM7TDMI поддерживает следующие типы данных:

  • слова: 32 бит;
  • полуслова: 16 бит;
  • байты: 8 бит.

Их необходимо выровнять следующим образом:

  • Значения слов необходимо выровнять в пределах 4 байт
  • Значения полуслов необходимо выровнять в пределах 2 байт
  • Значения байт могут располагаться в любых пределах байта.

Прим.: системы памяти, как правило, поддерживают все типы данных. В частности, система должна поддерживать запись подслов без повреждения смежных байт в слове.

Форматы памяти

Процессор ARM7TDMI рассматривает память, как линейную совокупность байт, пронумерованных в возрастающем порядке, начиная с 0. Например,

  • байты 0..3 представляют первое записанное слово;
  • байты 4…7 представляют второе записанное слово.

Процессор ARM7TDMI поддерживает оба порядка следования байт многобайтных слов в памяти:

  • Прямой порядок байт (Little-endian), когда сначала следует младший, а затем старший байты.
  • Обратный порядок байт (Big-Endian), когда сначала следует старший, а затем младший байты.

Прим.: по умолчанию у ARM-процессоров используется прямой порядок байт (Little-endian).

Формат следования байт ЦПУ указывает, где в слове размещается старший значащий байт или разряд. Поскольку при запуске ЦПУ значения вычисляются, начиная с младших значащих разрядов, то прямой порядок устанавливается автоматически.

Конфигурация порядка следования байт не зависит от типа хранимых данных (слова, полуслова или байты).

Прямой порядок (Little-endian)

В формате прямого порядка, байт с наименьшим адресом в слове рассматривается как младший значащий байт слова, а байт с наибольшим адресом — старший значащий байт. Т.о., байт по адресу 0 системы памяти соединяет с линиями данных 7…0. На рисунке 2.1 показывается, как слово по адресу А, полуслова по адресам А и А+2, а также байты по адресам А, А+1, А+2, А+3 соотносятся между собой при конфигурации ядра к прямому порядку.
Рисунок 2.1. Адреса байт и полуслов в слове при прямом порядке (Little-endian)

Обратный порядок (Big-Endian)

В формате обратного порядка, процессор ARM7TDMI запоминает старший значащий байт слова в позиции байта с наименьшим порядковым номером, а младший байт — в позиции байта с наибольшим порядковым номером. Т.о., байт по адресу 0 системы памяти связан с линиями данных 31..24.

На рисунке 2.2 показывается, как слово по адресу А, полуслова по адресам А и А+2, а также байты по адресам А, А+1, А+2, А+3 соотносятся между собой при конфигурации ядра к обратному порядку.
Рисунок 2.2. Адреса байт и полуслов в слове при обратном порядке (Big-endian)

1.6.2      Режимы работы

Процессор ARM7TDMI поддерживает семь режимов работы:

  1. Режим пользователя — обычное состояние ARM при выполнении программы, также используется для выполнения большинства прикладных программ.
  2. Режим быстрого прерывания (FIQ), который поддерживает передачу данных или обработку канала.
  3. Режим прерывания (IRQ), который используется для обработки прерываний общего назначения.
  4. Супервизорный режим, который является защищенным режимом для операционной системы.
  5. Аварийный режим, который вводится после аварийной выборки данных или инструкции.
  6. Системный режим — привилегированный режим пользователя для операционной системы.

Прим.: Вы можете вводить системный режим из другого привилегированного режима только путем изменения бита режима в регистре текущего состояния программы (CPSR).

  1. Неопределенный режим вводится, когда выполняется неопределенная инструкция.

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

Каждый регистр имеет идентификатор режима (см. таблицу 2.1).

Таблица 2.1. Идентификаторы режима

Режим Идентификатор режима
Режим пользователя usr
Режим быстрого прерывания fiq
Режим прерывания irq
Режим супервизора svc
Аварийный режим abt
Системный режим sys
Неопределенный режим und

1.6.3      Сброс

Если сигнал на входе nRESET принимает низкий уровень, то возникает сброс и ядро ARM7TDMI прекращает выполнение инструкции и продолжает инкрементировать шину адреса, как при выборке слов или полуслов инструкций. nMREQ и SEQ индицируют о внутренних циклах в течение этого времени

Если nRESET переходит опять в высокое состояние, то процессор ARM7TDMI выполняет следующие действия:

  1. Перезапись R14_svc и SPSR_svc путем копирования в них текущих значений PC и CPSR. Значения PC и CPSR являются неопределенными.
  2. Принудительная установка значения M[4:0] равного b10011, супервизорный режим, установка бит I и F, а также сброс бита T в регистре CPSR.
  3. Установка PC для выборки следующей инструкции по адресу 0x00.
  4. Возвращение к состоянию ARM, если необходимо, и восстановление выполнения.

После сброса значения всех регистров, кроме PC и CPSR, являются неопределенными.

Более подробная информация приведена в разделе «Последовательность сброса после подачи питания».

1.7   Flash-память

Контроллер Flash-памяти микроконтроллера

  • обеспечивает работу ядра с Flash-памятью;
  • позволяет увеличить производительность микроконтроллера при использовании 16-разрядного набора команд Thumb;
  • осуществляет функции чтения и записи, установки и снятия битов защиты блоков памяти от случайного и несанкционированного чтения.

Быстродействующая Flash-память позволяет достигать производительности

  • без циклов ожидания на тактовой частоте 30 МГц
    • до 27 MIPS с использованием набора команд ARM;
    • до 21 MIPS c использованием набора команд Thumb;
  • с одним циклом ожидания на тактовой частоте 50 МГц
    • до 24 MIPS с использованием набора команд ARM;
    • до 38 MIPS c использованием набора команд Thumb (с использованием кэширования).

При выполнении команд из оперативной памяти можно увеличить производительность микроконтроллера до 50 MIPS.

Flash-память микроконтроллеров разбита на страницы по 128 Байт и зоны по 4кБайта. Запись во Flash-память производится постранично.

Записанная во Flash-память программа может быть защищена от несанкционированного либо случайного считывания или стирания установкой lock-битов. Lock-биты осуществляют защиту памяти по зонам. Например, Flash-память микроконтроллера объемом 64 кБайта разбита на 16 зон, для каждой из которых можно установить индивидуальный бит защиты.

Стирание Flash-памяти может производиться постранично перед записью страницы (2мс/стр.) или полностью всей памяти (10 мс).

С целью защиты интеллектуальной собственности можно запретить доступ (считывание и запись) к Flash-памяти из внешнего мира по интерфейсам внутрисхемного программирования и интерфейсу FFPI установкой Security Fuse бита. При установке данного бита доступ к содержимому Flash-памяти по интерфейсам внутрисхемного программирования и интерфейсу FFPI можно будет осуществить только после полного стирания данных с использованием внешнего вывода Erase.

Программирование Flash-памяти может производиться внутрисхемно без использования программатора, а при помощи встроенного загрузчика SAM-BA, осуществляющего программирование по имеющимся на кристалле интерфейсам USB либо DBGU (Debug UART).

1.8   Периферийный контроллер прямого доступа к памяти (Peripheral Data Controller, PDC)

Для обмена данными между оперативной памятью и периферией в микроконтроллеры AT91SAM7S включен периферийный контроллер PDC.

Контроллер

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

Каждый периферийный узел содержит регистры контроллера PDC:

  • автоинкрементируемый 32-битный указатель на текущий адрес памяти;
  • автодекрементируемый 16-битный счетчик объема переданных данных (максимальный объем переданных данных за одну сессию 64 кБайта);
  • автоинкрементируемый 32-битный указатель на адрес памяти для следующего этапа передачи данных;
  • автодекрементируемый 16-битный счетчик объема данных, необходимых для передачи данных на следующем этапе.

Обмен осуществляется блоками данных по 8, 16 или 32 бита.

1.9   Интерфейс USB

Контроллер USB-интерфейса микроконтроллеров AT91SAM7S

  • содержит интегрированный приемопередатчик, соответствующий спецификации шины USB V2.0 (full-speed);
  • содержит FIFO — буфер объемом 328 Байт;
  • поддерживает одновременную работу с 4-мя устройствами.

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

Для того, чтобы «заложить» наличие интерфейса USB в разрабатываемом устройстве, необходимо всего 6 внешних компонентов.
Рис.4 Схема включения интерфейса USB
Рис.5 Набор внешних компонентов для подключения USB-интерфейса микроконтроллера

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

1.10                Аналогово-цифровой преобразователь

Микроконтроллеры AT91SAM7S содержат аналогово-цифровой преобразователь (АЦП), который

  • работает в двух режимах разрешающей способности 8 и 10 бит;
  • имеет 8 входных каналов (4 отдельных и 4 мультиплексированных с линиями ввода/вывода общего назначения);
  • обеспечивает частоту дискретизации до 384 ksps;
  • поддерживается контроллером PDC.

Запуск преобразования может быть осуществлен различными способами (см. рис. 6)
Рис.6 Схема запуска преобразования АЦП

После запуска преобразования может быть выполнено:

  • преобразование сигнала с одного канала (указанного в регистре ADC_CHER);
  • последовательное преобразование сигналов с выбранных (указанных в регистре ADC_CHER) каналов.

АЦП поддерживает следующие режимы работы:

  • одиночное преобразование;
  • последовательное преобразование сигналов со всех каналов по каждому сигналу запуска;
  • непрерывный режим преобразования преобразование сигнала с одного и всех каналов;
  • энергосберегающий.

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

Рис.7 Схема чтения результата преобразования АЦП

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

Питание АЦП осуществляется от 3.3-вольтовой линии питания VDDIN, и в момент преобразования ток потребления составляет 1мА. Для снижения энергопотребления в период между преобразованиями в АЦП предусмотрен режим энергосбережения (sleep mode), ток потребления АЦП в котором не превышает 1мкА.

В качестве источника опорного напряжения предполагается использование внешнего источника напряжением от 2.6 Вольт до значения VDDIN.

1.11                Широтно-импульсный модулятор (ШИМ, PWM)

Контроллер ШИМ микроконтроллеров AT91SAM7S включает 4 независимых канала для генерации широтно-модулированных сигналов.

Контроллер ШИМ позволяет

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

Рис.8 Генерация ШИМ-сигнала без перекрытия на двух каналах

Блок ШИМ можно разбить на 2 части:

  1. Контроллер блока ШИМ:

а) генератор тактового сигнала -> генерация двух независимых тактовых сигналов clkA и clkB, а также сигналов кратных 2n, где n — целое число 1..10;

б) управление каналами -> включение/выключение канала;

в) управление прерываниями -> разрешение/запрещение прерываний.

  1. Модули каналов

а) выбор источника тактового сигнала;

б) выбор режима работы канала (форматирование импульсов по левому краю, правому краю и по центру);

в) управление параметрами частоты и скважности сигнала;

г) счет импульсов;

д) синхронное изменение формы выходных сигналов (регистр PWM_CUPD) при установке новых параметров сигнала.

Выходные сигналы ШИМ в режиме PIOA (2 режима включения периферии на внешние выводы — PIOA и PIOB) мультиплексированы с внешними выводами PA0, PA1 и PA2, имеющими удвоенную нагрузочную способность, что позволяет осуществлять подключение внешних цепей с током нагрузки до 16 мА.

1.12                Энергопотребление

Микроконтроллеры AT91SAM7S содержат контроллер управления питанием (Power Management Controller, PMC), выполняющий следующие функции:

  • распределение тактовой частоты на ядро и периферийные модули;
  • управление значениями частот;
  • вывод тактовой частоты к внешним блокам (линии PCK).

Главным достоинством контроллера управления питанием является возможность гибкого управления характеристиками энергопотребления при различных конфигурациях рабочей частоты ядра и периферии:

  • 32 мА — тактовая частота периферии и ядра 55 МГц;
  • 21 мА — периферия остановлена, тактовая частота ядра 55 МГц;
  • 11 мА — ядро остановлено, тактовая частота периферии 55 МГц, вся периферия включена;
  • 36 мкА — работа от внутреннего RC-генератора на частоте 32 кГц, периферия остановлена;
  • 2.7 мкА — Работа от внутреннего RC-генератора на частоте 500 Гц (максимальные значения делителей), периферия остановлена.

Управление частотами позволяет выключать неиспользуемую периферию на различные промежутки времени (Рис.9).

Рис.9 Схема управления и распределение тактовой частоты.

При работе от внутреннего тактового RC-генератора тактовая частота может варьироваться в пределах от 22 до 42 кГц.

Для внешнего высокочастотного генератора может быть использован кварцевый резонатор с частотой от 3 до 20 МГц. При использовании кварца с частотой менее 8 МГц необходимо добавить резистор на 1 кОм, включенный последовательно в цепь XOUT.

Далее для повышения тактовой частоты необходимо сконфигурировать блок ФАПЧ (рис.xxx). Для расчета номиналов внешних элементов фильтра можно использовать программу «PLL Filter Calculator», распространяемую свободно.

Рис.10 Схема включения внешних элементов фильтра ФАПЧ.

В случае отказа внешнего высокочастотного тактового генератора микроконтроллер автоматически переключается на тактирование от внутреннего RC-генератора.


1        Блок PIOA

PIOA – единый порт МК имеющий 32 вывода.

Для работы с МК на уровне логических сигналов, происходит общение с 32-битным портом, который в свою очередь мультиплексируется на каждом выводе в функциональном внутренним блоком МК.

Каждый вывод можно с конфигурировать как:

– вход

– выход

– отключить

– выводной периферийного блока A

– выводной периферийного блока B

– с подтягивающим R на VCC

– с Glitch (фильтр дребезга контактов)

Чтобы произвести запись-чтение в вывод порта, необходимо его предварительно инициализировать (указать направление, связь с внутренней периферией, включить в работу с нужным выводом других блоков, например PMC, USART, AIC и т.д. ). Только после инициализации с выводом можно работать. Если нужно изменить конфигурацию, то необходимо его вновь инициализировать.

Для работы с любым выводом настроенным на вход или выход – необходимо работать регистром PIOA. В регистр PIOA, по маске, в вывод записывается 1 или 0 в зависимости от нужного результата.

Чтобы записывать в вывод значение “0” или “1” — необходимо изменить при инициализации значение приблизительно 20 регистров, соответствующее этому биту.

Работа c PIOA на программном уровне — работа с блоком PIOA, если с аппаратным, то выбирается, с какой периферией будет производиться работа.

2.1 Пример:

// инициализация

 

// PIO enable

data=0x001F80ff; // pck if 31 bit eq 0

regs->PIOA_PER  =data;

regs->PIOA_PDR  =~data;

 

// Output Enable

data=0x801080ff;

regs->PIOA_OER  =data;

regs->PIOA_ODR  =~data;

 

// Glitch

data=0x000F0000;

regs->PIOA_IFER =data;

regs->PIOA_IFDR =~data;

 

data=0x80000000;

regs->PIOA_SODR =data;

regs->PIOA_CODR = data;

 

data=0x00000000;

regs->PIOA_IER  =data;

regs->PIOA_IDR  =~data;

 

data=0x00000000;

regs->PIOA_MDER =data;

regs->PIOA_MDDR =~data;

 

// Pull-up

data=0x001080ff; // pck if 31 bit eq 0

regs->PIOA_PPUER=data;

regs->PIOA_PPUDR=~data;

 

data=0x00000000;

regs->PIOA_ASR  =data;

regs->PIOA_BSR  =~data;

 

// Output status write enable

data=0x001080ff; // pck if 31 bit eq 0

regs->PIOA_OWER =data;

regs->PIOA_OWDR =~data;

Этот пример легко воспринимается, если обращаться к datasheet, 233 стр.

2.2 Пример — мигание светодиодами

В данном примере рассматривается вариант мигания светодиодами и используется 3 светодиода, подключенных к 3 первым выводом на порту PIOA[2..0].

Подключены следующим образом -> СветоДиод + Резистор(0.51К) + 3.3V.

 

Такое включение не случайно, требование из даташит, раздел DBGU, и необходимо для программирования через последовательную шину блока DBGU. Дело в том что, для программирования через DBGU – необходимо на этих выводах установить уровни логической «1».

 

void init_show(void) {

AT91PS_SYS regs = AT91C_BASE_SYS;

unsigned int xxx=0;

while(xxx<6){

delay();

witch (xxx){

case 0: regs->PIOA_ODSR = ~0x1;  break;

case 1: regs->PIOA_ODSR = ~0x2;  break;

case 2: regs->PIOA_ODSR = ~0x4;  break;

case 3: regs->PIOA_ODSR = ~0x4;  break;

case 4: regs->PIOA_ODSR = ~0x2;  break;

case 5: regs->PIOA_ODSR = ~0x1;  break;

} xxx++;

}

}

 

Как видно из этого примера, для того чтобы зажечь светодиод, подтянутый в свою очередь к VCC, необходимо подать на вывод – логический “0”, это делается так — ~0x1. И так до тех пор, пока светодиод не проделает путь – 1-2-3-3-2-1 светодиоды.

2.2.1 Заметка

Следствием того, что все 32 вывода конфигурируемы на произвольную комбинацию, есть ряд неудобств, при сравнении с 8-ми битными МК.

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

Надо заметить, что подобную задачу могут решать совершенно иначе.

2        Блок PMC

PMC блок — предназначен для конфигурации источников тактового сигнала и связи источников с другими модулями USART, SPI, PIOA и т. д.

Отличительная возможность МК на базе ARM ядра, является возможность вывода внутренней тактовой частоты на вывод МК, что дает исключительную возможность тактировать внешнюю схему, например, для организации синхронной схемы внешних узлов устройства. При этом надо заметить, что средствами конфигурации регистров блока PMC, можно сделать тактовую частоту контроллера почти любой, также в ходе работы тактовую частоту можно изменять.

3.1 Пример:

data=0x00000401;

regs->PMC_SCER=data;

regs->PMC_SCDR=~data;

 

data=0x001f80ff;           // pck if 31 bit eq 0

regs->PMC_PCER=data;

regs->PMC_PCDR=~data;

 

data=0x00000001;

regs->PMC_MCKR=data;

 

data=0x0000ff01;

regs->PMC_MOR=data;

 

data=0x00007f01;

regs->PMC_PLLR=data;

 

data=0x0000040d;

regs->PMC_IER=data;

regs->PMC_IDR=~data;

 

data=0x0000040d;

regs->PMC_IMR=data;

 

data=0x00000000;

regs->PMC_IER=data;

regs->PMC_IDR=~data;

 

data=0x00000000;

regs->PMC_IMR=data;

3.1.1 Заметка

Здесь комментарий  // pck if 31 bit eq 0  показывает регистр в котором конфигурируется 31 вывод как “источник кактовой частоты” для тактирования схемы.

 


3        Блок AIC

AIC — Расширенный контроллер прерываний

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

4.1 Пример:

/* Init SMR1 — system controller interrupt */

 

/* Priority = 3 */

regs->AIC_SMR[1] = 0x03; // — в этом регистре задается приоритет прерывания

 

/* Load VECTOR */

regs->AIC_SVR[1] = (unsigned int)isrPIT;      // — в этом регистре задается процедура обрабатывающая

// возникшее прерывания

/* Enable system controller’s interrupt * /

regs->AIC_IECR |= 2;

regs->AIC_IDCR &= ~2;        // значение – идентификатор, из таблицы прерываний, в данном случае это

// SYSIRQ. ( См. Datasheet — Table 11.3)

 

Если Вам необходимо включить USART1, то в конфигурационный регистр необходимо будет записать как маску, значение – 128;

regs->AIC_IECR |= 128;

regs->AIC_IDCR &= ~128;

Пример приведен в разделе «
9.2 Использование прерывания»

4        Блок DBGU

DBGU — дебаг-юнит. Блок для пошаговой отладки МК с использованием специальных аппаратно-программных средств. Не менее важной его особенностью есть присутствие в нем USB и RS232. Это дает возможность программировать через последовательную шину. Для этого существуют программные средства, работающие по протоколу SAM-BA (SAM — Boot Assistant)

В случае автора статьи — этот порт используется для программирования через последовательную шину RS232, при этом используются стандартные средства OS Linux.

5.1 Программирования МК из Linux:

Для начала необходимо проинициализировать терминал на скорость порта, делается это запуском команды minicom. Как только программа запустилась – выходим из нее. (предварительно в minicom должны стаять настройки порта на 115200). Все. Теперь, необходимо на последовательный порт послать файл, который будет «заливаться» в МК.

 

bash$ cat init.txt > /dev/ttyS0 && cat file.txt > /dev/ttyS0

Таким образом, на скорости порта 115200, файл file.txt посылается в RAM (или в FLASH ) SAM-BA. По завершению программирования, данные в памяти МК SAM-BA исполняются ( предварительно скопировавшись в память контроллера ), и МК начинает свою работу программы с адреса 0x202000.

Для программирования МК по SAM-BA, необходимо чтобы:

— кварцевый генератор имел частоту — 18.432 МГц.

— PIOA[2..0] имели после включения логический уровень «1»


6. Инициализация

6.1 Инициализация DBGU

Что бы можно было с модуля DBGU, после  инициализации (необходимо проинициализировать регистры конфигурации ), работать как последовательным портом RS232. Здесь используется только 2 вывода – TX и RX.

6.2 Пример:

// Init USART (DBGU)

AT91PS_DBGU regs = AT91C_BASE_DBGU;

AT91PS_PIO pio = AT91C_BASE_PIOA;

 

regs->DBGU_CR = AT91C_US_RSTRX | AT91C_US_RSTTX | AT91C_US_RXDIS | AT91C_US_TXDIS;

delay();

 

regs->DBGU_CR = AT91C_US_RXEN | AT91C_US_TXEN;

regs->DBGU_MR = 0x800;         // No parity, normal mode

regs->DBGU_BRGR = 0xA; // 115200 @ 18.432 MHz

 

// Init IO

// Disable PIO — DBGU pins

pio->PIO_PDR |= (AT91C_PIO_PA9 | AT91C_PIO_PA10);

pio->PIO_PER &= ~(AT91C_PIO_PA9 | AT91C_PIO_PA10);

 

// Enable peripheral A — DBGU pins

pio->PIO_ASR |= (AT91C_PIO_PA9 | AT91C_PIO_PA10);

pio->PIO_BSR &= ~(AT91C_PIO_PA9 | AT91C_PIO_PA10);

6.2.1 Заметка

Видно, что можно использовать этот модуль как простой RS232. Этого более чем достаточно для простых, а иногда для сложных проектов. Для более сложных проектов лучше использовать блоки USART0 или USART1, так как в них присутствует аппаратный контроль потока (RTS, CTS, ит.д.), чего нет в DBGU.

7. Блок WDT

//Watchdog Disable

AT91C_BASE_WDTC->WDTC_WDMR= AT91C_WDTC_WDDIS;


8. Сборка макетной платы для МК AT91SAM7S256

 

Для включения МК AT91SAM7S256 – необходимо правильно собрать схему включения МК, особенно соблюдать все правила относительно выводов — VDDIN, VDDOUT, VDDFLASH, VDDIO, VDDCORE, VDDPLL, GND. Так как, в случае не правильного монтажа есть риск, что МК будет испорчен по причине перегорания. Это же правило относится и к всем сигнальным выводам.

Перед началом работы с МК, необходимо:

– проверить, что возле места сборки нет мощного источника статического заряда (телевизор, монитор, мощный электродвигатель и т.д.)

– монтаж проводить таким образом, что бы, не перегреть микросхему.

– на собранную схему подать правильное напряжение питание и проверить наличие всех напряжений на выводах МК.

8.1 Выводы питания

Рисунок 2 – структурная схема включения МК

На выводах VDDFLASH, VDDIO, VDDIN необходимо наличие напряжения +3,3В, это напряжение которое подается от стабилизированного источника на плате. Эти выводы должны быть соединены вместе и эти три вывода должны иметь подключенные фильтрующие конденсаторы на землю. Значения емкостей конденсаторов минимум 0,1мкф.

Если необходимо что бы выводы периферии работали с 5 вольтовыми уровнями сигнала, то на вывод VDDIO необходимо подать +5В отдельно, не соединяя его с выводами VDDFLASH и VDDIN.

На выводах VDDOUT, VDDCORE, VDDPLL необходимо наличие напряжения +1,85В, это напряжение которое стабилизируется внутри МК и подается ядро МК. Эти три вывода должны иметь подключенные конденсаторы на землю. Значения емкостей конденсаторов минимум 0,1мкф.

Более полная, схема как пример включения МК приведена на рисунке 3 , рисунке 4.

Рисунок 3 – принципиальная схема включения МК – необходимый минимум.

Рисунок 4 – принципиальная схема включения МК – объединение с внешней схемой.

Рисунок 4.1 – принципиальная схема включения МК – объединение с внешней схемой.


Clocks Oscillators and PLLs

XIN                   Main Oscillator Input

XOUT               Main Oscillator Output

PLLRC               PLL Filter

PCK0 — PCK2      Programmable Clock Output

 

Reset/Test

NRST                Microcontroller Reset

TST                  Test Mode Select

 

Debug Unit

DRXD                Debug Receive Data

DTXD                Debug Transmit Data

 

PIO

PA0 — PA31        Parallel IO Controller

8.2 Выводы тактирования МК

Фрагмент из datasheet, поясняющий основные моменты, касающиеся блока тактирования МК.

Рисунок 5 – структурная схема блока тактирования.

Рисунок 6 – схема включения кварцевого резонатора

На рисунке 6,  конденсаторы C1 и C2 с номиналами 15-27пФ, кварцевый генератор имеет значение 18,432 МГц.

8.2.1 Заметка

Обратите внимание: МК не будет программироваться через SAM-BA, если будет использоваться при программировании кварцевый резонатор с частотой отличной от 18,432 МГц.


9. Компилятор

Для сборки проекта используется GCC-компилятор, предварительно который скомпилированный под ARM архитектуру.

9.1 GCC – параметры и ключи компилятора.

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

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

9.1.1 Пример файла —  Makefile

##################################

#    Makefile for AT91SAM7S          #

##################################

CWD          =.

PATH_GL   =/usr/local/arm/bin

PATH_EX  =`pwd`

CROSS      =arm-elf-

 

CC             =$(PATH_GL)/$(CROSS)gcc

CPP           =$(PATH_GL)/$(CROSS)cpp

AS             =$(PATH_GL)/$(CROSS)as

LD             =$(PATH_GL)/$(CROSS)ld

OBJCOPY  =$(PATH_GL)/$(CROSS)objcopy

OBJDUMP  =$(PATH_GL)/$(CROSS)objdump

STRIP        =$(PATH_GL)/$(CROSS)strip

 

HOSTCC    =gcc

OBJ           =./obj

BIN                        =./bin

INCLUDE   =./include

SOURCE    =./src

LINKER      =./linker

 

LIBPATH    =/usr/local/arm/arm-elf/lib

LIBGCC     =/usr/local/arm/lib/gcc-lib/arm-elf/3.3.6/

INCPATH   =/usr/local/arm/lib/gcc-lib/arm-elf/3.3.6/include

#CFLAGS   =-c -g -marm -mapcs-frame

CFLAGS    =-c -g -marm

 

OBJS         =startup.o

OBJS         +=exit.o

OBJS         +=GOTO.o

OBJS         +=MDSA.o

OBJS         +=interrupt.o

OBJS         +=delays.o

OBJS         +=init.o

OBJS         +=lcd.o

OBJS         +=usart.o

OBJS         +=ports.o

OBJS         +=spi.o

OBJS         +=mmc.o

OBJFILE    =$(foreach d, $(OBJS), $(OBJ)/$(d))

 

#LDSCRPT=Flash

LDSCRPT  =RAM

 

all: $(OBJFILE)

$(LD) -o $(BIN)/MDSA.elf $(OBJFILE) -I$(INCPATH) -L$(LIBPATH) -L$(LIBGCC) -lc -lgcc —script=$(LINKER)/$(LDSCRPT).ld

$(OBJDUMP) -SD $(BIN)/MDSA.elf > $(BIN)/dump

rm -f $(PATH_EX)/MDSA.bin

$(OBJCOPY) -O binary $(BIN)/MDSA.elf $(BIN)/MDSA.bin

$(BIN)/cmdgen $(BIN)/MDSA.bin > $(BIN)/MDSA.txt

$(OBJ)/%.o: $(SOURCE)/%.c $(INCLUDE)/*.h

$(CC) -I$(INCLUDE) $(CFLAGS) $< -o $@

$(OBJ)/%.o: $(SOURCE)/%.s

$(AS) $< -o $@

 

clean:

rm -f $(OBJ)/*.o

rm -f $(BIN)/MDSA.elf

rm -f $(BIN)/MDSA.bin

rm -f $(BIN)/dump

rm -f $(BIN)/MDSA.txt

rm -f $(PATH_EX)/MDSA.bin

 

x:

make clean

make all

cat ./bin/SAMBA_init.txt>/dev/ttyS0 && cat ./bin/MDSA.txt>/dev/ttyS0

 

Работа с этим файлом производится стандартно, при помощи команды – make


9.2 Использование прерывания

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

Прерыванию, чтобы случиться, нужно преодолеть следующий путь:

Периферия —> Advanced Interrupt Controller(AIC) —> ARM core

Периферия — любой периферийный источник прерывания (SPI, USART, таймер, ADC и т.д.)

Если хотя бы на одном из этих 3-х участков прерывания запрещены, то они не возникнут

На уровне ARM core прерывания запрещаются во всех Mode кроме User Mode — в регистре CPSR устанавливаются биты запрещения (!) прерываний IRQ(I_bit) и FIQ(F_Bit):

(startup.s)

<начало файла>

#  Enter Undefined Instruction Mode and set its Stack Pointer

MSR     CPSR_c, #Mode_UND|I_Bit|F_Bit

MOV     SP, R0

SUB     R0, R0, #UND_Stack_Size

 

#  Enter Abort Mode and set its Stack Pointer

MSR     CPSR_c, #Mode_ABT|I_Bit|F_Bit

MOV     SP, R0

SUB     R0, R0, #ABT_Stack_Size

 

#  Enter FIQ Mode and set its Stack Pointer

MSR     CPSR_c, #Mode_FIQ|I_Bit|F_Bit

MOV     SP, R0

SUB     R0, R0, #FIQ_Stack_Size

 

#  Enter IRQ Mode and set its Stack Pointer

MSR     CPSR_c, #Mode_IRQ|I_Bit|F_Bit

MOV     SP, R0

SUB     R0, R0, #IRQ_Stack_Size

 

#  Enter Supervisor Mode and set its Stack Pointer

MSR     CPSR_c, #Mode_SVC|I_Bit|F_Bit

MOV     SP, R0

SUB     R0, R0, #SVC_Stack_Size

 

#  Enter User Mode and set its Stack Pointer

MSR     CPSR_c, #Mode_USR

MOV     SP, R0

<конец файла>

На уровне AIC глобально прерывания разрешены (регистр AIC_DEBUG, бит GMSK = 0), а индивидуально все запрещены.

Чтобы разрешить прерывание от какой-либо периферии, надо записать в регистры AIC_IECR, AIC_IDCR. Каждый бит этих регистров управляет прерыванием от конкретной периферии (UART0, UART1, SPI, ADC и т.д.).

0 бит — Fast interrupt (FIQ), 1 бит — прерывание от System controller.


9.2.1 Включение прерывания таймера

1. Записываем регистр периода для таймера значение, включаем таймер, разрешаем прерывания от таймера. Все это делается записью в один регистр.

/* Load PIV and enable PIT with its interrupt */

regs->PITC_PIMR = 0x03000900; /* 1 ms @ 36.864 MHz */

После этого прерывания возникать еще не будут.

Теперь необходимо разрешить прерывания на уровне Advanced Interrupt Controller

PIT находится в System Controller, поэтому включаем прерывание от System Controller:

1. Записываем адрес функции-обработчика прерывания

/* Load VECTOR */

regs->AIC_SVR[1] = (unsigned int)isrSYS;

Здесь функция обработчик объявляется как обычная:     void isrSYS(void);

2. Конфигурируем прерывание: приоритет и edge или level sensitive

/* Priority to 3 */

regs->AIC_SMR[1] = 0x3;

3. Разрешаем прерывание в AIC

/* Enable system controller’s interrupt */

regs->AIC_IECR |= 2;

regs->AIC_IDCR &= ~2;

После этих изменений прерывания от PIT будут возникать.

9.2.2 Заметка

Так как и PIT и DBGU (СОМ-порт) находятся в System Controler, то обработчик прерывания у них один на всех. Поэтому внутри обработчика проверяются флаги событий от периферии, чтобы знать, какая периферия вызвала прерывание.


9.2.2 Пример использования прерывания

Здесь рассмотрен пример работы с прерыванием, надо заметить что таймер находится в периферии SYSIRQ, в той же периферии находится и приемник с передатчиком от DBGU блока.

void isrSYS(void) {

unsigned int tmp,i;

AT91PS_SYS regs = AT91C_BASE_SYS;

AT91PS_USART usart1 = AT91C_BASE_US1;

 

regs->PIOA_ODSR ^= 0x80000000;    regs->PIOA_ODSR ^= 0x80000000;

// программно тактируем вывод по маске 0x80000000 для проверки частоты вызова от

// событий системного таймера и DBGU

 

// чтение байта с приемника DBGU

if (regs->DBGU_CSR&AT91C_US_RXRDY){

get_ch_usart();

}

 

// выдача байта на передатчик DBGU

if (regs->DBGU_CSR&regs->DBGU_IMR&AT91C_US_TXRDY){

put_ch_usart(0x25);

Tx_IRQ_off();

}

 

// системный таймер

if (regs->PITC_PISR&AT91C_PITC_PITS){

tmp = regs->PITC_PIVR;

SysCycleTmr(tmr_global_cnt);

}

 

}

пояснение:

SysCycleTmr(tmr_global_cnt); процедура работы с таймером.

get_ch_usart(); процедура работы с приемником DBGU.

put_ch_usart(0x25); процедура работы с передатчиком DBGU .

Добавить комментарий