Разработка устройства обработки информации на базе ЦСП
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
?вания и не может быть прервана, поэтому подпрограмма должна быть минимального размера. Блок схема алгоритма приведена на рисунке 7.2
Рисунок 7.2
7.3 Алгоритм обработки программного прерывания контроллера ввода ПДП
Если прерывание пришло от контроллера ввода, то устанавливаем указатель на начало буфера ввода, номер блока данных 0. Если прерывание пришло от вычислительной задачи, то устанавливаем указатель буфера входных данных равным сумме начального адреса буфера данных, плюс произведение номера блока на размер блока. После чего программируем контроллер ввода в соответствии с перешедшим кодом прерывания. Блок схема алгоритма представлена на рисунке 7.3
Рисунок 7.3
7.4 Алгоритм обработки программного прерывания сторожевым таймером WDT
По истечению временного интервала WDT таймер формирует аппаратное прерывание.
В обработчике прерывания происходит уменьшение времени ожидания выполнения основного цикла программы (программный WDT таймер). Если интервал программного WDT таймера истек, то проверяется условие, МОС работает в автономном режиме, если нет, то выдается прерывание ведомому процессору по PCI, после чего задача ставится в режим останова и происходит сброс сторожевого таймера.
Блок схема алгоритма приведена на рисунке 7.4
рисунок 7.4
7.5 Алгоритм вычислительной задачи
В алгоритме вычислительной задачи необходимо:
.Определить какой блок пришел для обработки первый, промежуточный или последний.
.Обработать блок данных в соответствии с алгоритмом вычислительной подпрограммы.
Блок схема алгоритма вычислительной задачи приведена на рисунке
рисунок 7.5
7.6 Вычислительная подпрограмма
В качестве примера вычислительной подпрограммы используем алгоритм Быстрого Преобразования Фурье (БПФ).
Цель данного раздела ознакомится со средствами программирования CCS. Я зыка программирования Си и Ассемблера для процессоров семейства С6000.
Программа БПФ осуществляет преобразование отсчетов массива X размерностью [nx] из временной области в частотную область. Входные выходные данные размещаются в одном массиве (в одной области памяти). Массив коэффициентов БПФ размещается в массиве [W] n элементов, учитывая, что все данные являются комплексными числами, каждый элемент данных представлен действительной и мнимой составляющей.
Функция FFT_P2 вычисляет БПФ, для числа массивов размерностью n элементов массива [nx] являющейся степенью числа 2(2<=nx<=215)
Входные выходные значения и коэффициенты БПФ загружаются, как 16 разрядные целые числа ассемблерная реализация функции использует порядок расположения байт от младшего к старшему.
Основная вычислительная программа написана на языке программирования Си и использует функцию БПФ (CALC_FFT). И использует функцию реализующую на языке ассемблера TMSC 6000, и написанную в соответствии с согласия о вызовах и передаче параметров языка Си.
Эквивалент функции написанной на языке Си (алгоритм реализуемой ассемблерной функции представлен ниже)
/***************************************************************************/
/* */
/* CALC_FFT.C */
/* */
/* Функция БПФ */
/* */
/************************************************************/
/* Вызов функции быстрого преобразования Фурье */
fft_p2(x_buffer, x_number, w_buffer);
/* Определение функции быстрого преобразования Фурье */
static void fft_p2(short x[], short nx, short w[])
{n1, n2, ie, ia, i, j, k, m;xt, yt, c, s;= nx;= 1;(k = nx; k > 1; k = (k >> 1)) {= n2;= n2 >> 1;= 0;(j = 0; j 15;
}
}
ie = ie << 1;
}
return;
}
Функция CALC_FFT реализует БПФ с разряжением по частоте. Коэффициенты W берутся из массива элементы которого вычисляются в соответствии с выражением , где К специальный коэффициент в программе не вычисляется.
Приведенный выше текст программы на языке Си является алгоритмом для программы для программы языка Ассемблер.
В соответствии с этим алгоритмом выполним программу на языке Ассемблера оптимизированную для процессора TMS320C6701.
; Модуль FFT_P2.ASM реализации функции быстрого преобразования Фурье
; на ассемблере цифрового сигнального процессора TMS семейства 6000
; для программы CALC_FFT.C
.sect ".cod"; секция кода
.ref _fft_p2; точка входа C
; Вызов функции быстрого преобразования Фурье */
; fft_p2(x_buffer, x_number, w_buffer);
; B, S1FFT_P2
; LDH.D2T2*+DP[0x400], B4
; MVK.S10x0000, A4
; MVK.S220x0400, B5
;ADD.SIXA4, DP, A4
;||ADD.D2DP, B5, B5
;||MVK.S20X2F6B, B3
;MV.SIXB5, A6
;||MVKH.S20x0000, B3
; Определение функции быстрого преобразования Фурье
; void fft_p2(short x[], short nx, short w[])
; {
; Cмещение параметров функци от вершины стека:
; указатель на массив значений x[] - 0x01
; указатель на массив коэффициентов w[] - 0x03
; число отсчетов БПФ nx - 0x04
FFT_P2:
ADDK-40, SP, *+SP[0x3], *+SP[0x4], *+SP[0x1]
; short n1, n2, ie, ia, i, j, k, m;
; short xt, yt, c, s;
; Cмещение локальных переменных от вершины стека:
; n1 - 0x08
; n2 - 0x09
; ie - 0x0A
; ia - 0x0B
; i - 0x0C
; i - 0x0D
; k - 0x0E
; m - 0x0F
; xt - 0x10
; yt - 0x11
; c - 0x12
; s - 0x13
; n2 = nx;*+SP[0x4],B4, *+SP[0x9]
; ie = 1;x0001,B4, *+SP[0xA]
; for (k = nx; k > 1; k = (k >> 1)) {*+SP[0x4], B4, *+ SP[0xE]_K:LDH*+SP[0xE], B4_RET
; n1 = n2;*+SP[0x9], B4,*+SP[0x8]
; n2 = n2 >> 1;*+SP[0x9], B4, 0x1, B4,*+SP[0x9]
; ia = 0;,*+SP[0x8]
; for (j = 0; j < n2; j++) {,*+SP[0xD]_J:LDH*+SP[0xD], B5*+SP[0x9], B4, B4, B0_CHECK_K
; c = w[2 * ia];*+SP[0xB], B4*+SP[0x3], B5, B4, B4*+SP[0x0], B4,*+SP[0x12]
; s = w[2 * ia + 1];*+SP[0xB], B4, B4, B4, 0x1, B4*+B5[B4], B4,*+SP[0x13]
; ia = ia + ie;*+SP[0xA], B5*+B5[0xB], B4, B4, B4,*+SP[0x1B]
;