Добавил:
Да поможет вам Котельников Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BZS2002_5l.doc
Скачиваний:
26
Добавлен:
23.06.2024
Размер:
112.64 Кб
Скачать

Министерство цифрового развития, связи и массовых коммуникаций российской федерации

Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования

Московский технический университет связи и информатики

Кафедра многоканальных телекоммуникационных систем

Лабораторная работа № 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