Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Уч. пос. МПТ (2.04.12).pdf
Скачиваний:
403
Добавлен:
22.03.2015
Размер:
10.95 Mб
Скачать

разработки с интегрированным Си-компилятором: µVision фирмы Keil и Embedded Workbench фирмы IAR. Внутрисхемная отладка обеспечивается такими средствами, как U-Link2 (фирмы Keil), J-Link (фирмы Segger), а также их многочисленными дешевые аналогами.

В дальнейшем будем рассматривать микроконтроллер LPC2148 фирмы NXP (старший из серии LPC214x), который можно назвать типичным представителем семейства ARM7. Приведем основные параметры и перечислим наиболее важные встроенные аппаратные средства этой микросхемы.

а) Максимальная тактовая частота 60 МГц. б) ПЗУ (FLASH-память) объемом 512 кбайт. в) ОЗУ объемом 40 кбайт.

г) Два 32-разрядных таймера-счетчика, модуль ШИМ с отдельным таймером, сторожевой таймер, часы реального времени с автономным питанием и тактированием.

д) Два десятиразрядных АЦП с временем преобразования 2,44 мкс. е) Десятиразрядный ЦАП с временем установления 1 мкс.

ж) Приемопередатчики интерфейсов: два UART, два I2C, SPI, SSP, USB 2.0 в режиме Full Speed (12 МГц) с прямым доступом к памяти.

и) Гибкая система управления энергопотреблением.

Следующие разделы первой части настоящего учебного пособия посвящены описанию архитектуры ARM7TDMI и аппаратных узлов микроконтроллера LPC2148.

1.2 Программистская модель процессорного ядра ARM7TDMI

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

1.2.1 Режимы работы ядра ARM7

Процессорное ядро ARM7 имеет шесть режимов работы. От выбранного режима зависит доступный набор регистров общего назначения. Смена режима может происходить аппаратно или выполняться программно путем записи кода в регистр состояния программы СPSR (раздел 1.2.2) командой MSR. Ниже перечислены все режимы и даны краткие пояснения по поводу назначения каждого из них (см. также раздел 1.6).

а) Режимы User и System предназначены для выполнения программы пользователя или операционной системы; это основной режим работы ядра.

б) Supervisor — режим программного прерывания. Приход в этот режим происходит при сбросе, выполнении инструкции SWI или переполнении счетчика команды.

в) Переход в режим Abort происходит при обращении к недопустимому адресу памяти (исключительные ситуации PAbort и DAbort).

9

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

д) IRQ — режим прерывания, классифицированного как IRQ.

е) FIQ — режим прерывания, классифицированного как FIQ (быстрое прерывание).

Все режимы кроме User называются привилегированными. В этих режимах доступны некоторые функции управления ядром, которые не доступны в режиме User.

1.2.2 Система регистров

Арифметико-логическое устройство МК взаимодействует с 16 регистрами общего назначения, обозначаемыми R0–R15 (рисунок 1.2.1). Регистры R0–R12 доступны для размещения данных. Регистр R13 (SP) служит указателем стека; в нем хранится адрес вершины стека, организованного в памяти данных. R14 (LR) — регистр связи, предназначенный для хранения адреса возврата при вызове прерываний и подпрограмм. R15 (PC) — счетчик команд, содержащий адрес следующей команды.

В каждом привилегированном (то есть кроме User/System) режиме имеется своя пара регистров R13, R14. На схеме (рисунок 1.2.1) они обозначены R13_xxx, R14_xxx, где xxx — идентификатор режима. При смене режима используются эти копии, а оригинальное содержимое R13, R14 основного режима User/System сохраняется неизменным. Это необходимо для полного восстановления состояния ядра при возврате в режим User/System. Вполне очевидно, что счетчик команд R15 не должен ни сохраняться, ни восстанавливаться при смене режима, поэтому он не имеет копий. Для режима быстрого прерывания FIQ предусмотрен второй набор регистров R8–R12. Эти «дублеры» R8–R12 можно использовать в процедуре обработки быстрого прерывания, не затрачивая времени на сохранение в стек оригинальных регистров режима User/System и на последующее их восстановление.

Регистр состояния программы CPSR содержит флаги результатов арифметических операций и биты управления режимом ядра (раздел 1.2.3). Изменение регистра CPSR программным путем возможно только в привилегированных режимах. Для сохранения слова состояния программы имеются регистры SPSR_xxx, где xxx — идентификатор режима.

1.2.3 Слово состояния программы

Схема флагов и управляющих битов слова состояния программы CPSR показана на рисунке 1.2.1 (внизу).

Флаги результата арифметических операций, устанавливаются автоматически при обработке данных в АЛУ инструкциями, вызванными с модификатором {S} (раздел 1.4 и таблица 1.4.2). В таблице 1.2.1 даны примеры влияния на флаги операции сложения. Рассмотрим назначение флагов слова состояния программы CPSR.

● Бит 31 (N) — флаг устанавливается в единицу, если результат вычислений в АЛУ отрицательный, то есть если старший (31-ый) разряд результата равен единице.

10

ARM7 ядра памяти организация и модель Программистская – 1.2.1 Рисунок LPC2148) микроконтроллера примере на(

11

 

 

 

 

User/System

 

FIQ

Supervisor

 

Abort

 

 

 

 

IRQ

 

Undefined

Режимы:

 

 

Выполнение

Быстрое

Программное

 

Ошибка

 

 

Прерывание

Неопределен-

 

 

 

 

программы

 

прерывание

прерывание

 

адреса

 

 

 

 

 

 

 

ная команда

 

 

 

 

 

 

R0

 

R0

R0

 

R0

 

 

 

 

R0

 

R0

 

 

 

 

 

 

R1

 

R1

R1

 

R1

 

 

 

 

R1

 

R1

 

 

 

 

 

 

R2

 

R2

R2

 

R2

 

 

 

 

R2

 

R2

 

 

 

 

 

 

R3

 

R3

R3

 

R3

 

 

 

 

R3

 

R3

 

 

 

 

 

 

R4

 

R4

R4

 

R4

 

 

 

 

R4

 

R4

Регистры

 

 

 

 

R5

 

R5

R5

 

R5

 

 

 

 

R5

 

R5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

общего

 

 

 

 

R6

 

R6

R6

 

R6

 

 

 

 

R6

 

R6

назначения

 

 

R7

 

R7

R7

 

R7

 

 

 

 

R7

 

R7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

R8

 

R8_fiq

R8

 

R8

 

 

 

 

R8

 

R8

 

 

 

 

 

 

R9

 

R9_fiq

R9

 

R9

 

 

 

 

R9

 

R9

 

 

 

 

 

 

R10

 

R10_fiq

R10

 

R10

 

 

 

 

R10

 

R10

 

 

 

 

 

 

R11

 

R11_fiq

R11

 

R11

 

 

 

 

R11

 

R11

 

 

 

 

 

 

R12

 

R12_fiq

R12

 

R12

 

 

 

 

R12

 

R12

Указатель стека

 

 

R13 (SP)

 

R13_fiq

R13_svc

 

R13_abt

 

 

 

 

R13_irq

 

R13_und

Адрес возврата

 

 

R14 (LR)

 

R14_fiq

R14_svc

 

R14_abt

 

 

 

 

R14_irq

 

R14_und

Счетчик команд

R15 (PC)

 

R15

R15

 

R15

 

 

 

 

R15

 

R15

Регистр состояния

 

CPSR

 

CPSR

CPSR

 

CPSR

 

 

 

 

CPSR

 

CPSR

Регистры сохраненного состояния

 

SPSR_fiq

SPSR_svc

SPSR_abt

SPSR_irq

 

SPSR_und

31

30

29

28

27

 

 

8

7

6

5

4

3

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CPSR N

Z C

V

 

 

 

 

I

F

T

 

 

MODE

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Переполнение

Разрешить прерывания IRQ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Thumb

 

Режим

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Перенос

Разрешить прерывания FIQ

 

 

 

 

 

 

 

 

 

 

Отрицатель-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ный результат

 

 

 

 

 

 

Нулевой результат

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Отображаемая область векторов прерываний

Устройства AHB

Устройства VPB

Загрузчик 12 кбайт

Буфер USB 8 кбайт

Память данных ОЗУ

32 кбайта

Порты ввода-вывода

Память программ

Flash-ПЗУ

512 кбайт

Резерв

Fast Int. Request

Int. Request

Checksum

Data Abort

Prefetch Abort

Sowftware Int.

Undefined

Reset

0xFFFFFFFF

0xF0000000

0xEFFFFFFF

0xE0000000

0x7FFFFFFF

0x7FFFD000

0x7FD01FFF

0x7FD00000

0x40007FFF

0x40000000

0x3FFFFFFF

0x3FFF8000

0x0007FFFF

0x00000040

0x0000003F

0x00000020

0x0000001C

0x00000018

0x00000014

0x00000010

0x0000000C

0x00000008

0x00000004

0x00000000

Таблица 1.2.1 – Примеры влияния операции сложения на флаги результата

Операция

Результат

C

V

N

Z

 

 

1

0

0

0

 

 

0

1

0

0

 

 

0

0

1

0

 

 

1

1

0

0

 

 

1

0

0

1

 

 

0

1

1

0

 

 

1

0

1

0

Бит 30 (Z) — флаг устанавливается в единицу, если результат вычислений в АЛУ равен нулю.

Бит 29 (С) — флаг переноса, инверсный влаг заема. При сложении беззнаковых чисел флаг устанавливается в единицу, если произошел перенос из 31-го разряда, то есть если результат вычислений в АЛУ больше . При вычитании беззнаковых чисел флаг сбрасывается в ноль, если произошел заем из несуществующего 32-го разряда, то есть если результат вычислений в АЛУ меньше нуля.

Бит 28 (V) — флаг арифметического переполнения. При сложении и вычитании чисел со знаком флаг устанавливается в единицу, если результат вычислений в АЛУ больше или меньше . Такой результат приводит к потере знака. Иными словами, флаг устанавливается в единицу, если знаковый (31-ый) разряд обоих операндов одинаков и отличается от знакового разряда результата.

Бит 7 (I) — бит запрета прерываний IRQ. Устанавливается аппаратно в единицу в исключительных ситуациях Reset, SWI, IRQ, FIQ. Равенство единице запрещает прерывания IRQ при сбросе и в одноименных режимах.

Бит 6 (F) — бит запрета прерываний FIQ. Устанавливается в единицу аппаратно в исключительных ситуациях Reset, FIQ. Равенство единицы запрещает прерывания FIQ при сбросе и в режиме FIQ.

Бит 5 (T) — бит перевода ядра в 16-разрядный режим Thumb ().

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

Таблица 1.2.2 – Управление режимом работы ядра через регистр CPSR

 

 

Режим

Mode (двоичные и шестнадцатеричные значения)

 

 

 

User

10000 (0x10)

.

 

 

FIQ

10001 (0x11)

Привилегир

Исключ.

 

 

 

 

IRQ

10010 (0x12)

 

Supervisor

10011 (0x13)

 

Abort

10111 (0x17)

 

Undefined

11011 (0x1B)

 

 

System

11111 (0x1F)

 

 

 

12