Академический Документы
Профессиональный Документы
Культура Документы
КОМАРОВ
ОБНИНСК 2003
Комаров А.В. Цифровые сигнальные процессоры. – Обнинск, 2003, -
141 с.
А. Комаров, 2003 г.
СОДЕРЖАНИЕ
1. АРХИТЕКТУРА ADSP-2181………………………………………. 5
1.1. Описание выводов процессора…………………………………. 5
1.2. Структурная схема ADSP-2181………………………………… 7
1.3. Память программ………………………………………………... 11
1.4. Память данных…………………………………………………... 12
1.5. Функциональная схема ALU ……………………………………13
1.6. Функциональная схема MAC…………………………………… 15
1.7. Функциональная схема SHIFTER……………………………….17
1.8. Функциональная схема программного конвейера…………….. 22
1.9. Система прерываний……………………………………………..28
1.9.1. Общие сведения…………………………………………….. 28
1.9.2. Последовательность обслуживания прерываний………… 29
1.9.3. Конфигурирование прерываний……………………………29
1.10. Регистры состояния и стек…………………………………….. 31
1.11. Передача данных……………………………………………….. 34
1.11.1. Генераторы адресов……………………………………….. 35
1.11.2. Узел обмена данными…………………………………….. 36
1.12. Последовательные порты……………………………………… 37
1.12.1. Общие сведения…………………………………………… 37
1.12.2. Программирование SPORT………………………………..40
1.12.3. Пример конфигурирования последовательных портов… 43
1.12.4. Сжатие данных…………………………………………….. 44
1.12.5. Автобуферизация………………………………………….. 45
1.12.6. Пример программирования автобуферизации…………... 46
1.12.7. Многоканальность…………………………….…………... 47
1.13. Таймер…………………………………………………………... 48
1.14. Системный интерфейс…………………………………………. 50
1.14.1. Сигналы синхронизации………………………………….. 51
1.14.2. Внешние прерывания……………………………………... 53
1.14.3. Флажковые биты…………………………………………... 54
1.14.4. Режим энергосбережения………………………………….54
1.15. Контроллер прямого доступа к байтовой памяти (BDMA)…. 56
1.15.1. Общие сведения…………………………………………… 56
1.15.2. Регистры управления BDMA……………………………...57
1.15.3. Функционирование BDMA……………………………….. 57
1.15.4. Загрузка программ с помощью BDMA…………………... 58
1.16. Порт IDMA……………………………………………………... 59
1.16.1. Сигналы IDMA……………………………………………..59
1.16.2. Функционирование IDMA………………………………... 60
1.16.3. Загрузка программ с помощью IDMA…………………… 60
1.17. Система команд………………………………………………… 61
1.17.1. Общие сведения…………………………………………… 61
1.17.2. Методы адресации……………………………………….... 62
1.17.3. Условные обозначения……………………………………. 63
1.17.4. Команды пересылки данных………………………………64
1.17.5. Команды ALU……………………………………………... 70
1.17.6. Команды MAC…………………………………………….. 79
1.17.7. Команды SHIFTER………………………………………... 82
1.17.8. Команды управления потоком программы……………… 88
1.17.9. Многофункциональные команды…………………………92
1.17.10. Прочие команды…………………………………………. 98
1.18. Инструментальные средства разработки программного
обеспечения……………………………………………………. 101
1.18.1. Инструментальные средства для DOS…………………… 101
1.18.2. Инструментальные средства для WINDOWS…………… 102
1.18.3. Создание проекта в VisualDSP…………………………… 102
1.18.4. Загрузка программы в EZ-KIT Lite………………………. 103
1.19. Примеры программирования в среде VisualDSP…………….. 104
1.19.1. Формирование эхо-сигнала………………………………. 104
1.19.2. Эмуляция интерфейса RS-232……………………………. 112
1.19.3. Эмуляция интерфейса RS-232 (смешанный вариант)…... 124
2. АРХИТЕКТУРА СИСТЕМЫ НА ОСНОВЕ ADSP-2181………….. 131
2.1. Структурная схема вычислительной (управляющей) системы на
основе ADSP-2181………………………………………………….131
2.2. Цепи синхронизации и запуска процессора…………………….133
ПРИЛОЖЕНИЕ 1. ФОРМАТ РЕГИСТРОВ УПРАВЛЕНИЯ………... 134
П1.1. System control register………………………………………….. 134
П1.2. Data memory waitstate register…………………………………. 134
П1.3. SPORT0 autobuffer control register……………………………. 135
П1.4. SPORT0 control register………………………………………... 135
П1.5. SPORT1 autobuffer control register……………………………. 136
П1.6. SPORT1 control register……………………………………….. 137
П1.7. Programmable flags & Composite select control………………. 137
П1.8. Programmable flag data………………………………………… 138
П1.9. BDMA word count……………………………………………… 138
П1.10. BDMA control………………………………………………… 138
П1.11. BDMA external address……………………………………….. 139
П1.12. BDMA internal address……………………………………….. 139
П1.13. IDMA control………………………………………………….. 139
П1.14. ICNTL register………………………………………………… 140
П1.15. IMASK register………………………………………………... 140
П1.16. IFC register……………………………………………………. 140
ЛИТЕРАТУРА…………………………………………………………... 141
1. АРХИТЕКТУРА ADSP-2181
C1 BQ
CLKINCLKOUTPWDACKXTALA
C2 DSPADDR[13:0]RESET#2181RD#
14
PWD#WR#IRQ2#DATA[23:0]IRQE
#DMS#IRQL0#PMS#IRQL1#IOMS
#SPORT0BMS#SPORT1CMS#MM
APBG#BMODEBGH#BR#FL2:0IR 24
D#PF7:0IWR#IAD[15:0]IS#IACK#I
AL
5
5
3
8
16
14 DMA BUS
24 PMD BUS
BUS EXCH
DMD BUS 16
5 5
Таблица 1.1
Выбор номера оверлея с помощью содержимого РСН PMOVLAY
PMOVLAY Память ADDR13 ADDR[12:0]
0 Внутренняя — —
1 Внешний оверлей 1 0 13 младших битов
адреса формируют коды
0х0000…0x3FFF
2 Внешний оверлей 2 1 Тоже самое
Таблица 1.2
Выбор номера оверлея с помощью содержимого РСН DMOVLAY
DMOVLAY Память ADDR13 ADDR[12:0]
0 Внутренняя — —
1 Внешний оверлей 1 0 13 младших битов
адреса формируют коды
0х0000…0x3FFF
2 Внешний оверлей 2 1 Тоже самое
ПДАдрес32
РСН0x3FFF0x3FЕ0Внутренние 8160
слов0x3FDF0x20008К
внутренняя0x1FFF(DMOVLAY = 0)
ИЛИ…8К внешняя(DMOVLAY = 1
или 2)0x0000
MUX 1
AX AY
РЕГИСТРЫ РЕГИСТРЫ
2 х 16 2 х 16
MUX 2 MUX 3
AF
X Y РЕГИСТР
AZA
NAC
AVA
ALU
SAQ СI
16
MUX 4
AR
РЕГИСТР
R BUS 16
MUX 1
MX MY
РЕГИСТРЫ РЕГИСТРЫ
2 х 16 2 х 16
MUX 2 MUX 3
MF
X Y РЕГИСТР
MULTIPLIER
P
40 32
MV
ADD/SUBTRACT
R2 R1 R0
M
U
X
7
R BUS 16
DMD BUS 16
MUX 1 SI
РЕГИСТР
SB
РЕГИСТР
SS MUX 2
X
COMPARE EXP DET
I X
HI/LO R SHIFTER
MUX 3 MUX 4 ARRAY
8 C O
SE CMD 32 32
РЕГИСТР NEG OR/PASS
8 16 16
MUX 5 MUX 6
SR1 SR0
РЕГИСТР РЕГИСТР
M
U
X
7
R BUS 16
Таблица 1.4
Формирование экспоненты в HI режиме
Входной код сдвигателя Значение экспоненты
SNDDDDDD DDDDDDDD 0
SSNDDDDD DDDDDDDD -1
…
SSSSSSSS SSSSSSSN -14
SSSSSSSS SSSSSSSS -15
Примечание к табл. 1.4: S – знаковый бит, N – не знаковый бит, D –
биты не рассматриваемые детектором экспоненты.
Таблица 1.5
Формирование экспоненты в расширенном HI режиме
AV Входной код сдвигателя Значение экспоненты
1 DDDDDDDD DDDDDDDD +1
0 SNDDDDDD DDDDDDDD 0
0 SSNDDDDD DDDDDDDD -1
0 …
0 SSSSSSSS SSSSSSSN -14
0 SSSSSSSS SSSSSSSS -15
Таблица 1.6
Формирование экспоненты в LO режиме
SS Входной код сдвигателя Значение экспоненты
S NDDDDDDD DDDDDDDD -15
S SNDDDDDD DDDDDDDD -16
S …
S SSSSSSSS SSSSSSSN -30
S SSSSSSSS SSSSSSSS -31
MUX 1 A F
LOOP
CNTR STACK
(счетчик)
СЕ ВЫХ
CONDITION
LOGIC
E STATUS
STACK LOOP
C COMPARATOR
MUX 2
MUX 3
STATUS
REGISTERS
Флаги
oт ALU N P
INTERRUPT PC PROGRAM
CONTROLLER
E STACK COUNTER C F
INCREMENT NEXT
ПРЕРЫВ. ADDRESS
SOURCE
NEXT ADDRESS MUX SELECTOR
N
P От контакта FI
A
PMA BUS 14
Таблица 1.7
Условия выхода из цикла DO UNTIL
Условие Описание Выполняется, когда
EQ Равно нулю AZ = 1
NE Не равно нулю AZ = 0
LT Меньше чем ноль AN.XOR.AV = 1
GE Больше чем или равно нулю AN.XOR.AV = 0
LE Меньше чем или равно нулю (AN.XOR.AV).OR.AZ = 1
GT Больше чем ноль (AN.XOR.AV).OR.AZ = 0
AC Перенос ALU AC = 1
NOT AC Нет переноса ALU AC = 0
AV Переполнение ALU AV = 1
NOT AV Нет переполнения ALU AV = 0
MV Переполнение МАС MV = 1
NOT MV Нет переполнения МАС MV = 0
NEG Отрицательный знак Х входа AS = 1
POS Положительный знак Х входа AS = 0
CE Счетчик исчерпан
FOREVER Всегда
Таблица 1.8
Источники прерываний и адреса векторов прерываний
Источник прерывания Адрес вектора Тип
прерывания прерывания
RESET# 0х0000 (наивысший Внешний
приоритет)
Powerdown (немаскируемое) 0х002С Внешний
IRQ2# 0х0004 Внешний
IRQL1# (чувствительное к уровню) 0х0008 Внешний
IRQL0# (чувствительное к уровню) 0х000С Внешний
SPORT0 Передача 0х0010 Внутренний
SPORT0 Прием 0х0014 Внутренний
IRQE# (чувствительное к фронту) 0х0018 Внешний
Byte DMA 0х001С Внутренний
SPORT1 Передача / IRQ1# 0х0020 Внутр/внеш
SPORT1 Прием / IRQ0# 0х0024 Внутр/внеш
Таймер 0х0028 (наинизший Внутренний
приоритет)
16 16
TXn Узел RXn
Регистр сжатия данных Регистр
передаваемых принимаемых
данных данных
16 16
Сдвиговый Узел Сдвиговый
регистр передачи управления регистр приема
1.12.5. Автобуферизация
.MODULE/RAM code_to_init_Auto_Buff_SPORT1;
{Инициализация I, M и L регистров}
sport1_inits: I0 = ^tx_buffer; {I0 содержит начальный адрес tx_buffer}
M0 = 1; {используем каждый адрес буферов}
L0 = %tx_buffer; {L0 содержит длину буфера tx_buffer}
{Инициализация прерываний}
IFC = 6; {очистка всех внешних SPORT запросов}
ICNTL = 0; {запрет вложенных прерываний}
IMASK = 6; {разрешение прерываний от SPORT1}
1.12.7. Многоканальность
1.13. Таймер
DMD 16
8 16
TSCALE 16 TPERIOD
8 16
Узел загрузки счетчика
Разрешение 16
таймера и узла
прескалера -1 TCOUNT Нуль
ADSP- БПADDR[13:00]ADD
2181ADDR[13:00]DA 14 R[21:14]DATA[07:00]
TA[23:16]DATA[15:08 8 CS#
]BMS# 8
Таблица 1.18
Форматы BDMA
BTYPE Адрес Содержимое Адрес БП Содержимое
ПП или ПД ПП или ПД БП
00 РМ(0х0000) 0xABCDEF BM(0x0000) 0xAB
BM(0x0001) 0xCD
BM(0x0002) 0xEF
00 PM(0x0001) 0x123456 BM(0x0003) 0x12
BM(0x0004) 0x34
BM(0x0005) 0x56
01 DM(0x0000) 0x9876 BM(0x0006) 0x98
BM(0x0007) 0x76
01 DM(0x0001) 0x3456 BM(0x0008) 0x34
BM(0x0009) 0x56
10 DM(0x0002) 0x9800 BM(0x000A) 0x98
10 DM(0x0003) 0x7600 BM(0x000B) 0x76
11 DM(0x0004) 0x0034 BM(0x000C) 0x34
11 DM(0x0005) 0x0056 BM(0x000D) 0x56
нет
1. IACK# = 0?
да
2. Хост-компьютер активизирует управляющие сигналы IS# и IAL для записи
начального адреса внутренней памяти IDMAA и ее типа IDMAD в регистр
управления IDMA (это также можно сделать из программы процессора).
где:
LABEL – метка, т.е. идентификатор (адрес), присваиваемый
следующей за ним команде (СОР). Метка используется для передачи
управления отмеченной команде, вызова подпрограммы, а также для
отметки последней команды тела цикла DO UNTIL. Метка не
обязательна, при ее отсутствии символ : опускается;
IF cond – условная часть команды, если она есть в команде, то она
проверяется первой. Если условие cond верно, то следующая за ней
команда СОР выполняется, в противном случае – нет. Все
проверяемые условия приведены в табл. 1.19. Условная часть не
обязательна, в ее отсутствии команда считается безусловно
выполняемой. Условная часть может находиться не перед всеми
командами, так перед КОМАНДАМИ ПЕРЕСЫЛКИ (см. п. 1.17.4) и
МНОГОФУНКЦИОНАЛЬНЫМИ КОМАНДАМИ (см. п. 1.17.9)
условная часть команды НЕ используется;
СОР – (Code OPeration) код операции (команда) заканчивается всегда
символом ; (точка с запятой). Это дает возможность писать в одной
строке несколько команд;
комментарий Commentary, если он есть, всегда пишется в фигурных
скобках (в среде VisualDSP также отделяется двумя прямыми
слешами).
Таблица 1.19
Условия, проверяемые оператором IF команды
Условие Описание Выполняется, когда
EQ Равно нулю AZ = 1
NE Не равно нулю AZ = 0
LT Меньше чем ноль AN.XOR.AV = 1
GE Больше чем или равно нулю AN.XOR.AV = 0
LE Меньше чем или равно нулю (AN.XOR.AV).OR.AZ = 1
GT Больше чем ноль (AN.XOR.AV).OR.AZ = 0
AC Перенос ALU AC = 1
NOT AC Нет переноса ALU AC = 0
AV Переполнение ALU AV = 1
NOT AV Нет переполнения ALU AV = 0
MV Переполнение МАС MV = 1
NOT MV Нет переполнения МАС MV = 0
NEG Отрицательный знак Х входа AS = 1
POS Положительный знак Х входа AS = 0
NOT CE Счетчик не исчерпан
FLAG_IN *
Сигнал FI установлен На входе FI высокий
уровень сигнала
NOT Сигнал FI сброшен На входе FI низкий уровень
FLAG_IN *
сигнала
Примечание: - только для команд JUMP и CALL.
*
Примеры команд:
{Сложение содержимых AX0 и AF, если есть перенос ALU}
IF AC AR = AX0 + AF;
{Пересылка содержимого ячейки ПД с адресом 0х1234 в AX0}
AX0 = DM(0x1234);
{Многофункциональная команда МАС. Содержимое MX0 и MY0
перемножаются со знаком, результат суммируется с содержимым MR,
после чего регистры MX0 и MY0 загружаются новыми значениями из ПД
и ПП соответственно. И все это происходит за один машинный цикл.
Запятые разделяют отдельные части многофункциональной команды.}
MR = MR + MX0 * MY0 (SS), MX0 = DM(I0, M0), MY0 = PM(I4, M5);
Таблица 1.20
Регистры процессора reg и dreg
Регистры reg
SB Регистры данных dreg
PX AX0, AX1, AY0, AY1, AR
I0-I7, M0-M7, L0-L7 MX0, MX1, MY0, MY1, MR0, MR1, MR2
CNTR SI, SE, SR0, SR1
ASTAT, MSTAT, SSTAT
IMASK, ICNTL, IFC
TX0, TX1, RX0, RX1
Табл. 1.20 показывает, что к регистрам типа reg относятся почти все
регистры процессора, которые не располагаются в ПД. К отсутствующим
регистрам, в частности, относятся AF и MF. Регистры данных dreg
являются подмножеством регистров reg. К ним относятся регистры
данных вычислительных устройств, за одним исключением - SB.
Процессор поддерживает четыре метода адресации данных:
Регистровый, когда месторасположения операнда определяется
именем регистра. Пример: AX0 = SI;, где имя SI указывает на
местоположение операнда-источника, а АХ0 – операнда-приемника;
Непосредственный, когда операнд является частью команды. Пример:
I0 = 0х1234;, где константа 0х1234 присваивается индексному
регистру I0;
Прямой, когда в команде указан адрес операнда. Например: AX0 =
DM(0x1234);, где константа 0х1234 является адресом в ПД операнда-
источника;
Косвенный, когда адрес операнда находится в одном из индексных
регистров. Пример: AX0 = DM(I1, M1);, где адрес операнда-источника
содержится в индексном регистре I1. После пересылки этот регистр
инкрементируется на величину содержимого М1.
Процессор также поддерживает два метода адресации переходов:
Прямой, когда в команде явно указан адрес перехода. Например:
IF EQ JUMP zero;, где zero является меткой и при компиляции
заменяется соответствующим адресом в ПП;
Косвенный, когда адрес операнда находится в одном из индексных
регистров, предназначенных для адресации ПП (I4-I7). Пример: IF
FLAG_IN JUMP (I4);, где адрес перехода содержится в индексном
регистре I4.
Допустимые регистры:
AX0 MX0 SI SB CNTR
AX1 MX1 SE PX OWRCNTR (только запись)
AY0 MY0 SR1 ASTAT RX0
AY1 MY1 SR0 MSTAT RX1
AR MR2 I0-I7 SSTAT (только чтение) ТХ0
MR1 M0-M7 IMASK TX1
MR0 L0-L7 ICNTL IFC (только запись)
Пример: I7 = AR;
data: <константа>
'%' <имя переменной/буфера>
'^' <имя переменной/буфера>
(в среде VisualDSP <имя переменной/буфера> и
length(<имя переменной/буфера>) соответственно)
Допустимые регистры:
dreg (16-битные) reg (максимум 14-битные)
AX0 MX0 SI SB CNTR
AX1 MX1 SE PX OWRCNTR (только запись)
AY0 MY0 SR1 ASTAT RX0
AY1 MY1 SR0 MSTAT RX1
AR MR2 IMASK ТХ0
MR1 ICNTL TX1
MR0 I0-I7 IFC (только запись)
M0-M7
L0-L7
Пример: SI = DM(0x1234);
Синтаксис: dreg = DM ( I0 , M0 );
I1 M1
I2 M2
I3 M3
I4 M4
I5 M5
I6 M6
I7 M7
Синтаксис: dreg = PM ( I4 , M4 );
I5 M5
I6 M6
I7 M7
Синтаксис: DM ( I0 , M0 )= dreg ;
I1 M1 <data>
I2 M2
I3 M3
I4 M4
I5 M5
I6 M6
I7 M7
data: <константа>
'%' <имя переменной/буфера>
'^' <имя переменной/буфера>
см., также, п. 1.17.4.Б
Синтаксис: PM ( I4 , M4 )= dreg;
I5 M5
I6 M6
I7 M7
data: <константа>
'%' <имя переменной/буфера>
'^' <имя переменной/буфера>
см., также, п. 1.17.4.Б
А) СЛОЖЕНИЕ/СЛОЖЕНИЕ С ПЕРЕНОСОМ
Допустимые:
регистры xop регистры yop условия cond
AX0 MR2 AY0 EQ LE AC
AX1 MR1 AY1 NE NEG NOT AC
AR MR0 AF GT POS MV
SR1 GE AV NOT MV
SR0 LT NOT AV NOT CE
Флаги состояния:
ASTAT: 7 6 5 4 3 2 1 0
SS MV AQ AS AC AV AN AZ
- - - - * * * *
AZ – устанавливается, если результат равен нулю и сбрасывается в
противном случае. AN – устанавливается, если результат отрицательный
и сбрасывается в противном случае. AV – устанавливается, если
случилось арифметическое переполнение и сбрасывается в противном
случае. AC – устанавливается, если есть перенос и сбрасывается в
противном случае.
Флаги состояния:
ASTAT: 7 6 5 4 3 2 1 0
SS MV AQ AS AC AV AN AZ
- - - - 0 0 * *
AZ – устанавливается, если результат равен нулю и сбрасывается в
противном случае. AN – устанавливается, если результат отрицательный
и сбрасывается в противном случае. AV – всегда сбрасывается. AC –
всегда сбрасывается.
Е) ПЕРЕСЫЛКА/ОЧИСТКА
Пример: IF LT AR = - AY0;
Флаги состояния:
ASTAT: 7 6 5 4 3 2 1 0
SS MV AQ AS AC AV AN AZ
- - - - * * * *
AZ – устанавливается, если результат равен нулю и сбрасывается в
противном случае. AN – устанавливается, если результат отрицательный
и сбрасывается в противном случае. AV – устанавливается, если операнд
= 0х8000 и сбрасывается в противном случае. AC – устанавливается, если
операнд равен нулю и сбрасывается в противном случае.
И) АБСОЛЮТНОЕ ЗНАЧЕНИЕ
Флаги состояния:
ASTAT: 7 6 5 4 3 2 1 0
SS MV AQ AS AC AV AN AZ
- - - * 0 * * *
AZ – устанавливается, если результат равен нулю и сбрасывается в
противном случае. AN – устанавливается, если хор = 0х8000 и
сбрасывается в противном случае. AV – устанавливается, если хор =
0х8000 и сбрасывается в противном случае. AC – всегда сбрасывается.
AS – устанавливается, если операнд источник отрицательный и
сбрасывается в противном случае.
К) ИНКРЕМЕНТ
Синтаксис:
Пример: IF GT AF = AF + 1;
Л) ДЕКРЕМЕНТ
Пример: IF EQ AR = AY1 – 1;
М) ДЕЛЕНИЕ
Допустимые:
регистры xop регистры yop
AX0 MR2 AY1
AX1 MR1 AF
AR MR0
SR1
SR0
Флаги состояния:
ASTAT: 7 6 5 4 3 2 1 0
SS MV AQ AS AC AV AN AZ
- - * - - - - -
AQ – формируется командами DIVS и DIVQ.
А) УМНОЖЕНИЕ
Флаги состояния:
ASTAT: 7 6 5 4 3 2 1 0
SS MV AQ AS AC AV AN AZ
- * - - - - - -
MV (MAC oVerflow – переполнение МАС) – устанавливается, если
не все 9 старших битов регистра MR являются нулями или единицами.
Сбрасывается в противном случае.
Б) УМНОЖЕНИЕ/НАКОПЛЕНИЕ
В) УМНОЖЕНИЕ/ВЫЧИТАНИЕ
Синтаксис: [IF[IF
cond]
cond]MRMR= MR – xop
= MR * *yopyop (SS)
- xop (SS) ; ;
MFMF xopxop (SU)
(SU)
(US)
(US)
(UU)
(UU)
(RND)
(RND)
Г) ОЧИСТКА
Пример: IF GT MR = 0;
Флаги состояния:
ASTAT: 7 6 5 4 3 2 1 0
SS MV AQ AS AC AV AN AZ
- 0 - - - - - -
MV – всегда сбрасывается.
Д) ПЕРЕСЫЛКА MR
Пример: IF EQ MF = MR (RND);
Е) УСЛОВНОЕ НАСЫЩЕНИЕ MR
А) АРИФМЕТИЧЕСКИЙ СДВИГ
Допустимые:
регистры xop условия cond
SI AR EQ LE AC
SR1 MR2 NE NEG NOT AC
SR0 MR1 GT POS MV
MR0 GE AV NOT MV
LT NOT AV NOT CE
Б) ЛОГИЧЕСКИЙ СДВИГ
В) НОРМАЛИЗАЦИЯ
Г) ИЗВЛЕЧЕНИЕ ЭКСПОНЕНТЫ
Флаги состояния:
ASTAT: 7 6 5 4 3 2 1 0
SS MV AQ AS AC AV AN AZ
* - - - - - - -
SS – устанавливается командой EXP в режимах HI или HIX равным
СЗР входного операнда, если AV = 0, в противном случае устанавливается
равным инвертированному значению СЗР входного операнда. Команда
EXP в режиме LO не влияет на этот флаг.
А) КОМАНДА ПЕРЕХОДА
Д) ВОЗВРАТ ИЗ ПОДПРОГРАММ
Пример: IF LE RTS;
Описание: Если команда выполняется (условие отсутствует или вер-
нуло TRUE), то процессор производит считывание с вершины стека РС
адреса возврата из подпрограммы, который он пересылает в РС.
Указатель стека РС при этом соответственно корректируется.
Если RTS является последней командой внутри цикла DO UNTIL, то
необходимо корректировать состояния стеков цикла.
Е) ВОЗВРАТ ИЗ ПРЕРЫВАНИЙ
Пример: IF MV RTI;
Ж) ЦИКЛ DO UNTIL
З) ЭНЕРГОСБЕРЕЖЕНИЕ
Синтаксис: IDLE;
IDLE(n);
I M4
4
I M5
5
I M6
6
Допустимые dreg:
AX0 MX0 SI
AX1 MX1 SE
AY0 MY0 SR0
AY1 MY1 SR1
AR MR0
MR1
MR2
I4 M4
I5 M5
I6 M6
I7 M7
PM( I4 , M4 )
I5 M5
I6 M6
I7 M7
Г) ЧТЕНИЕ ПД И ПП
Синтаксис:
AX0 = DM ( I0 , M0 ), AY0 = PM ( I4 , M4 );
AX1 I1 M1 AY1 I5 M5
MX0 I2 M2 MY0 I6 M6
MX1 I3 M3 MY1 I7 M7
Д) ВЫЧИСЛЕНИЯ С ЧТЕНИЕМ ПД И ПП
Синтаксис:
<ALU> , AX0 = DM ( I0 , M0 ), AY0 = PM ( I4 , M4 );
<MAC> AX1 I1 M1 AY1 I5 M5
MX0 I2 M2 MY0 I6 M6
MX1 I3 M3 MY1 I7 M7
TOPPCSTACK = reg;
Синтаксис: MODIFY( I0 , M0 );
I1 M1
I2 M2
I3 M3
I4 M4
I5 M5
I6 M6
I7 M7
Г) НЕТ ОПЕРАЦИИ
Синтаксис: NOP;
Д) РАЗРЕШЕНИЕ/ЗАПРЕЩЕНИЕ ПРЕРЫВАНИЙ
// Объявление констант
#define IDMA 0x3fe0
#define BDMA_BIAD 0x3fe1
#define BDMA_BEAD 0x3fe2
#define BDMA_BDMA_Ctrl 0x3fe3
#define BDMA_BWCOUNT 0x3fe4
#define PFDATA 0x3fe5
#define PFTYPE 0x3fe6
#define SPORT1_Autobuf 0x3fef
#define SPORT1_RFSDIV 0x3ff0
#define SPORT1_SCLKDIV 0x3ff1
#define SPORT1_Control_Reg 0x3ff2
#define SPORT0_Autobuf 0x3ff3
#define SPORT0_RFSDIV 0x3ff4
#define SPORT0_SCLKDIV 0x3ff5
#define SPORT0_Control_Reg 0x3ff6
#define SPORT0_TX_Channels0 0x3ff7
#define SPORT0_TX_Channels1 0x3ff8
#define SPORT0_RX_Channels0 0x3ff9
#define SPORT0_RX_Channels1 0x3ffa
#define TSCALE 0x3ffb
#define TCOUNT 0x3ffc
#define TPERIOD 0x3ffd
#define DM_Wait_Reg 0x3ffe
#define System_Control_Reg 0x3fff
#include "Reg2181.inc"
// Объявление переменных и буферов предваряется именованием секции,
// в которых они будут располагаться физически
.SECTION/DM data_sect;
// Директива ALIGN выравнивает адрес rx_buf[0] на границе кратной
// 4-ем. Это необходимо сделать потому, что буфер rx_buf является
// циклическим, а директива CIRC прежнего ассемблера не
// поддерживается. Кратность выбирается из следующих соображений -
// это ближайшее сверху к размерности буфера число, кратное целой
// степени двойки. Это применимо и к буферам tx_buf и init_cmds.
.ALIGN 4;
.VAR rx_buf[3]; // циклический буфер, принимаемых из кодека
// данных (всегда три слова, первое является
// словом состояния кодека, второе – выходом
// левого АЦП, третье – выходом правого АЦП)
.ALIGN 4;
// Циклический буфер, передаваемых в кодек данных (также три слова,
// первое является кодом команды, второе – выводимые данные через
// левый ЦАП, третье – выводимые данные через правый ЦАП)
.VAR tx_buf[3] = 0xc000, 0x0000, 0x0000;
.ALIGN 16;
// Команды инициализации кодека, первая цифра (с) всех команд
// разрешает изменение управляющих регистров, а также конфигурирует
// кодек на обновление битов переполнения в слове состояния после
// выполнения очередного отсчета
.VAR init_cmds[13] = 0xc003, // усиление по левому входу 1 – 4,5 dB
0xc103, // усиление по правому входу 1 – 4,5 dB
0xc288, // запрет левого дополнительного входа 1
0xc388, // запрет правого дополнительного входа 1
0xc488, // запрет левого дополнительного входа 2
0xc588, // запрет правого дополнительного входа 2
0xc680, // выключение левого ЦАП
0xc780, // выключение правого ЦАП
0xc85b, // частота синхронизации 16,9344 МГц,
// частота отсчетов 44,1 КГц, стерео,
// линейное представление отсчетов, 16 бит
0xc909, // запуск автокалибровки с возможностью
// получения данных из кодека
0xca00,
0xcc40, // разрешение двухпроводной связи
0xcd00; // запрет цифрового смешивания сигналов
// Признак окончания инициализации кодека (если stat_flag = 0)
.VAR stat_flag;
// Объявление (именование) программной секции
.SECTION/PM program_sect;
ax0 = 0;
dm(SPORT0_RFSDIV) = ax0;
dm (SPORT0_SCLKDIV) = ax0;
// Длина данных – 16 бит, разрешение многоканального режима
// (см. п. 1.12.7) приема/передачи (см. п. П1.4)
ax0 = b#1000011000001111;
dm (SPORT0_Control_Reg) = ax0;
// Для передачи разрешены каналы 2, 1, 0
ax0 = b#0000000000000111;
dm (SPORT0_TX_Channels0) = ax0;
// Для передачи разрешены каналы 18, 17, 16
ax0 = b#0000000000000111;
dm (SPORT0_TX_Channels1) = ax0;
// Для приема разрешены каналы 2, 1, 0
ax0 = b#0000000000000111;
dm (SPORT0_RX_Channels0) = ax0;
// Для приема разрешены каналы 18, 17, 16
ax0 = b#0000000000000111;
dm (SPORT0_RX_Channels1) = ax0;
check_init:
ax0 = dm (stat_flag); // ожидание окончания
af = pass ax0; // инициализации кодека, т.е.
if ne jump check_init; // выполнения условия stat_flag=0
ay0 = 2;
check_acih:
ax0 = dm (rx_buf); // после инициализации ожидание
ar = ax0 and ay0; // входа кодека в автокалибровку,
if eq jump check_acih; // т.е. выполнения условия ACI=1
check_acil:
ax0 = dm (rx_buf); // ожидание выхода кодека из
ar = ax0 and ay0; // автокалибровки, т.е.
if ne jump check_acil; // выполнения условия ACI=0
idle;
#include <Reg2181.inc>;
// Частота кварцевого резонатора в КГц
#define CRYSTAL_FREQ_IN_kHZ 16667
{
Для поддержки интерфейса RS-232 ADSP-2181 в составе EZ-KIT Lite
использует ресурсы FLAG_IN, FLAG_OUT и TIMER следующим
образом:
ADSP-2181 FLAG_OUT ----------> AD233 ----------> RS-232 TX
ADSP-2181 FLAG_IN <----------- AD233 <---------- RS-232 RX
(TIMER определяет скорость обмена)
Или (в зависимости от определения HOST):
ADSP-2181 PF[2] ----------> AD233 ----------> RS-232 TX
ADSP-2181 PF[1] <---------- AD233 <---------- RS-232 RX
flag_out/PF[2]
вызовы: нет
}
init_uart:
ax0=0;
dm(TSCALE)=ax0; // декремент TCOUNT каждый
// машинный цикл
ax0=PERIOD; // установка скорости обмена (9600 Бод)
dm(TCOUNT)=ax0;
dm(TPERIOD)=ax0; // прерывания генерируются с тройной
// частотой
ax0=1;
dm(flag_tx_ready)=ax0; // передачи нет
dm(flag_rx_ready)=ax0; // установки режима по умолчанию
// (UART занят)
dm(flag_rx_stop_yet)=ax0;
dm(flag_rx_no_word)=ax0;
dm(flag_rx_off)=ax0; // приемник выключен
#ifdef HOST
set flag_out; // TxD = 1
#else
ax0 = dm(PFTYPE); // PF[2] - TxD
ar = setbit 2 of ax0;
dm(PFTYPE) = ar;
ax0 = dm(PFDATA); // TxD = 1
ar = setbit 2 of ax0;
dm(PFDATA) = ar;
#endif
ifc = b#00000011111111; // очистка запросов прерываний
nop; // ожидание очистки
ax0 = b#0000100000000000;
ay0 = dm (System_Control_Reg);
ar = ax0 or ay0; // разрешение SPORT1
ay0 = b#1111101111111111;
ar = ar and ay0; // очистка для разрешения FI, и т.д.
dm (System_Control_Reg) = ar;
ax0=imask;
ay0=b#0000000001;
ar=ax0 or ay0;
imask=ar; // разрешение прерываний TIMER
ena timer; // запуск TIMER
rts;
// Передающая секция
ay0=dm(timer_tx_ctr); // проверка timer_tx_ctr на 0,
ar=ay0-1; // если не 0, то декремент, сохранение
dm(timer_tx_ctr)=ar; // и переход на прием, в противном
if ne jump receiver; // случае передача
sr1=dm(internal_tx_buffer);
// Сдвиг вправо младшего значащего разряда internal_tx_buffer в SR1.
// В SR0 этот бит является знаковым, в соответствии с ним
// FLAG_OUT/PF[2] сбрасывается или устанавливается
sr=lshift sr1 by -1 (hi);
dm(internal_tx_buffer)=sr1;
ar=pass sr0;
#ifdef HOST
if ge reset flag_out;
if lt set flag_out;
#else
ax0 = dm(PFDATA);
if ge ar = clrbit 2 of ax0;
if lt ar = setbit 2 of ax0;
dm(PFDATA) = ar;
#endif
// Приемная секция
receiver:
ax0=dm(flag_rx_off); // приемник включен?
none=pass ax0;
if ne rti; // если нет, то выход
rx_test_busy:
ax0=dm(flag_rx_ready); // проверка наличия режима приема,
ar=pass ax0; // если прием идет, то переход на прием
if eq jump rx_busy; // очередного бита, в противном случае -
// проверка старт бита
#ifdef HOST
if flag_in jump rx_exit; // если flag_in=1, то старт бита нет –
// выход
#else
ax0=dm(PFDATA); // если PF[1]=1, то старт бита нет –
ay0 = 2; // выход
ar = ax0 and ay0;
if ne jump rx_exit;
#endif
ax0=0;
dm(flag_rx_ready)=ax0 // в противном случае, устанавливаем
dm(internal_rx_buffer)=ax0; // флаг режима приема и очищаем
// приемный регистр
ax0=4; // первый бит необходимо проверить через
dm(timer_rx_ctr)=ax0; // 4 прерывания, чтобы проверка
// пришлась на середину его битового
// интервала
ax0=rx_num_of_bits; // инициализация числа оставшихся
dm(bits_left_in_rx)=ax0; // для приема битов
rx_exit:
rti;
rx_busy:
ay0=dm(timer_rx_ctr);// декремент timer_rx_ ctr и проверка его
ar=ay0-1; // на 0, если не 0, то битовый интервал
dm(timer_rx_ctr)=ar; // не выдержан - выход
if ne rti;
rcv:
// Битовый интервал выдержан, прием очередного бита
ax0=3; // восстановление счетчика бит. интервала
dm(timer_rx_ctr)=ax0; // проверка следующего бита
// произойдет через три прерывания
ay0=RX_BIT_ADD;
ar=dm(internal_rx_buffer);
#ifdef HOST
// Если flag_in=0, то переход на сдвиг
if not flag_in jump pad_zero;
#else
ax0 = dm(PFDATA); // если PF[1] =0, то переход на сдвиг
ay1 = 2;
af = ax0 and ay1;
if eq jump pad_zero;
#endif
// подстыковка 1
ar=ar+ay0;
pad_zero:
sr=lshift ar by -1 (lo); // сдвиг вправо результата для
dm(internal_rx_buffer)=sr0; // подготовки к приему следующего
// бита
ay0=dm(bits_left_in_rx); // декремент счетчика оставшихся
ar=ay0-1; // битов, если осталось один или
dm(bits_left_in_rx)=ar; // более битов, то выход (остаемся в
if gt rti; // режиме приема), в противном
// случае – осталось сформировать
// стоп бит
ax0=dm(flag_rx_no_word);
none=pass ax0;
if ne jump get_char_ax1_to1; // ожидание приема символа
ar = ax1; // символ принят, восстановление ar
jump get_char_ax1x; // чтение принятого символа
get_char_ax1_to2:
ar = ax1; // восстановление ar
ax1 = 0xffff; // установка признака тайм-аута
rts;
//---------- Вывод символа через UART
{
Использование регистров:
вход: ах1 (сохраняется)
обновленные: нет
выход: нет
измененные: ax0, (ar, sr)
сохраненные: нет
память: dm(flag_tx_ready), dm(user_tx_buffer), (dm(timer_tx_ctr),
dm(bits_left_in_tx), dm(internal_tx_buffer))
вызовы: invoke_UART_transmit
}
out_char_ax1:
ax0=dm(flag_tx_ready);
none=pass ax0;
if eq jump out_char_ax1; // ожидание выдачи предыдущего
// символа
dm(user_tx_buffer)=ax1;
call invoke_UART_transmit; // выдача нового символа
rts;
#include <Signal.h>
void main(void) {
handler = process_a_bit; // инициализация указателя на обработчик
// прерывания от таймера
// Запись адреса обработчика прерываний в таблицу векторов
// прерываний. Константа SIGTIMER определена в Signal.h
interrupt(SIGTIMER, handler);
init_uart(); // инициализация UART
turn_rx_on(); // разрешение приема из UART
while(1) {
ch = get_char(); // ожидание и прием символа из UART
out_char(ch); // эхо-возврат принятого символа
}
}
Рис. 1.18. СИ программа поддержки UART
_stop_uart:
// Тело подпрограммы полностью идентично телу подпрограммы stop_uart
// на рис. 1.17
rts
_process_a_bit:
// Тело подпрограммы полностью идентично телу подпрограммы
// process_a_bit на рис. 1.17, только все команды rti необходимо заменить
// на команды rts
rts
invoke_UART_transmit:
// Тело подпрограммы полностью идентично телу подпрограммы
// invoke_UART_transmit на рис. 1.17
rts
_char_received:
ax1 = 1;
ax0=dm(flag_rx_no_word);
none=pass ax0;
if eq rts; // если символ из UART получен, то возвращаем 1
ax1 = 0; // в противном случае возвращаем 0
rts;
_get_char:
// Тело подпрограммы полностью идентично телу подпрограммы
// get_char_ax1 на рис. 1.17
rts;
_out_char:
ax0=dm(flag_tx_ready);
none=pass ax0;
if eq jump _out_char; // ожидание передачи предыдущего
// символа
// Формирование указателя (I6) на передаваемый параметр функции
I6 = I4; M5 = 1; MODIFY(I6, M5);
{Pop arg1}
AX1 = DM(I6, M5);
dm(user_tx_buffer)=ax1;
call invoke_UART_transmit; // выдача его в UART
rts;
_turn_rx_on:
// Тело подпрограммы полностью идентично телу подпрограммы
// turn_rx_on на рис. 1.17
rts;
_turn_rx_off:
// Тело подпрограммы полностью идентично телу подпрограммы
// turn_rx_off на рис. 1.17
rts;
Устройство с
последователь-
ным
интерфейсом
Системный
интерфейс
или
Контроллер
16
Рис. 2.1. Структурная схема системы на основе ADSP-2181 (начало)
11
ADDR10 А10-А0
-0DATA23- I/O SPACE
8IOMS#
(PERIPHERALS)
8
2048 портов В/ВD15-
D0CS#
14
ADDR13 А13-А0
-0DATA23- PMOVERLAY
0PMS# MEMORY
24 Два по 8К
сегмента ППD23-D0CS#
14
ADDR13 А13-А0
-0DATA23- DMOVERLAY
8DMS# MEMORY
16 Два по 8К
сегмента ПДD15-D0CS#
Рис. 2.2. Структурная схема системы на основе ADSP-2181
(окончание, сигналы RD#, WR# условно не показаны)
ПРИЛОЖЕНИЕ 1
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1
S0E S1E S1C PWAIT
где: S0E – SPORT0 Enable (разрешение SPORT0), если S0E = 1, то
SPORT0 разрешен, в противном случае – запрещен;
S1E – SPORT1 Enable (разрешение SPORT1), если S1E = 1, то
SPORT1 разрешен, в противном случае – запрещен;
S1C – SPORT1 Configure (конфигурирование SPORT1), если S1C = 1,
то разрешен последовательный порт, в противном случае
разрешены FI, FO, IRQ0#, IRQ1#, SCLK1 (см. п. 1.12.2);
PWAIT – число состояний ожидания при обращении к внешней ПП.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
DWAIT IOWAIT3 IOWAIT2 IOWAIT1 IOWAIT0
где: DWAIT – число состояний ожидания при обращении к внешней ПД;
IOWAIT0 - IOWAIT3 – число состояний ожидания при обращении к
следующим диапазонам адресов адресного пространства
ввода/вывода соответственно: 0x000-0x1FF, 0x200-0x3FF,
0x400-0x5FF и 0x600-0x7FF.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0
С В TIREG TMREG RIREG RMREG TBUF RBUF
где: С – CLKODIS (CLKOUT disable control bit) бит управления запретом
сигнала CLKOUT;
B – BIASRND (MAC biased rounding control bit) бит управления
смещенным округлением МАС, если BIASRND = 0, то
округление нормальное, в противном случае – смещенное;
TIREG, TMREG – номера индексного и модификационного
регистров, связанных с передающим буфером, соответственно;
RIREG, RMREG – номера индексного и модификационного
регистров, связанных с приемным буфером, соответственно;
TBUF, RBUF – биты разрешения передачи и приема с
автобуферизацией (1 – автобуферизация разрешена, 0 –
запрещена).
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
M IS R W T S I F V N DTYPE SLEN
где: М – MCE (Multichannel enable) разрешение многоканального режима,
если = 1, то многоканальный режим разрешен, в противном
случае – запрещен;
IS – ISCLK (Internal Serial clock generation) разрешение
формирования внутренней синхронизации
последовательного порта, если ISCLK = 1, то разрешена
внутренняя синхронизация, в противном случае – внешняя;
R – RFSR (Receive frame sync required) требование фреймовой
синхронизации при приеме данных, если RFSR = 0, то
фреймовая синхронизация при приеме данных отсутствует, в
противном случае – присутствует;
W – RFSW (receive frame sync Width) режим фреймовой
синхронизации при приеме данных, если RFSW = 0, то
нормальный, в противном случае – альтернативный;
Т – TFSR (Transmit frame sync required) требование фреймовой
синхронизации при передаче данных, если TFSR = 0, то
фреймовая синхронизация при передаче данных отсутствует,
в противном случае – присутствует;
S – TFSW (transmit frame Sync width) режим фреймовой
синхронизации при передаче данных, если RFSW = 0, то
нормальный, в противном случае – альтернативный;
I – ITFS (Internal transmit frame sync enable) источник фреймовой
синхронизации при передаче, если ITFS = 0, то используется
внешний сигнал TFS, в противном случае формируется
собственный сигнал TFS;
F – IRFS (internal receive Frame sync enable) источник фреймовой
синхронизации при приеме, если IRFS = 0, то используется
внешний сигнал RFS, в противном случае формируется
собственный сигнал RFS;
V – INVTFS (inVert transmit frame sync) выбор уровня активности
фреймовых сигналов при передаче, если INVTFS = 0, то
уровень TFS высокий, в противном случае – низкий;
N – INVRFS (receive traNsmit frame sync) выбор уровня активности
фреймовых сигналов при приеме, если INVRFS = 0, то
уровень RFS высокий, в противном случае – низкий;
DTYPE – (Data type) формат данных, возможны следующие значения
этого битового поля: 00 – правое выравнивание (старшие
неиспользуемые биты заполняются нулями); 01 – правое
выравнивание (старшие неиспользуемые биты заполняются
значением знакового бита); 10 – компандинг с
использованием -закона; 11 – компандинг с использованием
А-закона;
SLEN – (serial word length) длина слова данных в битах, в это поле
следует записывать действительное значение длины
уменьшенное на единицу.
Если разрешен многоканальный режим работы последовательного
порта (МСЕ = 1), то некоторые биты регистра управления
последовательным портом изменяют свое функциональное назначение, в
частности:
биты 13-10 хранят значение задержки многоканального фрейма
(Multichannel Frame Delay – MFD);
бит 9 определяет многоканальную длину (Multichannel Length –
MCL), если MCL = 1, то объем фрейма составляет 32 слова, в
противном случае – 24 слова;
бит 7 (Invert Transmit Data Valid – INVTDV) определяет уровень
активности сигнала TDV (см. п. 1.12.7).
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0
X D P U TIREG TMREG RIREG RMREG TBUF RBUF
где: Х – XTALDIS (Xtal pin disable during powerdown) запрещение сигнала
XTAL при переходе в режим энергосбережения, если XTALDIS
= 1, то сигнал XTALDIS запрещен, в противном случае –
разрешен. Если используется внешняя синхронизация сигнал
(собственный кварцевый резонатор отсутствует), то сигнал
XTAL необходимо запрещать;
D – XTALDELAY (Delay startup from powerdown) задержка начала
выполнения программы при выходе из режима
энергосбережения, если XTALDELAY = 1, то процессор перед
началом выполнения программы делает 4096 холостых циклов.
Это лучше делать всегда при выходе из режима
энергосбережения для того, чтобы внутренний узел
автоматической подстройки частоты начал стабильно работать;
Р – PDFORCE (PD force) формирование запроса на прерывание (если
PDFORCE = 1) powerdown (см. табл. 1.8);
U – PUCR (PowerUp Context Reset) сброс контекста при перезагрузке,
если PUCH = 1, то программный сброс, в противном случае отказ
от выполнения.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
O IS R W T S I F V N DTYPE SLEN
где: O – состояние флага Flag Out (только для чтения, см. п. 1.14.3).
Остальные биты и битовые поля имеют то же функциональное
назначение, как в регистре управления SPORT0 (см. п. П.1.4) за
исключением того, что SPORT1 не может работать в многоканальном
режиме.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0
BMWAIT IOM BM DM PM PFTYPE
где: BMWAIT – число состояний ожидания при обращении к БП;
IOM, BM, DM, PM – биты, определяющие формирование сигнала
CMS# (см. п. 1.1) при обращении к адресным пространствам
ввода/вывода, БП, внешней ПД, внешней ПП соответственно,
если этот бит содержит 1, то при обращении к
соответствующему адресному пространству сигнал CMS# будет
формироваться, в противном случае – нет;
PFTYPE – битовое поле, определяющее тип флага PF[7:0], если
какой-либо бит этого поля содержит 0, то соответствующий ему
бит PF[7:0] будет запрограммирован на ввод, в противном случае
– на вывод.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
PFDATA
где: PFDATA - регистр данных программируемых флагов, при записи в
этот регистр данные появляются на тех флагах PF[7:0],
которые запрограммированы на выход (см. п. П1.7), при
чтении внешние данные находятся в тех флагах PF[7:0],
которые запрограммированы на ввод (см. п. П1.7).
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
BWCOUNT
где: BWCOUNT – (Byte Word COUNT) содержимое счетчика слов,
передаваемых с помощью BDMA.
15 14 13
12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 00 0 0 0 0 0 0 0 0 1 0 0 0
BMPAGE B D BTYPE
где: BMPAGE – (Byte Memory Page) номер начальной страницы БП, с
которой взаимодействует BDMA;
В – BCR (BDMA Context Reset) сброс контекста во время работы
BDMA, если BCR = 0, то процессор выполняет
программу во время работы BDMA, в противном случае
– нет;
D – BDIR (BDMA DIRection) направление передачи данных, если
BDIR = 0, то происходит чтение БП, в противном случае
– запись БП;
BTYPE – (BDMA data TYPE) формат передаваемых данных, см. табл.
П1.1.
Таблица П1.1
Формат данных BDMA
BTYPE Внутреннее адресное Длина слова Выравнивание
Пространство
00 PM 24 Целое слово
01 DM 16 Целое слово
10 DM 8 СЗР
11 DM 8 МЗР
где: СЗР – старшие значащие разряды (младшие 8 бит заполняются
нулями);
МЗР – младшие значащие разряды (старшие 8 бит заполняются
нулями).
15 14 13 12 11 10 9 7 8 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
BEAD
где: BEAD – (BDMA External ADdress) начальный адрес БП BDMA.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
M IDMAA
где: М – IDMAD (IDMA Destination) тип памяти назначения, если ID-
MAD = 0, то ПП, в противном случае – ПД;
IDMAA – (IDMA Address) начальный адрес внутренней памяти
процессора.
4 3 2 1 0
0 0 0 0 0
IN IRQ2# Sens IRQ1# Sens IRQ0# Sens
где: IN – (Interrupt Nesting) разрешение/запрет вложенных прерываний,
если бит установлен, то вложенные прерывания разрешены, в
противном случае – запрещены;
IRQ2# Sens, IRQ1# Sens, IRQ0# Sens – (Interrupt ReQuest Sensitivity)
установка чувствительности запросов на прерывания, если
какой-либо из этих битов установлен, то определена
чувствительность к фронту соответствующего запроса на
прерывание, в противном случае определена чувствительность
к уровню.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Биты разрешения прерываний (если = 1)
Биты разрешения прерываний действуют на следующие запросы
прерывания:
бит 0 – на прерывания от таймера;
бит 1 – на прерывания от SPORT1 (прием) или IRQ0#;
бит 2 – на прерывания от SPORT1 (передача) или IRQ1#;
бит 3 – на прерывания от BDMA;
бит 4 – на прерывания от IRQE#;
бит 5– на прерывания от SPORT0 (прием);
бит 6 – на прерывания от SPORT0 (передача);
бит 7 – на прерывания от IRQL0#;
бит 8 – на прерывания от IRQL1#;
бит 9 – на прерывания от IRQ2#.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Биты форсирования прерываний Биты очистки прерываний
Биты регистра активны, если = 1, и выполняют следующие функции:
бит 15, бит 7 – форсирование/очистка IRQ2#;
бит 14, бит 6 – форсирование/очистка SPORT0 (передача);
бит 13, бит 5 – форсирование/очистка SPORT0 (прием);
бит 12, бит 4 – форсирование/очистка IRQE#;
бит 11, бит 3 – форсирование/очистка BDMA;
бит 10, бит 2 – форсирование/очистка SPORT1 (передача) или IRQ1#;
бит 09, бит 1 – форсирование/очистка SPORT1 (прием) или IRQ0#;
бит 08, бит 0 – форсирование/очистка прерывания таймера.
ЛИТЕРАТУРА