
- •Министерство цифрового развития, связи и массовых коммуникаций российской федерации
- •Московский технический университет связи и информатики
- •Изучение стыковки процессора с первичным цифровым потоком е1
- •1 Постановка задачи
- •2 Исходные данные для индивидуального задания
- •3 Краткая теория
- •4 Блок-схема алгоритма программирования последовательного порта sport0
- •5 Исходный текст программы
- •6 Анализ полученных результатов
- •7 Выводы
- •Контрольные вопросы
Министерство цифрового развития, связи и массовых коммуникаций российской федерации
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования
Московский технический университет связи и информатики
Кафедра многоканальных телекоммуникационных систем
Лабораторная работа № 5 по дисциплине
Цифровые системы передачи и методы их защиты
Изучение стыковки процессора с первичным цифровым потоком е1
Выполнил:
студент гр. БЗС2002
Умаров К.И.
Проверила:
Ст. преп., Мусатова О.Ю.
Москва 2023
1 Постановка задачи
1) Изучить программирование последовательного порта SPORT0 и прерываний, используя учебное пособие [https://lms.mtuci.ru/lms/local/mtt/elib_download.php?book_id=2374 , с. 70-89] и лекции 6 семестра по дисциплинам «Микропроцессорная техника в инфокоммуникациях» и «Цифровые системы передачи и методы их защиты».
2) Разработать и отладить средствами сигнального процессора ADSP-2181 программное обеспечение прерываний для решения задач, соответствующих индивидуальному заданию на курсовой проект. Пример блок-схемы и программы с прерываниями по порту SPORT0 приведен в [https://lms.mtuci.ru/lms/local/mtt/elib_download.php?book_id=2374 , с. 82-89]. Требуется запрограммировать последовательный порт SPORT0 («Передатчик пуст» и/или «Приемник полон»).
2 Исходные данные для индивидуального задания
Исходные данные соответствуют индивидуальному заданию на курсовой проект.
Таблица 1 — Исходные данные
Тема курсового проекта |
№ канального интервала в потоке Е1 |
Последовательный порт для приема информации |
Последовательный порт для передачи информации |
Микропроцессорная криптографическая система расшифрования по алгоритму Эль-Гамаля в расширенных полях Галуа
|
10 |
SPORT0 |
SPORT0 |
3 Краткая теория
Синхронный последовательный порт SPORT0 предназначен для организации последовательного обмена информацией с внешними устройствами.
SPORT0 обеспечивает, синхронизуясь по цикловому синхроимпульсу, возможность доступа к произвольной группе канальных интервалов 32-х (Е1) канального потока.
Для программирования последовательного порта SPORT0 используются регистры процессора ADSP-2181.
4 Блок-схема алгоритма программирования последовательного порта sport0
Блок-схема представлена на рисунке 1.
Рисунок 1 — Блок-схема программирования последовательного порта SPORT0
5 Исходный текст программы
// объявление переменных .section/dm vars; // флаг готовности к обработке .var got_fl = 0;
//буфер приема .var/circ rx_buf[32] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; // буфер передачи .var/circ tx_buf[32] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; // буфер входного сигнала .var/circ vhod[31] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
// буфер выходного сигнала .var/circ vihod[31] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0; // ячейка для сохранения I2 .var i2_soh; // ячейка для сохранения I3 .var i3_soh; // ячейка для сохранения L2 .var l2_soh; // ячейка для сохранения L3 .var l3_soh; // ячейка для сохранения AR .var ar_soh;
//---------------------------------------------- // с нулевого адреса начинается // заполнение таблицы векторов прерываний //---------------------------------------------- .SECTION/PM program; // программа jump start; rti; rti; rti; // RESET rti; rti; rti; rti; // IRQ2 rti; rti; rti; rti; // IRQL1 rti; rti; rti; rti; // IRQL0 jump peredacha; rti; rti; rti; // SPORT0 ?? jump priem; rti; rti; rti; // SPORT0 ?? rti; rti; rti; rti; // IRQE rti; rti; rti; rti; // BDMA rti; rti; rti; rti; // SPORT1 ?? rti; rti; rti; rti; // SPORT1 ?? rti; rti; rti; rti; // Timer rti; rti; rti; rti; // Power Down //---------------------------------------------- //---------------------------------------------- // конец таблицы векторов прерываний //---------------------------------------------- //---------------------------------------------- //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ // начало основной программы //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
// программирование последовательного // порта SPORT0 и прерываний // // останов порта, см. рис. 27 start: ar = dm(0x3fff); ar = clrbit 0xc of ar; dm(0x3fff) = ar; // автобуферирование, см. рис.28 // привязка I0 к приему, а I1 к передаче // шаг приема - M1 (все регистры - из ГАД1) ar = B#001010000111; // |||||||||||+--- автобуферирование ПМ вкл. // ||||||||||+---- автобуферирование ПД вкл. // ||||||||++----- шаг приема - M1 // |||||+++------- I0 -> к приему // |||++---------- шаг передачи - M1 // +++------------ I1 -> к передаче dm(0x3ff3) = ar; // привязка rx_buf -> I0 -> к приему, a // tx_buf -> I1 -> к передаче // шаг = М1 = 1 i0 = rx_buf; l0 = length(rx_buf); i1 = tx_buf; l1 = length(tx_buf); m1 = 1;
// настройка порта, см. рис.29 - 30 ar = B#1000001000000111; // ||||||||||||++++---- длина слова = 8 бит // ||||||||||++-------- слева нули // ||||||||++------ RFS0, TFS0 - активный уровень - высокий // |||||||+------------ RFS0 - внешний сигнал // ||||||+------------- поток Е1 // ||++++-------------- цикловой синхросигнал - по биту Si // |+------------------ SCLK0 - внешний сигнал // +------------------- многоканальная функция включена dm(0x3ff6) = ar;
// активизация доступа к канальным интервалам, см. рис. 30 // все канальные интервалы потока принимаются и передаются ar = 0xffff; dm(0x3ff7) = ar; dm(0x3ff8) = ar; dm(0x3ff9) = ar; // включение порта ar = dm(0x3fff); ar = setbit 0xc of ar; dm(0x3fff) = ar; // сброс прерываний, стоящих в очереди ifc = 0x00ff; // холостая операция nop; // запуск работы порта ar = dm(i1, m1); tx0 = ar; // маскирование прерываний imask = B#0001100000; // |+---------- SPORT0 ПМ разрешено // +----------- SPORT0 ПД разрешено // холостая операция nop; i0 = rx_buf + 9; m0 = 0; dm(i0, m0) = 0x00FF;
// частичное зацикливание основной программы // с внесением в нее операций обработки // сигнала с тем, чтобы выполнение обработки // не мешало вводу / выводу и другим // прерываниям // сигнал готов к обработке ? cntr = 8; do zacycl until CE; ar = dm(got_fl); zacycl: ar = pass ar; ifc = b#0010000000000000; nop; jump zac2; // готов //**************************************** //* здесь должна быть размещена * //* программа обработки сигнала * //**************************************** call podpis; // снятие флага готовности ar = 0; dm(got_fl) = ar; jump zacycl; //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ // конец основной программы //$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$} //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // подпрограмма прерывания SPORT0 ПД //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>} // сохранение значений используемых регистров peredacha: dm(i2_soh) = i2; dm(i3_soh) = i3; dm(l2_soh) = l2; dm(l3_soh) = l3; dm(ar_soh) = ar; // vihod -> tx_buf на передачу i2 = tx_buf + 1; l2 = length(tx_buf); i3 = vihod; l3 = length(vihod);
cntr = 31; do vic1 until ce; ar = dm(i3, m1); vic1: dm(i2, m1) = ar; // восстановление значений используемых регистров ar = dm(ar_soh); i2 = dm(i2_soh); i3 = dm(i3_soh); l2 = dm(l2_soh); l3 = dm(l3_soh); // возврат из подпрограммы rti; //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // конец подпрограммы //прерывания SPORT0 ПД //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // подпрограмма прерывания SPORT0 ПМ //&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&} // сохранение значений используемых регистров priem: dm(i2_soh) = i2; dm(i3_soh) = i3; dm(l2_soh) = l2; dm(l3_soh) = l3; dm(ar_soh) = ar; // прием rx_buf -> vhod i2 = rx_buf + 1; l2 = length(rx_buf); i3 = vhod; l3 = length(vhod); cntr = 31; do vic2 until ce; ar = dm(i2, m1); vic2: dm(i3, m1) = ar; i2 = vhod + 1; l2 = length(vhod); i3 = vihod; l3 = length(vihod); cntr = 31; do vic22 until ce; ar = dm(i2, m1); vic22: dm(i3, m1) = ar;
// восстановление значений используемых регистров ar = dm(ar_soh); i2 = dm(i2_soh); i3 = dm(i3_soh); l2 = dm(l2_soh); l3 = dm(l3_soh); // установка флага готовности ar = 0x55; dm(got_fl) = ar; // возврат из подпрограммы rti; //&&&&&&&&&&&&&&&&&&&&&&&&&&&& // конец подпрограммы // прерывания SPORT0 ПM //&&&&&&&&&&&&&&&&&&&&&&&&&&&&
/////////////////////////////////////// // алгоритм программы // что делает // КИ07 ////////////////////////////////////// podpis: nop; //в выход //передатчик пуст //гот флаг
rts;
zac2: ax0 = dm(got_fl); ar = pass ax0; if ne ar = setbit 14 of ar; ifc = ar; nop; rts;
end: jump end;
|
Рисунок 2 — Исходный текст программы программирования последовательного порта SPORT0