Сигнальные процессоры. Аксенов В.П. - 66 стр.

UptoLike

Составители: 

66
для хранения коэффициентов фильтра в массиве coefficient. Коэффициенты
фильтра считываются из файла только при компоновке программы. Эти значе-
ния могут изменяться при повторном проходе компоновщика (linker) без до-
полнительной трансляции ассемблером.
В листинге 5 приведен пример основной программы main и подпрограм-
мы обработки прерываний fir_start. В модуле main программы определяются
переменные циклических буферов с помощью регистров I (указатель), L (дли-
на), M (модификатор). Каждое прерывание вызывает перемещение указателя I
на один шаг (М = 1) в каждом буфере. С помощью цикла clear все элементы
буфера обнуляются. В управляющие регистры заносятся числа, определяющие
параметры и режим работы последовательного порта SPORT0.
В подпрограмме fir_start заполняется буфер цифровых отсчетов аналого-
вого сигнала с использованием регистра приемника rx0, рассчитывается выход-
ной сигнал КИХ-фильтра N-го порядка и выводится на ЦАП кодека через вы-
ходной регистр порта tx0.
После проведения процессором инициализации в начале программы схе-
ма, состоящая из процессора, кодека и внешних генераторов на рис. 39, вы-
полняет циклическую обработку прерываний с периодом дискретизации T
S
в
следующем порядке:
- преобразование входного напряжения в 16-разрядный двоичный код;
- передача последовательным кодом двух слов по 16 бит АЦП каждого ка-
нала с синхронизацией сигналами кодека SCLK и SDOFS;
Листинг 4. Объявление буферов для хранения коэффициентов и данных кодека
#define taps 15 /* константа taps = 15 */
#define taps_less_one 14 /* константа taps_less_one = 14 */
.section/dm dm_data;
.var/circ data_buffer[taps]; /* циклический буфер отсчетов в области dm */
.section/pm pm_data;
var/circ coefficient[taps] =
''coeff.dat''; /* циклический буфер коэффициентов
в области pm заполняется числами из файла ''coeff.dat'' */
      для хранения коэффициентов фильтра в массиве coefficient. Коэффициенты
      фильтра считываются из файла только при компоновке программы. Эти значе-
      ния могут изменяться при повторном проходе компоновщика (linker) без до-
      полнительной трансляции ассемблером.


         Листинг 4.          Объявление буферов для хранения коэффициентов и данных кодека

         #define taps 15                                              /* константа taps = 15 */
         #define taps_less_one 14                            /* константа taps_less_one = 14 */
         .section/dm dm_data;
         .var/circ data_buffer[taps];          /* циклический буфер отсчетов в области dm */
         .section/pm     pm_data;
var/circ     coefficient[taps] = ''coeff.dat''; /* циклический буфер коэффициентов
                               в области pm заполняется числами из файла ''coeff.dat'' */


             В листинге 5 приведен пример основной программы main и подпрограм-
      мы обработки прерываний fir_start. В модуле main программы определяются
      переменные циклических буферов с помощью регистров I (указатель), L (дли-
      на), M (модификатор). Каждое прерывание вызывает перемещение указателя I
      на один шаг (М = 1) в каждом буфере. С помощью цикла clear все элементы
      буфера обнуляются. В управляющие регистры заносятся числа, определяющие
      параметры и режим работы последовательного порта SPORT0.
             В подпрограмме fir_start заполняется буфер цифровых отсчетов аналого-
      вого сигнала с использованием регистра приемника rx0, рассчитывается выход-
      ной сигнал КИХ-фильтра N-го порядка и выводится на ЦАП кодека через вы-
      ходной регистр порта tx0.
             После проведения процессором инициализации в начале программы схе-
      ма, состоящая из процессора, кодека и внешних генераторов на рис. 39, вы-
      полняет циклическую обработку прерываний с периодом дискретизации TS в
      следующем порядке:
             - преобразование входного напряжения в 16-разрядный двоичный код;
             - передача последовательным кодом двух слов по 16 бит АЦП каждого ка-
      нала с синхронизацией сигналами кодека SCLK и SDOFS;


                                                     66