(812) 466-57-84 /
Новости Продукция Номенклатура Статьи О фирме Контакты Вакансии
Архитектура серий С167 и ST10x167
Применение контроллеров
Распределенные системы управления
Проектирование распределенных систем управления
О стандарте PC/104
Изделия в стандарте PC/104 для жестких условий
Одноплатные компьютеры-контроллеры в стандарте PC/104
CAN-интерфейс
Микропроцессорные контроллеры CS, M, 167х
Новые 16-разрядные DSP-микроконтроллеры
Краткое описание микроконтроллера C16x
Краткая система команд C16x/ST10
Полная система команд C16x/ST10x
Дополнительные команды для XC16x и ST10F269
Параллельные порты микроконтроллеров C167 и ST10F269
Блоки формирования импульсных сигналов C16x/ST10x
Формирование ШИМ с повышенным разрешением
Универсальные блоки таймеров
Интерфейс АТ96 (Евростандарт)
Подключение контроллеров
Процессоры цифровой обработки сигналов
Архитектура микроконтроллера TMS320C32
Архитектура микроконтроллера TMS320C33

Дополнительные команды для XC16x и ST10F269

Условные обозначения

IDXi Индексные регистры косвенной адресации (IDX0 и IDX1)
QRj Регистры прибавляемого/вычитаемого значения для Rwn (QR0 и QR1)
QXj Регистры прибавляемого/вычитаемого значения для IDXi (QX0 и QX1)
IDXi* Модификация регистра IDXi после исполнения команды
Rwn* Модификация регистра Rwn после исполнения команды
ACC Аккумулятор; 40-битовый регистр результата операций (состоит из 8-битового регистра MAE и двух 16-битовых регистров MAH и MAL: MAE||MAH||MAL)
CoReg Регистры сопроцессора (MSW, MAH, MAS, MAL, MCW или MRW)
[op1] Косвенная адресация (op1 является адресом используемого значения)
|| Объединение двух (или более) регистров в один,например: (op2||op1) - op2 - старшее слово 32-разрядного числа, op1 - младшее слово
>> Сдвиг битов вправо (без сохранения знака)
<< Сдвиг битов влево (без сохранения знака)
>>> Арифметический сдвиг битов вправо (с сохранением знака)
<-> Сравнение; осуществляется путем вычитания второго операнда из первого без сохранения результата (только обновление флагов арифметико-логического устройства)
<-- Направление копирования значения
Например:
op1<--op2 Копировать значение op2 в op1
op1<--op1+op2 Сложить значения op1 и op2 и поместить результат в op1
В командах сопроцессора используется 5 модификаций регистра IDXj:
IDXi IDXi<--IDXi (без модификации)
IDXi+ IDXi<--IDXi+2 (i=0,1)
IDXi- IDXi<--IDXi-2 (i=0,1)
IDXi+QXj IDXi<--IDXi+QXj (i,j=0,1)
IDXi-QXj IDXi<--IDXi-QXj (i,j=0,1)
В командах сопроцессора используется 5 модификаций регистра Rwn:
Rwn Rwn<--Rwn (без модификации)
Rwn+ Rwn<--Rwn+2 (n=0...15)
Rwn- Rwn<--Rwn-2 (n=0...15)
Rwn+QRj Rwn<--Rwn+QRj (n=0...15;j=0,1)
Rwn-QRj Rwn<--Rwn-QRj (n=0...15;j=0,1)

Арифметические операции

Абсолютное значение

CoABS
ACC<--Abs(ACC)
CoABS

Абсолютное значение

CoABS op1,op2
ACC<--Abs(op2||op1)
CoABS Rwn,Rwm
CoABS Rwn,[Rwm*]
CoABS [IDXi*],[Rwm*]

Сложение

CoADD op1,op2
ACC<--ACC+(op2||op1)
CoADD Rwn,Rwm
CoADD Rwn,[Rwm*]
CoADD [IDXi*],[Rwm*]

Сложение

CoADD2 op1,op2
ACC<--ACC+2*(op2||op1)
CoADD2 Rwn,Rwm
CoADD2 Rwn,[Rwm*]
CoADD2 [IDXi*],[Rwm*]

Загрузка аккумулятора

CoLOAD op1,op2
ACC<--(op2||op1)
CoLOAD Rwn,Rwm
CoLOAD Rwn,[Rwm*]
CoLOAD [IDXi*],[Rwm*]

Загрузка аккумулятора

CoLOAD- op1,op2
ACC<--0-(op2||op1)
CoLOAD- Rwn,Rwm
CoLOAD- Rwn,[Rwm*]
CoLOAD- [IDXi*],[Rwm*]

Загрузка аккумулятора

CoLOAD2 op1,op2
ACC<--2*(op2||op1)
CoLOAD2 Rwn,Rwm
CoLOAD2 Rwn,[Rwm*]
CoLOAD2 [IDXi*],[Rwm*]

Загрузка аккумулятора

CoLOAD2- op1,op2
ACC<--0-2*(op2||op1)
CoLOAD2- Rwn,Rwm
CoLOAD2- Rwn,[Rwm*]
CoLOAD2- [IDXi*],[Rwm*]

 
Инверсия знака

CoNEG
ACC<--0-ACC
CoNEG

Инверсия знака с округлением

CoNEG rnd
ACC<--0-ACC+00008000h
CoNEG rnd

Округление аккумулятора

CoRND
ACC<--ACC+00008000h
CoRND

Вычитание

CoSUB op1,op2
ACC<--ACC-(op2||op1)
CoSUB Rwn,Rwm
CoSUB Rwn,[Rwm*]
CoSUB [IDXi*],[Rwm*]

Вычитание

CoSUB2 op1,op2
ACC<--ACC-2*(op2||op1)
CoSUB2 Rwn,Rwm
CoSUB2 Rwn,[Rwm*]
CoSUB2 [IDXi*],[Rwm*]

Вычитание

CoSUB2R op1,op2
ACC<--2*(op2||op1)-ACC
CoSUB2R Rwn,Rwm
CoSUB2R Rwn,[Rwm*]
CoSUB2R [IDXi*],[Rwm*]

Вычитание

CoSUBR op1,op2
ACC<--(op2||op1)-ACC
CoSUBR Rwn,Rwm
CoSUBR Rwn,[Rwm*]
CoSUBR [IDXi*],[Rwm*]

Операции умножения
Умножение с накоплением и округлением результата

CoMAC op1,op2,rnd
ACC<--ACC+op1*op2+00008000h
CoMAC Rwn,Rwm,rnd
CoMAC Rwn,[Rwm*],rnd
CoMAC [IDXi*],[Rwm*],rnd

Умножение с накоплением

CoMAC op1,op2
ACC<--ACC+op1*op2
CoMAC Rwn,Rwm
CoMAC Rwn,[Rwm*]
CoMAC [IDXi*],[Rwm*]

Умножение с накоплением

CoMAC- op1,op2
ACC<--ACC-op1*op2
CoMAC- Rwn,Rwm
CoMAC- Rwn,[Rwm*]
CoMAC- [IDXi*],[Rwm*]

Умножение с накоплением и округлением результата, пересылка данных

CoMACM op1,op2,rnd
ACC<--ACC+op1*op2+00008000h
[IDXi*]<--[IDXi]
CoMACM [IDXi*],[Rwm*],rnd

Умножение с накоплением, пересылка данных

CoMACM op1,op2
ACC<--ACC+op1*op2
[IDXi*]<--[IDXi]
CoMACM [IDXi*],[Rwm*]

Умножение с накоплением, пересылка данных

CoMACM- op1,op2
ACC<--ACC-op1*op2
[IDXi*]<--[IDXi]
CoMACM- [IDXi*],[Rwm*]

Умножение с накоплением и округлением результата, пересылка данных

CoMACMR op1,op2,rnd
ACC<--op1*op2-ACC+00008000h
[IDXi*]<--[IDXi]
CoMACMR [IDXi*],[Rwm*],rnd

Умножение с накоплением, пересылка данных

CoMACMR op1,op2
ACC<--op1*op2-ACC
[IDXi*]<--[IDXi]
CoMACMR [IDXi*],[Rwm*]

Умножение с накоплением и округлением результата, пересылка данных

CoMACMRsu op1,op2,rnd
ACC<--op1*op2-ACC+00008000h
[IDXi*]<--[IDXi]
CoMACMRsu [IDXi*],[Rwm*],rnd

Умножение с накоплением, пересылка данных

CoMACMRsu op1,op2
ACC<--op1*op2-ACC
[IDXi*]<--[IDXi]
CoMACMRsu [IDXi*],[Rwm*]

Умножение с накоплением и округлением результата, пересылка данных

CoMACMRu op1,op2,rnd
ACC<--op1*op2-ACC+00008000h
[IDXi*]<--[IDXi]
CoMACMRu [IDXi*],[Rwm*],rnd

Умножение с накоплением, пересылка данных

CoMACMRu op1,op2
ACC<--op1*op2-ACC
[IDXi*]<--[IDXi]
CoMACMRu [IDXi*],[Rwm*]

Умножение с накоплением и округлением результата, пересылка данных

CoMACMRus op1,op2,rnd
ACC<--op1*op2-ACC+00008000h
[IDXi*]<--[IDXi]
CoMACMRus [IDXi*],[Rwm*],rnd

Умножение с накоплением, пересылка данных

CoMACMRus op1,op2
ACC<--op1*op2-ACC
[IDXi*]<--[IDXi]
CoMACMRus [IDXi*],[Rwm*]

Умножение с накоплением и округлением результата, пересылка данных

CoMACMsu op1,op2,rnd
ACC<--ACC+op1*op2+00008000h
[IDXi*]<--[IDXi]
CoMACMsu [IDXi*],[Rwm*],rnd

Умножение с накоплением, пересылка данных

CoMACMsu op1,op2
ACC<--ACC+op1*op2
[IDXi*]<--[IDXi]
CoMACMsu [IDXi*],[Rwm*]

Умножение с накоплением, пересылка данных

CoMACMsu- op1,op2
ACC<--ACC-op1*op2
[IDXi*]<--[IDXi]
CoMACMsu- [IDXi*],[Rwm*]

Умножение с накоплением и округлением результата, пересылка данных

CoMACMu op1,op2,rnd
ACC<--ACC+op1*op2+00008000h
[IDXi*]<--[IDXi]
CoMACMu [IDXi*],[Rwm*],rnd

Умножение с накоплением, пересылка данных

CoMACMu op1,op2
ACC<--ACC+op1*op2
[IDXi*]<--[IDXi]
CoMACMu [IDXi*],[Rwm*]

Умножение с накоплением, пересылка данных

CoMACMu- op1,op2
ACC<--ACC-op1*op2
[IDXi*]<--[IDXi]
CoMACMu- [IDXi*],[Rwm*]

Умножение с накоплением и округлением результата, пересылка данных

CoMACMus op1,op2,rnd
ACC<--ACC+op1*op2+00008000h
[IDXi*]<--[IDXi]
CoMACMus [IDXi*],[Rwm*],rnd

Умножение с накоплением, пересылка данных

CoMACMus op1,op2
ACC<--ACC+op1*op2
[IDXi*]<--[IDXi]
CoMACMus [IDXi*],[Rwm*]

Умножение с накоплением, пересылка данных

CoMACMus- op1,op2
ACC<--ACC-op1*op2
[IDXi*]<--[IDXi]
CoMACMus- [IDXi*],[Rwm*]

Умножение с накоплением и округлением результата

CoMACR op1,op2,rnd
ACC<--op1*op2-ACC+00008000h
CoMACR Rwn,Rwm,rnd
CoMACR Rwn,[Rwm*],rnd
CoMACR [IDXi*],[Rwm*],rnd

Умножение с накоплением

CoMACR op1,op2
ACC<--op1*op2-ACC
CoMACR Rwn,Rwm
CoMACR Rwn,[Rwm*]
CoMACR [IDXi*],[Rwm*]

Умножение с накоплением и округлением результата

CoMACRsu op1,op2,rnd
ACC<--op1*op2-ACC+00008000h
CoMACRsu Rwn,Rwm,rnd
CoMACRsu Rwn,[Rwm*],rnd
CoMACRsu [IDXi*],[Rwm*],rnd

Умножение с накоплением

CoMACRsu op1,op2
ACC<--op1*op2-ACC
CoMACRsu Rwn,Rwm
CoMACRsu Rwn,[Rwm*]
CoMACRsu [IDXi*],[Rwm*]

Умножение с накоплением и округлением результата

CoMACRu op1,op2,rnd
ACC<--op1*op2-ACC+00008000h
CoMACRu Rwn,Rwm,rnd
CoMACRu Rwn,[Rwm*],rnd
CoMACRu [IDXi*],[Rwm*],rnd

Умножение с накоплением

CoMACRu op1,op2
ACC<--op1*op2-ACC
CoMACRu Rwn,Rwm
CoMACRu Rwn,[Rwm*]
CoMACRu [IDXi*],[Rwm*]

Умножение с накоплением и округлением результата

CoMACRus op1,op2,rnd
ACC<--op1*op2-ACC+00008000h
CoMACRus Rwn,Rwm,rnd
CoMACRus Rwn,[Rwm*],rnd
CoMACRus [IDXi*],[Rwm*],rnd

Умножение с накоплением

CoMACRus op1,op2
ACC<--op1*op2-ACC
CoMACRus Rwn,Rwm
CoMACRus Rwn,[Rwm*]
CoMACRus [IDXi*],[Rwm*]

Умножение с накоплением и округлением результата

CoMACsu op1,op2,rnd
ACC<--ACC+op1*op2+00008000h
CoMACsu Rwn,Rwm,rnd
CoMACsu Rwn,[Rwm*],rnd
CoMACsu [IDXi*],[Rwm*],rnd

Умножение с накоплением

CoMACsu op1,op2
ACC<--ACC+op1*op2
CoMACsu Rwn,Rwm
CoMACsu Rwn,[Rwm*]
CoMACsu [IDXi*],[Rwm*]

Умножение с накоплением

CoMACsu- op1,op2
ACC<--ACC-op1*op2
CoMACsu- Rwn,Rwm
CoMACsu- Rwn,[Rwm*]
CoMACsu- [IDXi*],[Rwm*]

Умножение с накоплением и округлением результата

CoMACu op1,op2,rnd
ACC<--ACC+op1*op2+00008000h
CoMACu Rwn,Rwm,rnd
CoMACu Rwn,[Rwm*],rnd
CoMACu [IDXi*],[Rwm*],rnd

Умножение с накоплением

CoMACu op1,op2
ACC<--ACC+op1*op2
CoMACu Rwn,Rwm
CoMACu Rwn,[Rwm*]
CoMACu [IDXi*],[Rwm*]

Умножение с накоплением

CoMACu- op1,op2
ACC<--ACC-op1*op2
CoMACu- Rwn,Rwm
CoMACu- Rwn,[Rwm*]
CoMACu- [IDXi*],[Rwm*]

Умножение с накоплением и округлением результата

CoMACus op1,op2,rnd
ACC<--ACC+op1*op2+00008000h
CoMACus Rwn,Rwm,rnd
CoMACus Rwn,[Rwm*],rnd
CoMACus [IDXi*],[Rwm*],rnd

Умножение с накоплением

CoMACus op1,op2
ACC<--ACC+op1*op2
CoMACus Rwn,Rwm
CoMACus Rwn,[Rwm*]
CoMACus [IDXi*],[Rwm*]

Умножение с накоплением

CoMACus- op1,op2
ACC<--ACC-op1*op2
CoMACus- Rwn,Rwm
CoMACus- Rwn,[Rwm*]
CoMACus- [IDXi*],[Rwm*]

Умножение с округлением результата

CoMUL op1,op2,rnd
ACC<--op1*op2+00008000h
CoMUL Rwn,Rwm,rnd
CoMUL Rwn,[Rwm*],rnd
CoMUL [IDXi*],[Rwm*],rnd

Умножение

CoMUL op1,op2
ACC<--op1*op2
CoMUL Rwn,Rwm
CoMUL Rwn,[Rwm*]
CoMUL [IDXi*],[Rwm*]

Умножение

CoMUL- op1,op2
ACC<--(-op1*op2)
CoMUL- Rwn,Rwm
CoMUL- Rwn,[Rwm*]
CoMUL- [IDXi*],[Rwm*]

Умножение с округлением результата

CoMULsu op1,op2,rnd
ACC<--op1*op2+00008000h
CoMULsu Rwn,Rwm,rnd
CoMULsu Rwn,[Rwm*],rnd
CoMULsu [IDXi*],[Rwm*],rnd

Умножение

CoMULsu op1,op2
ACC<--op1*op2
CoMULsu Rwn,Rwm
CoMULsu Rwn,[Rwm*]
CoMULsu [IDXi*],[Rwm*]

Умножение

CoMULsu- op1,op2
ACC<--(-op1*op2)
CoMULsu- Rwn,Rwm
CoMULsu- Rwn,[Rwm*]
CoMULsu- [IDXi*],[Rwm*]

Умножение с округлением результата

CoMULu op1,op2,rnd
ACC<--op1*op2+00008000h
CoMULu Rwn,Rwm,rnd
CoMULu Rwn,[Rwm*],rnd
CoMULu [IDXi*],[Rwm*],rnd

Умножение

CoMULu op1,op2
ACC<--op1*op2
CoMULu Rwn,Rwm
CoMULu Rwn,[Rwm*]
CoMULu [IDXi*],[Rwm*]

Умножение

CoMULu- op1,op2
ACC<--(-op1*op2)
CoMULu- Rwn,Rwm
CoMULu- Rwn,[Rwm*]
CoMULu- [IDXi*],[Rwm*]

Умножение с округлением результата

CoMULus op1,op2,rnd
ACC<--op1*op2+00008000h
CoMULus Rwn,Rwm,rnd
CoMULus Rwn,[Rwm*],rnd
CoMULus [IDXi*],[Rwm*],rnd

Умножение

CoMULus op1,op2
ACC<--op1*op2
CoMULus Rwn,Rwm
CoMULus Rwn,[Rwm*]
CoMULus [IDXi*],[Rwm*]

Умножение

CoMULus- op1,op2
ACC<--(-op1*op2)
CoMULus- Rwn,Rwm
CoMULus- Rwn,[Rwm*]
CoMULus- [IDXi*],[Rwm*]

Операции сравнения
Сравнение регистров

CoCMP op1,op2
ACC<->(op2||op1)
CoCMP Rwn,Rwm
CoCMP Rwn,[Rwm*]
CoCMP [IDXi*],[Rwm*]

Максимум

CoMAX op1,op2
ACC<--max(ACC, op2||op1)
CoMAX Rwn,Rwm
CoMAX Rwn,[Rwm*]
CoMAX [IDXi*],[Rwm*]

Минимум

CoMIN op1,op2
ACC<--min(ACC, op2||op1)
CoMIN Rwn,Rwm
CoMIN Rwn,[Rwm*]
CoMIN [IDXi*],[Rwm*]

Арифметический сдвиг вправо с округлением

CoASHR op1,rnd
ACC<--(ACC>>>op1)+00008000h
CoASHR #data5,rnd
CoASHR Rwn,rnd
CoASHR [Rwm*],rnd

Арифметический сдвиг вправо

CoASHR op1
ACC<--(ACC>>>op1)
CoASHR #data5
CoASHR Rwn
CoASHR [Rwm*]

Сдвиг влево

CoSHL op1
ACC<--(ACC<<op1)
CoSHL #data5
CoSHL Rwn
CoSHL [Rwm*]

Сдвиг вправо

CoSHR op1
ACC<--(ACC>>op1)
CoSHR #data5
CoSHR Rwn
CoSHR [Rwm*]

Пересылка данных
Пересылка данных

CoMOV op1,op2
op1<--op2
CoMOV [IDXi*],[Rwm*]

Сохранение регистров сопроцессора

CoSTORE op1,op2
op1<--op2
CoSTORE Rwn,CoReg
CoSTORE [Rwn*],CoReg

Вспомогательные операции
Пустая операция

CoNOP
Модификация указателей
CoNOP [IDXi*],[Rwm*]
CoNOP [IDXi*]
CoNOP [Rwm*]