Ris_DSP / TZOS_red4_ch2_C25_Tablet
.pdf143 |
|
Приводится словесное описание операций, |
осуществляемых |
процессором при выполнении данной команды. |
|
СЛОВА
Указывается количество слов, которое данная команда занимает в памяти программ. Например: 1
ЦИКЛЫ Класс II (для TMS320C25)
Класс команды по количеству циклов. Конкретное количество циклов, соответствующее каждому классу приведено в User's Guide (руководстве пользователя) для процессора.
ПОВТОРЯЕМОСТЬ ДА или НЕТ Команда может быть повторяема – «да», или не повторяема – «нет».
Неповторяемые команды не рекомендуется использовать после команд
RPT и RPTK.
ПРИМЕР
Приводится пример выполнения программы, изменения, которые происходят с содержимым памяти и регистров приводятся в показанном формате.
|
|
|
Таблица 4.12 |
|
|
Символ |
|
Значение |
|
|
|
A |
Адрес порта |
|
|
|
|
АСС |
Аккумулятор |
|
|
|
|
Arn |
Вспомогательный |
регистр |
n |
(AR0-AR7 |
являются |
|
определенными символами ассемблера, |
|
|||
|
равными 0-7 соответственно) |
|
|
||
ARP |
Указатель вспомогательного регистра |
|
|
||
BIO |
Вход контроля ветвления |
|
|
|
|
В |
4-разрядное поле, определяющее код |
|
|
||
C |
Бит переноса |
|
|
|
|
CM |
2-разрядное поле, определяющее режим сравнения |
|
|
144 |
|
|
CNF |
Бит контроля конфигурации RAM |
D |
Поле адреса памяти данных |
DATn |
Метка, определяющая ячейку памяти данных n |
dma |
Адрес памяти данных |
DP |
Указатель страницы данных |
FO |
Бит состояния формата |
I |
Бит метода адресации |
INTM |
Бит флага режима прерывания |
OV |
Бит переполнения |
OVM |
Режим бита переполнения |
K |
Поле непосредственного операнда |
P |
Регистр произведения |
PA |
Адрес порта (PA0-PA15) являются определенными |
|
символами ассемблер равными 0-15, соответственно |
PC |
Счетчик программ |
PM |
2-разрядное поле, определяющий код сдвига выходного |
|
сигнала Р-регистра |
pma |
Адрес памяти программ |
PRGn |
Метка, определяющая ячейку памяти программ |
R |
3-разрядное поле операнда, определяющего вспомогательный |
|
регистр |
RPTC |
Счетчик повторения |
S |
4-разрядный код сдвига влево |
ST0, |
Статусные регистры |
ST1 |
|
T |
Т-регистр |
TOS |
Вершина стека |
X |
3-разрядное поле сдвига влево аккумулятора |
→ |
Символ присваивания |
| | |
Указывает абсолютную величину |
Italics |
Элементы с шрифтом Italics определяются пользователем |
[ ] |
Элементы в квадратных скобках являются дополнительными |
( ) |
Указывают «содержимое чего-либо» |
145
{} Элементы в фигурных скобках являются альтернативными, один из них должен быть выбран
Примечание: Пробелы или интервалы должны иметь место там, где показано.
|
Таблица 4.13 |
|
||
Инстр. |
Описание |
Операция |
|
Сл |
КОМАНДЫ, ВЫПОЛНЯЮЩИЕ ОПЕРАЦИИ С АККУМУЛЯТОРОМ |
|
|||
ABS |
Абсолютная величина АСС |
None |
|
1 |
ADD |
Сложение с АСС со сдвигом |
dma[,shift]; |
|
1 |
|
|
ind[,shift[,nextARP]] |
|
|
ADDC |
Сложение с АСС с переносом |
dma; ind[,next ARP] |
|
1 |
# |
|
|
|
|
ADDH |
Сложение со старшими разрядами АСС |
dma; ind[,next ARP] |
|
1 |
ADDK |
Сложение с АСС короткой константы |
constant |
|
1 |
# |
|
|
|
|
ADDS |
Сложение с АСС без расширения знака |
dma |
|
1 |
ADDT |
Слож. с АСС со сдвигом, определенным |
dma; ind[,next ARP] |
|
1 |
|
Т-рег. |
|
|
|
ADLK |
Слож. с АСС длинной константы со |
constant[,shift] |
|
2 |
|
сдвигом |
|
|
|
AND |
Логическое “И” с АСС |
dma; ind[,next ARP] |
|
1 |
ANDK |
Логическое “И” константы с АСС |
constant[,shift] |
|
2 |
CMPL |
Дополнение АСС (логическая инверсия) |
None |
|
1 |
LAC |
Загрузка АСС со сдвигом |
dma[,shift]; |
|
1 |
|
|
ind[,shift[,nextARP]] |
|
|
LACK |
Загрузка АСС короткой константой |
constant |
|
1 |
LACT |
Загрузка АСС со сдвигом, определенным |
dma; ind[,next ARP] |
|
1 |
|
Т-рег. |
|
|
|
LALK |
Загрузка АСС длинной константой |
constant[,shift] |
|
2 |
NEG |
Логическое “НЕ” с АСС |
None |
|
1 |
NORM |
Нормализация АСС |
ind |
|
1 |
OR |
Логическое “ИЛИ” с АСС |
dma; ind[,next ARP] |
|
1 |
ORK |
Логическое “ИЛИ” длинной константы с |
constant[,shift] |
|
2 |
|
АСС |
|
|
|
ROL # |
Вращение АСС влево |
None |
|
1 |
ROR # |
Вращение АСС вправо |
None |
|
1 |
SACH |
Сохранить старшее слово АСС со сдвигом |
dma[,shift]; |
|
1 |
|
|
ind[,shift[,nextARP]] |
|
|
SACL |
Сохранить младшее слово АСС со сдвигом |
dma[,shift]; |
|
1 |
146
|
|
ind[,shift[,nex ARP]] |
|
SBLK |
Вычитание из АСС длинной константы со |
constant[,shift] |
2 |
|
двигом |
|
|
SFL |
Сдвиг АСС влево |
None |
1 |
SFR |
Сдвиг АСС вправо |
None |
1 |
SUB |
Вычитание из АСС со сдвигом |
dma[,shift]; |
1 |
|
|
ind[,shift[,nextARP]] |
|
SUBB |
Вычитание из АСС с переносом |
dma; ind[,next ARP] |
1 |
# |
|
|
|
SUBC |
Вычитание условное |
dma; ind[,next ARP] |
1 |
SUBH |
Вычитание из старшего слова АСС |
dma; ind[,next ARP] |
1 |
SUBK |
Вычитание из АСС короткой константы |
Constant |
1 |
# |
|
|
|
SUBS |
Вычит. из мл. слова АСС без расширения |
dma; ind[,next ARP] |
1 |
|
знака |
|
|
SUBT |
Вычитание из АСС со сдвигом, |
dma; ind[,next ARP] |
1 |
|
определенным Т-рег. |
|
|
XOR |
“Исключ. ИЛИ” с АСС |
dma; ind[,next ARP] |
1 |
XORK |
“Исключ. ИЛИ” АСС и константы со |
constant[,shift] |
2 |
|
сдвигом |
|
|
ZAC |
Обнуление АСС |
None |
1 |
ZALH |
Обнуление мл. слова АСС и загр. числа в |
dma; ind[,next ARP] |
1 |
|
ст. слово АСС |
|
|
ZALR |
Что и ZALH, но со вращением |
dma; ind[,next ARP] |
1 |
# |
|
|
|
ZALS |
Обнуление АСС, загр. мл. слова АСС без |
dma; ind[,next ARP] |
1 |
|
расшир. знака |
|
|
КОМАНДЫ, ВЫПОЛНЯЮЩИЕ ОПЕРАЦИИ СО ВСПОМОГАТЕЛЬНЫМИ РЕГИСТРАМИ И УКАЗАТЕЛЕМ СТРАНИЦ
ADRK |
Сложение со вспомогат. регистром |
Constant |
1 |
|||||
|
короткой константы |
|
|
|
|
|
|
|
CMPR |
Сравнение |
вспомогат. |
регистра |
с |
Constant |
1 |
||
|
регистром AR0 |
|
|
|
|
|
|
|
LAR |
Загрузка вспомогательного регистра |
|
AR, dma; |
1 |
||||
|
|
|
|
|
|
|
AR, ind[,next ARP] |
|
LARK |
Загрузка |
вспомогательного |
регистра |
AR, constant |
1 |
|||
|
короткой константой |
|
|
|
|
|
|
|
LARP |
Загрузка |
указателя |
|
вспомогательного |
constant |
1 |
||
|
регистра |
|
|
|
|
|
|
|
LDP |
Загрузка |
указателя |
страницы |
памяти |
dma; ind[,next ARP] |
1 |
147
|
данных |
|
|
|
|
|
|
LDPK |
Загр. указателя стр. памяти данных |
constant |
|
1 |
|||
|
короткой константой |
|
|
|
|
|
|
LRLK |
Загрузка |
вспомогательного |
регистра |
AR, constant |
|
2 |
|
|
длинной константой |
|
|
|
|
|
|
MAR |
Изменение вспомогательного регистра |
dma; ind[,next ARP] |
|
1 |
|||
SAR |
Сохранение вспомогательного регистра |
AR, dma; |
|
1 |
|||
|
|
|
|
|
AR, ind[,next ARP] |
|
|
SBRK |
Вычитание из вспомогат. регистра |
constant |
|
1 |
|||
|
короткой константы |
|
|
|
|
|
|
КОМАНДЫ, ВЫПОЛНЯЮЩИЕ ОПЕРАЦИИ С ПОРТАМИ ВВОДА- |
|
||||||
|
|
ВЫВОДА И ПАМЯТЬЮ ДАННЫХ |
|
||||
BLKD |
Перемещение блока из памяти данных в |
dma1, dma2; |
|
2 |
|||
|
память данных |
|
|
dma1,ind[,next ARP] |
|
|
|
BLKP |
Перемещение блока из памяти программ в |
pma, dma; |
|
2 |
|||
|
память данных |
|
|
pma, ind [,next ARP] |
|
|
|
DMO |
Перемещение данных в памяти данных |
dma, ind [,next ARP] |
|
1 |
|||
V |
|
|
|
|
|
|
|
FORT |
Форматирование |
|
регистров |
constant |
|
1 |
|
|
последовательного порта |
|
|
|
|
||
IN |
Ввод данных из порта |
|
|
dma PA; |
|
1 |
|
|
|
|
|
|
ind, PA [,next ARP] |
|
|
OUT |
Вывод данных из порта |
|
dma PA; |
|
1 |
||
|
|
|
|
|
ind, PA [,next ARP] |
|
|
RFSM |
Сбросить бит режима кадровой синхрониз. |
None |
|
1 |
|||
# |
посл. порта |
|
|
|
|
|
|
RTXM |
Сбросить |
бит |
режима |
передачи |
None |
|
1 |
|
последовательного порта |
|
|
|
|
||
RXF |
Сбросить внешний флаг |
|
None |
|
1 |
||
SFSM |
Установить |
бит |
режима |
кадровой |
None |
|
1 |
# |
синхрониз. посл. порта |
|
|
|
|
||
STXM |
Установить |
бит |
режима |
передачи |
None |
|
1 |
|
последов. порта |
|
|
|
|
|
|
SXF |
Установить внешний флаг |
|
None |
|
1 |
||
TBLR |
Читать таблицу |
|
|
dma; ind [,next ARP] |
|
1 |
|
TBLW |
Записать таблицу |
|
|
dma; ind [,next ARP] |
|
1 |
|
|
КОМАНДЫ УСЛОВНОГО И БЕЗУСЛОВНОГО ВЕТВЛЕНИЯ |
|
|||||
B |
Безусловное ветвление |
|
pma, ind [,next ARP] |
|
2 |
||
BACC |
Ветвление по адресу, указанному АСС |
None |
|
1 |
|||
BANZ |
Ветвление, если вспомогательный регистр |
pma, ind [,next ARP] |
|
2 |
148
|
≠ 0 |
|
|
BBNZ |
Ветвление, если бит ТС ≠ 0 |
pma, ind [,next ARP] |
2 |
BBZ |
Ветвление, если бит ТС = 0 |
pma, ind [,next ARP] |
2 |
BC # |
Ветвление при переносе |
pma, ind [,next ARP] |
2 |
BGEZ |
Ветвление, если содержимое АСС ≥ 0 |
pma, ind [,next ARP] |
2 |
BGZ |
Ветвление, если содержимое АСС > 0 |
pma, ind [,next ARP] |
2 |
BIOZ |
Ветвление, если бит ввода-вывода = 0 |
pma, ind [,next ARP] |
2 |
BLEZ |
Ветвление, если содержимое АСС ≤ 0 |
pma, ind [,next ARP] |
2 |
BLZ |
Ветвление, если содержимое АСС < 0 |
pma, ind [,next ARP] |
2 |
BNC # |
Ветвление, если нет переноса |
pma, ind [,next ARP] |
2 |
BNV |
Ветвление, если нет переполнения |
pma, ind [,next ARP] |
2 |
BNZ |
Ветвление, если содержимое АСС ≠ 0 |
pma, ind [,next ARP] |
2 |
BV |
Ветвление, если есть переполнение |
pma, ind [,next ARP] |
2 |
BZ |
Ветвление, если содержимое АСС = 0 |
pma, ind [,next ARP] |
2 |
CALA |
Косвенный вызов подпрограммы |
None |
1 |
CALL |
Вызов подпрограммы |
pma, ind [,next ARP] |
2 |
RET |
Возврат из подпрограммы |
None |
1 |
КОМАНДЫ УМНОЖЕНИЯ И КОМАНДЫ, ВЫПОЛНЯЮЩИЕ ОПЕРАЦИИ С Т- И Р- РЕГИСТРАМИ
APAC |
Сложение Р-рег. к АСС |
None |
1 |
LPH |
Загрузка старших разрядов Р-регистра |
dma; ind[,next ARP] |
1 |
LT |
Загрузка Т-регистра |
dma; ind[,next ARP] |
1 |
LTA |
Загрузка Т-рег. и сложение с АСС |
dma; ind[,next ARP] |
1 |
|
предыдущего роизвед. |
|
|
LTD |
То же, что и LTA, но с движением данных |
dma; ind[,next ARP] |
1 |
LTP |
Загрузка Т-рег. и сохранение Р-рег. в АСС |
dma; ind[,next ARP] |
1 |
LTS |
Загрузка Т-рег. и вычитание предыдущего |
dma; ind[,next ARP] |
1 |
|
произвед. |
|
|
MAC |
Умножение и сложение |
pma, dma; |
2 |
|
|
pma, ind [,next ARP] |
|
MACD |
Умножение и сложение с движением |
pma, dma; |
2 |
|
данных |
pma, ind [,next ARP] |
|
MPY |
Умножение |
dma; ind[,next ARP] |
1 |
MPYA |
Умножение и сложение с АСС |
dma; ind[,next ARP] |
1 |
# |
предыдущего произвед. |
|
|
MPYK |
Умножение на константу |
constant |
1 |
MPYS |
Умножение и вычитание из АСС |
dma; ind[,next ARP] |
1 |
# |
предыдущего произвед. |
|
|
MPYU |
Умножение беззнаковое |
dma; ind[,next ARP] |
1 |
149
# |
|
|
|
|
|
PAC |
Сохранение Р-рег. в АСС |
|
None |
1 |
|
SPAC |
Вычитание Р-рег. из АСС |
|
None |
1 |
|
SPH # |
Сохранение старшего слова Р-рег. |
|
dma; ind[,next ARP] |
1 |
|
SPL # |
Сохранение младшего слова Р-рег. |
|
dma; ind[,next ARP] |
1 |
|
SPM |
Задание режима сдвига на выходе Р-рег. |
constant |
1 |
||
SQRA |
Возведение в квадрат и слож. с АСС |
dma; ind[,next ARP] |
1 |
||
|
предыдущ. произв. |
|
|
|
|
SQRS |
Возведение в квадрат и вычитание |
dma; ind[,next ARP] |
1 |
||
|
предыдущего произведения из АСС |
|
|
||
|
|
КОМАНДЫ УПРАВЛЕНИЯ |
dma, bit code; |
|
|
BIT |
Тестирование бита |
|
1 |
||
|
|
|
|
ind,bit code[,nextARP] |
|
BITT |
Тестирование бита, определенного |
|
dma; ind[,next ARP] |
1 |
|
|
Т-регистром |
|
|
|
|
CNFD |
Объявить блок как память данных |
|
None |
1 |
|
CNFP |
Объявить блок как память программ |
None |
1 |
||
DINT |
Блокирование прерываний |
|
None |
1 |
|
EINT |
Разрешение прерываний |
|
None |
1 |
|
IDLE |
Ожидание прерываний |
|
None |
1 |
|
LST |
Загрузка регистра состояния ST0 |
|
dma; ind[,next ARP] |
1 |
|
LST1 |
Загрузка регистра состояния ST1 |
|
dma; ind[,next ARP] |
1 |
|
NOP |
Нет операции |
|
|
None |
1 |
POP |
Вытолкнуть вершину стека в младшее |
None |
1 |
||
|
слово АСС |
|
|
|
|
POPD |
Вытолкнуть вершину стека в ячейку |
dma; ind[,next ARP] |
1 |
||
|
памяти данных |
|
|
|
|
PSHD |
Вытолкнуть ячейку памяти данных в |
dma; ind[,next ARP] |
1 |
||
|
вершину стека |
|
|
|
|
PUSH |
Вытолкнуть младшее слово АСС в |
None |
1 |
||
|
вершину стека |
|
|
|
|
RС # |
Сбросить бит переноса |
|
None |
1 |
|
RHM |
Сбросить режим ПДП |
|
None |
1 |
|
# |
|
|
|
|
|
ROVM |
Сбросить режим переполнения |
|
None |
1 |
|
RPT |
Повторить команду столько раз, сколько |
dma; ind[,next ARP] |
1 |
||
|
указано в ячейке памяти данных |
|
|
|
|
RPTK |
Повторить |
следующую |
команду |
constant |
1 |
|
(constant+1) раз |
|
|
|
|
RSXM |
Сбросить режим расширения знака |
|
None |
1 |
150
|
RTC # |
Сбросить флаг тест-управления |
None |
1 |
|
|
|
SC # |
Установить бит переноса |
None |
1 |
|
|
|
SHM # |
Установить режим ПДП |
None |
1 |
|
|
|
SOVM |
Установить режим переполнения |
None |
1 |
|
|
|
SST |
Сохранить содержимое регистра состояния |
dma; ind[,next ARP] |
1 |
|
|
|
|
ST0 |
|
|
|
|
|
SST1 |
Сохранить содержимое регистра состояния |
dma; ind[,next ARP] |
1 |
|
|
|
|
ST1 |
|
|
|
|
|
SSXM |
Установить режим расширения знака |
None |
1 |
|
|
|
STC # |
Установить флаг тест-управления |
None |
1 |
|
|
|
TRAP |
Программное прерывание |
None |
1 |
|
|
|
Примечания |
: |
# – команды недоступны для TMS320C20, |
|
|
|
|
|
|
Сл. – количество слов, занимаемое в памяти программ. |
4.3.17 ПРИМЕРЫ ПРОГРАММ
Ввод через порт ввода/вывода внешних данных во внутреннюю память данных процессора, начиная с адреса 0200h.
LARP |
AR2 |
;инициализировать вспомогат. рег. AR2 |
LRLK |
AR2,0200h |
;загрузить в рег. AR2 адрес 0200h |
RPTK |
000Fh |
;повторить следующую команду 16 раз |
IN *+,PA0 |
;ввести данные через I/O порт PA0 |
|
|
|
;с инкрементом содержимого AR2 |
Вывод через порт ввода/вывода данных из внутренней памяти данных процессора, начиная с адреса 0210h.
LARP |
AR3 |
;инициализировать вспомогат. рег. AR3 |
LRLK |
AR3,0210h |
;загрузить в рег. AR3 адрес 0210h |
RPTK |
000Fh |
;повторить следующую команду 16 раз |
OUT |
*+,PA2 |
;ввести данные через I/O порт PA2 |
|
|
;с инкрементом содержимого AR3 |
Умножение двух 16-ти разр. значений из RAM процессора.
LRLK AR1,0200h ;загрузить во вспомогат. рег. AR3 адрес ;0200h (адр. 1-го операнда)
LARP AR1 ;инициализировать вспомогательный
;регистр AR1 (ARP=1)
|
|
151 |
LT |
*+ |
;загрузить Т- рег. содержимым адреса |
MPY |
*+ |
;0200h и инкрементировать AR1 |
;умножить Т-рег. на содержимое адреса |
||
|
|
;0201h (адр. 2-го операнда) и |
PAC |
|
;инкрементировать AR1 |
|
;сохранить содержимое Р-рег. в АСС |
|
SACL *+,0 |
;сохранить младшие 16 разрядов АСС по |
|
SACH *,0 |
;адресу 0202h |
|
;сохранить старшие 16 разрядов АСС по |
||
|
|
;адресу 0203h |
Вычисление отклика КИХ-фильтра 8 порядка (свертки).
В данном примере представлена программа цифрового фильтра с конечной импульсной характеристикой (КИХ-фильтра). Отклик КИХфильтра определяется в соответствии с выражением свертка:
N −1
y(n) = ∑h(k) x(n −k) ,
k=0
вкотором h(k) - отсчеты импульсной характеристики фильтра, x(n-k) - предыдущие (задержанные) отсчеты входного сигнала, N – порядок фильтра. Структурная схема КИХ-фильтра представлена на рис.4.18.
Рис.4.18. Структурная схема КИХ-фильтра
Чтобы воспользоваться командой MACD для вычисления отклика КИХфильтра, блок B0 памяти данных командой CNFP конфигурируется как память программ. MACD работает только с внутренней RAM.
Сократить время вычисления отклика КИХ-фильтра позволяет сочетание команды MACD с командой повторения RPTK:
152
RPTK NM1
MACD (pma), (dma)
Команда RPTK NM1 загружает непосредственную 8-битную константу NM1 (N-1) в счетчик повторения. Это обеспечивает выполнение следующей команды N раз.
Команда MACD(pma),(dma) умножает содержимое памяти данных (определяемое dma) на содержимое памяти программ (определяемое pma), начиная с адреса FF00h. Предварительно производится прибавление предыдущего произведения к АСС. Затем содержимое памяти данных, адресуемое через dma, копируется в следующую более старшую ячейку памяти. Другими словами, команда MACD объединяет пару команд
LTD/MPY в одну.
На рис.4.19 показана рекомендуемая схема использования памяти данных, которая обеспечивает правильную последовательность данных x(n) и коэффициентов h(n) при движении через фильтр.
Рис.4.19. Расположение x(n) и h(k) в памяти данных
В приведенном ниже примере программы КИХ-фильтра 8 порядка (N=8) для TMS320С2X обращение к значениям x(n) из памяти данных производится косвенно через вспомогательный регистр AR1.