ЭУМК по дисциплине "Проектирование проблемно-ориентированных вычислительных средств" › Теория › Тема 6. Отладочный модуль TMS320С5x и FSK-модем на его основе

# Электронный учебно-методический
комплекс по дисциплине
"Проектирование проблемно-ориентированных вычислительных средств"

для специальности

1-40 02 02 «Электронные вычислительные средства»

Оглавление | Программа | Теория | Практика | Контроль знаний | Об авторах

6.4. Аналоговая интерфейсная микросхема TLC320
6.4.1. Структура аналоговой интерфейсной микросхемы TLC320
Структура интерфейсной микросхемы

Аналоговый интерфейс TLC320AD50C (50I и 52C) обеспечивает преобразование сигнала с высоким разрешением из цифрового в аналоговый (D/A) и из аналогового в цифровой (A/D) с использованием технологии сигма-дельта модуляции. Архитектура с сигма-дельта модуляцией обеспечивает А/Ц и Ц/А преобразование с высоким разрешением при низкой стоимости системы.
Функциональная схема устройства аналогового интерфейса представлена на рис. 6.13.

######

###### Рисунок 6.13 – Блок-схема аналогового интерфейса

Устройство состоит из следующих основных блоков:

- 16-разрядный сигма-дельта АЦП
- 16-разрядный сигма-дельта ЦАП
- Фильтр для децимации после АЦП
- Интерполирующий фильтр перед ЦАП
- Сглаживающий фильтр нижних частот после ЦАП
- Последовательный интерфейс со схемой управления и выходным буфером
- Внутренний источник опорного напряжения (Vref)
- Внутренняя схема фазовой автоподстройки частоты (PLL) с делителем
- Внутренние цепи синхронизации
- Усилители с программируемым коэффициентом усиления (PGA)
- Аналоговые цепи обратной связи
- Цифровые цепи обратной связи
- Два входных мультиплексора

Основные возможности и технические характеристики устройства:

- Универсальная схема аналогового интерфейса для модема V. 34+ и различных аудио приложений
- 16-разрядные сигма-дельта АЦП и ЦАП
- Последовательный интерфейс
- Типовое значение SNR (отношение сигнал/шум) для АЦП и ЦАП равно 89dB
- Типовое значение THD (суммарное значение коэффициента нелинейных искажений) для АЦП и ЦАП равно 90 dB
- Типовое значение динамического диапазона 88 dB
- Тестовый режим, включающий цифровой и аналоговый петлевой тесты
- Программируемая частота А/Ц и Ц/А преобразования
- Максимальная частота преобразования: 22.05 кГц
- Программируемая регулировка уровня на входе и выходе
- Одно напряжение питания 5 В или 5 В аналоговое и 3 В цифровое напряжение питания
- Типовая рассеиваемая мощность в рабочем режиме (PD) 120 мВт (СКЗ)
- Аппаратный режим пониженного энергопотребления до 7.5 мВт
- Внутреннее опорное напряжение (Vref)
- Дифференциальная архитектура всего устройства
- TLC320AD50C/I может поддерживать до трех подчиненных устройств; TLC320AD52C до одного
- Формат данных – двоичный дополнительный код
- Вывод ALTDATA обеспечивает текущий контроль данных
- Контроль усилителя для контроля входных сигналов
- Внутренняя фазовая автоподстройка частоты (PLL)

Программируемые функции этого устройства могут быть выбраны через последовательный интерфейс. Они включают сброс, выключение, протокол связи, частоту дискретизации сигнала, регулировку уровня и тестовые режимы системы.
Передача данных всегда выполняется при первичной связи главного устройства со схемой. Так как устройство работает синхронно, передача слова данных из канала АЦП и в канал ЦАП происходит одновременно.
Назначение выводов микросхемы

В табл. 6.3. приведено назначение основных выводов микросхемы.
Таблица 6.3. Назначение основных выводов микросхемы

Вывод | Описание
Имя | Тип
ALTDATA | I | Альтернативные данные. Сигналы с ALTDATA направляются к DOUT в течение вторичной связи, если разрешен режим телефона в регистре управления 2.
AUXM | I | Дополнительный инвертирующий аналоговый вход. AUXM требует внешнего однополюсного антиалайзингового фильтра с низким выходным полным сопротивлением и должен быть подсоединен к AVSS (аналогой земле), если не используется.
AUXP | I | Дополнительный неинвертирующий аналоговый вход. AUXP требует внешнего однополюсного антиалайзингового фильтра с низким выходным полным сопротивлением и должен быть подсоединен к AVSS (аналогой земле), если не используется.
DIN | I | Вход данных. DIN получает входные данные ЦАП и данные регистров от внешнего цифрового процессора сигналов (ЦПС) и синхронизируется SCLK и FS. Данные защелкиваются падающим фронтом SCLK, когда FS низкий. DIN имеет высокий импеданс когда FS не активен.
DOUT | O | Выход данных. DOUT передает выходные данные АЦП и данные регистров и синхронизируется SCLK. Данные появляются на выходе при нарастающем фронте SCLK, когда FS низкий. DOUT имеет высокий импеданс, когда FS не активен. Когда схема сконфигурирована как ведущая (мастер), DOUT активен только в течение соответствующего интервала времени и имеет высокий импеданс в течение синхронизации кадра для ведомого (слейв).
FC | I | Аппаратный запрос вторичной связи. Когда FC устанавливается в высокое состояние, вторичная связь последует за первичной связью и приведет к передаче данных между устройством и внешним контроллером. FC защелкивается по возрастающему фронту FS в конце первичной последовательности связи.
FILT | O | Режекторный фильтр. FILT предусмотрено для подключения делителя напряжения между фильтром и напряжением 3.2 В, оптимальная величина конденсатора - 0.1мкФ (керамический). Этот делитель напряжения должен быть нагружен только на высоко-импедансную нагрузку.
FLAG | O | Выходной флаг. В режиме телефона FLAG содержит значение, установленное в регистре управления 2.
FS | I/O | Синхронизация кадра (фрейма). FS - выход, когда устройство сконфигурировано как ведущее (M/S вывод соединен с высоким уровнем). FS - вход, когда устройство сконфигурировано как ведомое (M/S вывод соединен с низким уровнем). В режиме ведомого, данные будут переданы, когда FS станет низким. В режиме ведущего FS генерируется внутри схемы для ведущего устройства и всех ведомых устройств. В режиме ведущего FS низкий при передаче данных.
FSD | O | Выход задержанной синхронизации кадра. FSD (активный - низкий) выход синхронизирует ведомые устройства с кадровой синхронизацией ведущего устройства. FSD ведущего устройства подсоединяется ко входу FS ведомого и имеет ту же самую продолжительность, что и ведущий FS, но этот сигнал задержан на числа тактов, заданное в регистре управления 3.
INM | I | Инвертирующий аналоговый вход. INM требует внешнего однополюсного антиалайзингового фильтра с низким выходным полным сопротивлением.
INP | I | Неинвертирующий аналоговый вход. INP требует внешнего однополюсного антиалайзингового фильтра с низким выходным полным сопротивлением.
M/S | I | Вход выбора Ведущий/Ведомый. Когда M/S высокий, устройство является ведущим. Когда M/S низкий, устройство является ведомым.
MCLK | I | Задающий генератор. MCLK задает внутреннюю синхронизацию микросхемы.
MONOUT | O | Контролирующий выход. MONOUT контролирует текущее состояние аналогового входа и имеет высокое выходное сопротивление. Усиление или подавление выбираются регистром управления 1.
OUTM | O | Инвертирующий выход ЦАП. Выход OUTM может быть нагружен на 600 Ом. OUTM функционально идентичен и дополняет OUTP. OUTM может также использоваться один для асимметричной работы.
OUTP | O | Неинвертирующий выхода ЦАП. Выход OUTP может быть нагружен на 600 Ом. OUTP может также использоваться один для асимметричной работы.
PWRDWN | I | Выключение питания. Когда PWRDWN становится низким, устройство переходит в режим пониженного потребления энергии, при этом последовательный интерфейс отключен. Однако состояние всех регистров сохраняется и устройство продолжит свою работу без повторной инициализации, когда PWRDWN снова станет высоким. PWRDWN сбрасывает только счетчики и сохраняет состояние программируемых регистров.
REFM | O | Отрицательный выход опорного напряжения. REFM отфильтровано НЧ фильтром из внутреннего опорного. Оптимальная величина керамического конденсатора - 0.1 мкФ и он должен быть подключен между REFM и REFP. Напряжение на выходе REFM – 0 В.
REFP | O | Положительный выход опорного напряжения. REFP отфильтровано НЧ фильтром из внутреннего опорного. Оптимальная величина керамического конденсатора - 0.1 мкФ и он должен быть подключен между REFP и REFM. Напряжение на выходе REFP - 3.2 В.
RESET | I | Сброс. RESET инициализирует все внутренние регистры в их начальное состояние. Последовательный порт также конфигурируется к заданному по умолчанию состоянию.
SCLK | I/O | Частота сдвига. Сигнал SCLK синхронизирует последовательные данные, вводимые через DIN и выводимые через DOUT в течение интервала кадровой синхронизации. Когда он сконфигурирован как выход (M/S высокий), SCLK генерируется внутренне умножением частоты синхросигнала кадра на 256. Когда он сконфигурирован как вход (M/S низкий), SCLK генерируется внешним образом и должен быть синхронен с задающим генератором и частотой кадра.

6.4.2. Подключение аналоговой интерфейсной микросхемы TLC320 и управление режимами ее работы
Подключение интерфейсной микросхемы

При подключении нескольких устройств они соединяются последовательно, при этом первый является ведущим, а остальные ведомыми (рис. 6.14).

######

###### Рисунок 6.14 – Каскадное соединение микросхем TLC320AD50C

Выход FSD ведущего поступает на первый ведомый, выход FSD первого ведомого – на второй ведомый и так далее. Выход FSD предыдущего устройства соединяется со входом FS следующего. Последовательность FSD импульсов в режиме ведомого следующая:

- когда данные в регистре FSD = 0, FSD переходит в низкое состояние на 1/4 периода SCLK, прежде чем FS станет низким.
- когда данные в регистре FSD больше чем 17, FSD переходит в низкое состояние по восходящему фронту SCLK, равному номеру в регистре FSD, после спадающего фронта FS (см. рис. 6.15). Значения данных от 1 до 17 не должны использоваться.

######

###### Рисунок 6.15 – Временная диаграмма работы микросхем TLC320AD50C

Цифровой последовательный интерфейс состоит из сигнала сдвига (SCLK), кадрового синхросигнал (FS), выхода данных канала АЦП (DOUT) и входа данных канала ЦАП (DIN). В течение первичного интервала синхронизации кадра SCLK синхронизирует результаты канала АЦП, выдаваемые через DOUT, и синхронизирует 16-разрядные / (15+1)-разрядные данные ЦАП, принимаемые через DIN.
В течение вторичного интервала синхронизации кадра SCLK синхронизирует данные чтения регистра через DOUT, если бит чтения (DS13) установлен в 1, и передает команды и параметры устройства через DIN. Передача начинается со старшего бита (DS15).
Управление микросхемой

Для передачи управляющей информации в устройство через DIN и чтения состояния устройства через DOUT используется вторичная связь. При этом передача данных происходит по аппаратному или программному запросу.
Схема имеет семь регистраторов управления, которые используются следующим образом:
Регистр 0 Регистр пустой команды. Адресация регистра 0 позволяет при вторичной связи не изменить состояние никакого другого регистра.
Регистр 1 Регистр управления 1. Данные в этом регистре управляют:

- Программным сбросом и снижением энергопотребления
- Подключением основных или дополнительных аналоговых входов
- Контролем основных или дополнительных аналоговых входов и выбором коэффициента усиления усилителя контрольного выхода
- Выбором цифровой обратной связи
- Выбор 16- или (15 + 1) разрядного режима работы ЦАП

Регистр 2 Регистр управления 2. Данные в этом регистре:

- Содержат выходное значение бита FLAG
- Выбирают режим телефона
- Содержат флажок переполнения децимирующего FIR фильтра
- Выбирают 16- или (15 + 1) разрядный режим работы АЦП
- Разрешают аналоговую обратную связь

Регистр 3 Регистр управления 3. Данные в этом регистре:

- Устанавливают число тактов SCLK, задающих задержку между FS и FSD
- Указывает ведущему, сколько ведомых подсоединены к нему в цепочке

Регистр 4 Регистр управления 4. Данные в этом регистре:

- Выбирают коэффициенты усиления для входного и выходного усилителей
- Устанавливают частоту дискретизации, выбирая величину N от 1 до 8, при этом fs = MCLK / (128 × N) или MCLK / (512 × N)
- Выбирают ФАПЧ (PLL). Если PLL выбран – частота дискретизации будет равна (MCLK × 4) / (512 × N). Если PLL обходится – частота дискретизации устанавливается MCLK / (512 × N).

Регистр 5 Зарезервирован для теста производителем. Не пишите в этот регистр.
Регистр 6 Зарезервирован для теста производителем. Не пишите в этот регистр.
Частота сдвига SCLK получается из частоты дискретизации fs, а не MCLK следующим образом: SCLK = 256 × fs
Частота среза фильтра не может управляться программированием регистра. Характеристика фильтра приводится для частоты дискретизации 8 кГц. Ширина полосы пропускания изменяется линейно и пропорционально частоте дискретизации.
Программирование всех регистров происходит в течение вторичной связи через вход DIN и данные защелкиваются и являются действительными на спадающем фронте SCLK в течение синхросигнала кадра. Если значение по умолчанию для отдельного регистра является соответствующим, то этот регистр не должен быть адресован в течение вторичного интервала связи. Пустая команда (DS15-DS8 все равны 0) адресует псевдорегистр (регистр 0) и в течение связи никакого программирования регистров не происходит.
Кроме того, любой регистр может быть прочитан через DOUT в течение вторичной связи установкой бита чтения (DS13) в 1. Когда регистр находится в режиме чтения, никакие данные не могут быть записаны в регистр в течение этого цикла. DS13 должен быть очищен, чтобы записать в регистр.
Например, если необходимо прочитать содержимое регистра управления 1 через DOUT, должна быть выполнена следующая процедура (рис. 6.16):
1. Запросить вторичную связь установкой D0 = 1 (программный запрос) или FC = высокий (аппаратный запрос) в течение первичного интервала связи.
2. Во вторичном интервале связи (FS) послать данные в следующем формате через DIN:
Чтение регистра управления 1

| Чт | Регистр 1 |
0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | x | x | x | x | x | x | x | x
DS15 |  | DS0

3. Затем следующие данные будут читаться из DOUT, при этом в последних 8 битах DOUT будут содержаться данные регистра 1.

| Чт | Регистр 1 | Данные
M/S | 0 | 1 | 0 | 0 | 0 | 0 | 1 | d | d | d | d | d | d | d | d
DS15 |  | DS0

######

###### Рисунок 6.16 – Временная диаграмма чтения регистра

Если же необходимо запрограммировать регистр управления 1, должна быть выполнена следующая процедура (рис.6.17):
1. Запросить вторичную связь установкой D0 = 1 (программный запрос) или FC = высокий (аппаратный запрос) в течение первичного интервала связи.
2. Во вторичном интервале связи (FS) послать данные в следующем формате через DIN:
Запись регистра управления 1

| Зп | Регистр 1 | Данные
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | d | d | d | d | d | d | d | d
DS15 |  | DS0

3. Следующие данные будут прочитаны из DOUT.

| Зп | Регистр 1 |
M/S | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0
DS15 |  | DS0

######

###### Рисунок 6.17 – Временная диаграмма записи в регистр

Назначение отдельных битов регистров управления приведено ниже в табл. 6.4-6.7.
Таблица 6.4. Регистр управления 1

D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Описание
1 | - | - | - | - | - | - | - | Программный сброс
0 | - | - | - | - | - | - | - | Программный сброс не задан
- | 1 | - | - | - | - | - | - | Программное снижение энергопотребления
- | 0 | - | - | - | - | - | - | Программное снижение энергопотребления не задано
- | - | 1 | - | - | - | - | - | Выбор AUXP и AUXM для АЦП
- | - | 0 | - | - | - | - | - | Выбор INP и INM для АЦП
- | - | - | 1 | - | - | - | - | Выбор AUXP и AUXM для контроля
- | - | - | 0 | - | - | - | - | Выбор INP и INM для контроля
- | - | - | - | 0 | 0 | - | - | Контрольный усилитель выключен
- | - | - | - | 0 | 1 | - | - | Коэффициент усиления контрольного усилителя = 0 дБ (пр.1)
- | - | - | - | 1 | 0 | - | - | Коэффициент усиления контрольного усилителя = -8 дБ (пр.1)
- | - | - | - | 1 | 1 | - | - | Коэффициент усиления контрольного усилителя = -18 дБ (пр.1)
- | - | - | - | - | - | 1 | - | Цифровая обратная связь включена
- | - | - | - | - | - | 0 | - | Цифровая обратная связь выключена
- | - | - | - | - | - | - | 1 | 16-разрядный режим ЦАП (аппаратные вторичные запросы)
- | - | - | - | - | - | - | 0 | (15+1)-разрядный режим ЦАП (программные вторич. запросы)

Значение по умолчанию: 00000000
ПРИМЕЧАНИЕ 1: Это коэффициент усиления - для асимметричного входа. Коэффициент усиления на 6 дБ ниже с дифференциальным входом.
Программный сброс - однократная операция и этот бит очищается после сброса, поэтому нет необходимо записывать 0, чтобы закончить сброс ведущего. В зарезервированные биты рекомендуется записывать 0.
Таблица 6.5. Регистр управления 2

D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Описание
Х | - | - | - | - | - | - | - | Выходное значение бита FLAG
- | 1 | - | - | - | - | - | - | Режим Телефона включен
- | 0 | - | - | - | - | - | - | Режим Телефона отключен
- | - | Х | - | - | - | - | - | Переполнение фильтра дециматора (в цикле чтения)
- | - | - | 1 | - | - | - | - | 16-разрядный режим АЦП
- | - | - | 0 | - | - | - | - | (15+1)-разрядный режим АЦП
- | - | - | - | 1 | - | - | - | Аналоговая обратная связь включена
- | - | - | - | 0 | - | - | - | Аналоговая обратная связь выключена
- | - | - | - | - | 1 | - | - | FSD запрещено (только для TLC320AD52C)
- | - | - | - | - | 0 | 0 | 0 | FSD разрешено (только для TLC320AD52C)
- | - | - | - | - | Х | 0 | 0 | Зарезервировано (только для TLC320AD50C)

Значение по умолчанию: 00000000
Запись в регистр управления 3 загружает биты D7(MSB)-D0 в регистр задержки синхронизации кадра (FSD). Биты данных (D5-D0) определяют число импульсов SCLK между FS и задержанным сигналом синхронизации кадра FSD. Минимальная величина данных для этой части регистра (биты D5-D0) равна 18.
Таблица 6.6. Регистр управления 3

D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Описание
Х | Х | - | - | - | - | - | - | Число ведомых устройств (максимум 3 для TLC320AC50C и максимум 1 для TLC320AC52C)
- | - | Х | Х | Х | Х | Х | Х | Число импульсов SCLK между FS и FSD

Значение по умолчанию: 00000000
Рекомендуется записывать 0 в зарезервированные биты.
Таблица 6.7. Регистр управления 4

D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Описание
1 | - | - | - | - | - | - | - | Обойти внутреннюю схему ФАПЧ (DPLL)
0 | - | - | - | - | - | - | - | Разрешить работу ФАПЧ (DPLL)
- | Х | Х | Х | - | - | - | - | Выбор частоты дискретизации (N): fs = MCLK / (128 × N) при D7=0 или MCLK / (512 × N) при D7=1
- | - | - | - | 0 | 0 | - | - | Усиление аналогового входа = 0 дБ
- | - | - | - | 0 | 1 | - | - | Усиление аналогового входа = 6 дБ
- | - | - | - | 1 | 0 | - | - | Усиление аналогового входа = 12 дБ
- | - | - | - | 1 | 1 | - | - | Аналоговый вход выключен
- | - | - | - | - | - | 0 | 0 | Усиление аналогового выхода = 0 дБ
- | - | - | - | - | - | 0 | 1 | Усиление аналогового выхода = -6 дБ
- | - | - | - | - | - | 1 | 0 | Усиление аналогового выхода = -12 дБ
- | - | - | - | - | - | 1 | 1 | Аналоговый выход выключен

Значение по умолчанию: 00000000
Величина делителя частоты дискретизации N определяется восьмеричным представлением битов D4-D6. Следовательно, 001 = 1, 010 = 2 и т.д. Установка D4-D6 в 000 выбирает N = 8.

6.4.3. Программная инициализация аналоговой интерфейсной микросхемы и всего лабораторного макета
Последовательность инициализации

В программе инициализации процессора TMS320VC5402 выполняются установки отдельных регистров процессора. Ниже приведены названия регистров и назначение их отдельных битов.
Регистр состояния режима процессора PMST:

№ бита | 15-7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
Название | IPTR | MP/MC | OVLY | AVIS | DROM | CLKOFF | SMUL | SST

IPTR - старшие разряды начального адреса таблицы векторов прерываний;
MP/MC - режим работы (по сбросу считывается с вывода процессора);
OVLY - включение DARAM в область pma;
AVIS - видимость адреса на внешних выводах процессора;
DROM - включение ROM в область dma;
CLKOFF - не выводить тактовую частоту;
SMUL - режим насыщения при умножении;
SST - режим насыщения при сохранении.
Регистр масок прерываний IMR:

№ бита | 15-14 | 13 | 12 | 11 | 10 | 10 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
Название | - | DMA5 | DMA4 | DMA3 | DMA2 | HPINT | INT3 | TINT1 | DMA0 | XINT0 | RINT0 | TINT0 | INT2 | INT1 | INT0

INT0¸3 - маски внешних прерываний INT0¸INT3;
TINT0,1 - маски прерываний внутренних таймеров;
RINT0 - маска прерывания приемника последовательного порта 0;
XINT0 - маска прерывания передатчика последовательного порта 0;
HPINT - маска прерывания интерфейса HPI;
DMA0¸5 - маски прерываний каналов 0¸5 контроллера DMA.
Для инициализации микросхемы АИ необходимо установить режим работы таймера (тактовая частота с выхода TOUT) для чего используется регистр управления таймера, формат которого приведен ниже.
Регистр управления таймера TCR:

№ бита | 15-12 | 11 | 10 | 9-6 | 5 | 4 | 3-0
Название | - | Soft | Free | PSC | TRB | TSS | TDDR

Soft - режим останова таймера;
Free - работа таймера без останова;
PSC - счетчик предварительного делителя;
TRB - режим перезагрузки таймера из TDM;
TSS - режим остановки таймера;
TDDR - регистр загрузки предварительного делителя.

Программа инициализации макета и генерации синуса
Перед инициализацией микросхемы АИ необходимо выполнить инициализацию последовательных портов, а при необходимости и контроллера ПДП.
Ниже приведен пример головной программы и подпрограмм инициализации макета и генерирования синусоиды.

    *************************************************************************
    *	(C) Copyright Texas Instruments, Inc. 2000			*
    *	(C) Copyright U. Klius, BSUIR, Minsk, 2004			*
    *************************************************************************
    * MODULE NAME:	SINE.ASM						*
    *	AUTHOR:	C5000 Applications					*
    * DESCRIPTION:	Эта программа генерирует синусоидальный сигнал		*
    *		используя TMS320C54x DSKplus. Выходное значение		*
    *		сигнала просматривается с помощью осциллографа.		*
    *		Основные функции включают:				*
    *		а) Инициализацию DSP (памяти, ожидание и т.п.)		*
    *		б) Инициализацию последовательного порта		*
    *		в) Инициализацию CODECа					*
    *		г) Разрешение прерывания McBSP				*
    *		д) Генерацию синусоидального сигнала			*
    *	 DATE:	21/04/2004						*
    *************************************************************************
    	.title	"Sine Wave Generator - 5402 DSK"
    	.include "regs.h"
    	.def	start
    	.def	BRINT1_ISR
    	.ref	init_5402
    	.ref	init_McBSP
    	.ref	init_AD50
    *************************************************************************
    * Определяет стек. Размер определяется компоновщиком опцией -stack.	*
    * Значение по умолчанию - 1K слов.					*
    *************************************************************************
    	.global	__STACK_SIZE
    __stack: .usect	".stack",0
    *=======================================================================*
    *	распределение памяти данных под таблицу синуса			*
    *=======================================================================*
    lenght	.set	256	; длина таблицы синуса FFh + 1
    	.sect	".table"
    	.copy	"sin_tbl.inc"
    *************************************************************************
    *	ОПРЕДЕЛЕНИЕ ОБЩИХ ПЕРЕМЕННЫХ И ФУНКЦИЙ				*
    *************************************************************************
    	 .data
    temp	   .word 00000h	; временная (рабочая) ячейка
    freq_scale .word 00020h	; частота 1-й гармоники (1 KHz)
    ampl_scale .word 00800h	; амплитуда сигнала ( =1)
    host_cmd   .word 00000h	; регистр команд host ( =wait)
    *************************************************************************
    *	НАЧАЛО ИСПОЛНЯЕМОГО КОДА					*
    *************************************************************************
    	.text
    start:
    *=======================================================================*
    * Инициализация SP. Стек растет от старших адресов к младшим 		*
    *=======================================================================*
    	LD	#__stack, a		; установка начала стека
    	ADD	#__STACK_SIZE-1, a	; плюс длина - вершина стека
    	AND	#0FFFEh, a		; сделать адрес четным
    	STLM	a, SP			; записать в указатель стека
    	NOP
    	NOP
    *=======================================================================*
    *	Основной код начинается отсюда					*
    *=======================================================================*
    	SSBX	intm			; запрет всех прерываний
    	CALL	init_5402		; инициализация ЦПС
    	CALL	init_McBSP		; инициализация порта McBSP
    	CALL	init_AD50		; инициализация CODECа
    	LD	#0, DP
    	NOP
    	SSBX	OVM			; насыщение при переполнении
    	SSBX	FRCT			; сдвиг влево на 1 при умножении
    	SSBX	SXM			; режим расширения знака
    	STM	#SINE, ar1		; метка определена в sin_tab.asm
    	STM	#lenght, BK		; длина циклического буфера
    	STM	#McBSP1_DRR1, ar4	; ar4 адрес приемника McBSP
    	STM	#McBSP1_DXR1, ar5	; ar5 адрес передатчика McBSP
    *=======================================================================*
    *	Ожидание команды от компьютера					*
    *=======================================================================*
    WAIT:	NOP
    ;	BITF	@host_cmd, 02h		; проверка на команду start
    ;	BC	EN_OUTPUT, TC		; разрешение вывода и прерывания
    	BITF	ar2, 0FFFFh		; проверка на команду start
    	BC	EN_OUTPUT, NTC		; разрешение вывода и прерывания
    	NOP				; если получена команда start
    	NOP
    	B	WAIT			; назад на цикл ожидания
    *=======================================================================*
    *	Разрешение McBSP1 Tx и Rx и прерываний				*
    *=======================================================================*
    EN_OUTPUT:
    	ST	#SPCR2, @McBSP1_SPSA
    	ORM	#1, @McBSP1_SPSD	; передатчик ВКЛЮЧИТЬ
    	NOP
    	NOP
    	ST	#SPCR1, @McBSP1_SPSA
    	ORM	#1, @McBSP1_SPSD	; приемник ВКЛЮЧИТЬ
    	NOP
    	NOP
    	ST	#0, @host_cmd		; очистить регистр команд
    	STM	#7fffh, ifr		; очистить ждущие прерывания
    	STM	#0400h, imr		; разрешить Rx прерывание McBSP1
    	RSBX	intm			; общее разрешение прерываний
    	B	WAIT			; branch to idle loop
    ********************************************
    * ПРОЦЕДУРА ОБРАБОТКИ ПРЕРЫВАНИЯ ПРИЕМНИКА *
    ********************************************
    BRINT1_ISR:
    	LD	#temp, DP		; установка страницы данных
    	LD	*AR4, b			; чтение данных из McBSP для
    					; разрешения следующих прерываний
    	LD	@freq_scale, 16, b	; чтение значения шага в AR0
    	STH	b, AR0
    SINEWAVE:				; генерирование сигнала синуса с
    	LD	#0, a			; разной амплитудой и частотой
    	LD	*AR1+0%, 16, a		; А(31-16) = данные из таблицы
    	MPYA	@ampl_scale		; изменение амплитуды в B(31-16)
    	STH	b, @temp		;
    	LD	@temp, b		; чтение амплитуды в B(15-0)
    	AND	#0FFFEh, b		; обнуление 0-го бита данных
    	STL	b, *AR5			; запись B[15-0] в @McBSP1_DXR1
    	STM	#7fffh, ifr		; очистка флагов прерываний

    	BITF	@host_cmd, 1		; проверка на команду stop
    	BC	DIS_OUTPUT, TC		;
    	RETE				; разрешить прерывание и возврат
    ;
    DIS_OUTPUT:
    	ST	#SPCR2, @McBSP1_SPSA
    	ANDM	#0FFFEh, @McBSP1_SPSD	; ВЫКЛ и сбросить передатчик
    	NOP
    	NOP
    	ST	#SPCR1, @McBSP1_SPSA
    	ANDM	#0FFFEh, @McBSP1_SPSD	; ВЫКЛ и сбросить приемник
    	ST	#0, @host_cmd		; очистить регистр команд
    	RETD	 			; вернуться в цикл ожидания
    	NOP
    * End of sine.asm

    Подпрограмма инициализации DSP.
    *************************************************************************
    *	(C) Copyright Texas Instruments, Inc. 2000			*
    *	(C) Copyright U. Klius, BSUIR, Minsk, 2004			*
    *************************************************************************
    * MODULE NAME:	INIT5402.ASM						*
    *	AUTHOR:	C5000 Applications					*
    * DESCRIPTION:	Файл для установки ST0,ST1,PMST,BSCR,SWWSR и SWCR	*
    *		в нужное состояние					*
    *	 NOTE:	init_5402 не используется с DSP/BIOS. Если Вы 		*
    *		используете BIOS для инициализации этих регистров,	*
    *		пользуйтесь механизмами BIOS				*
    *	 DATE:	01/03/2004						*
    *************************************************************************
    *	ARP TC C OVA OVB    DP
    * ST0:	000  1 1  0   0  0 0000 0000
    * Регистр состояния процессора 0
    * 0001100000000000 1800h
    * 000~~~~~~~~~~~~~ (ARP) Указатель вспомогательного регистра
    * ~~~1~~~~~~~~~~~~ (TC) Тестовый/Управляющий флаг
    * ~~~~1~~~~~~~~~~~ (C) Бит переноса
    * ~~~~~0~~~~~~~~~~ (OVA) Флаг переполнения аккумулятора А
    * ~~~~~~0~~~~~~~~~ (OVB) Флаг переполнения аккумулятора В
    * ~~~~~~~000000000 (DP) Указатель страницы памяти данных
    *	BRAF CPL XF HM INTM 0 OVM SXM C16 FRCT CMPT  ASM
    * ST1:	 0    0  1  0   1   0  0   1   0   0    0   0 0000
    * Регистр состояния процессора 1
    * 0010101101000000 2B40h
    * 0~~~~~~~~~~~~~~~ (BRAF) Флаг активности повторения блока
    * ~0~~~~~~~~~~~~~~ (CPL) Базовый адрес DP/SP (DP)
    * ~~1~~~~~~~~~~~~~ (XF) Внешний программный флаг XF
    * ~~~0~~~~~~~~~~~~ (HM) Остановка в HOLD-режиме (ВЫКЛ)
    * ~~~~1~~~~~~~~~~~ (INTM) Запрет всех прерываний (ВКЛ)
    * ~~~~~0~~~~~~~~~~	 Резерв
    * ~~~~~~1~~~~~~~~~ (OVM) Режим коррекции переполнения (ВКЛ)
    * ~~~~~~~1~~~~~~~~ (SXM) Режим расширения знака (ВКЛ)
    * ~~~~~~~~0~~~~~~~ (C16) Режим двух 16-разрядных слов (ВЫКЛ)
    * ~~~~~~~~~1~~~~~~ (FRCT) Дробный режим (сдвиг влево на 1)
    * ~~~~~~~~~~0~~~~~ (CMPT) Режим совместимости (ВЫКЛ)
    * ~~~~~~~~~~~00000 (ASM) Режим сдвига аккумулятора
    *	 IPTR       MPMC OVLY AVIS DROM CLKOFF SMUL SST
    * PMST: 11111111  1  X    0    0     0    0     X    X
    * Регистр режима процессора
    * 0000000010100011 00A2h
    * 000000001~~~~~~~ (IPTR) Указатель на таблицу векторов прерываний
    * ~~~~~~~~~0~~~~~~ (MPMC) Режим работы (Микрокомпьютер)
    * ~~~~~~~~~~1~~~~~ (OVLY) Внутренняя RAM как ДАННЫЕ (и ПРОГРАММА)
    * ~~~~~~~~~~~0~~~~ (AVIS) Режим видимости адреса (ВЫКЛ)
    * ~~~~~~~~~~~~0~~~ (DROM) Внутренняя ROM в области ДАННЫХ (ВЫКЛ)
    * ~~~~~~~~~~~~~0~~ (CLKOFF) Отключение выхода CLKOUT (ВКЛ)
    * ~~~~~~~~~~~~~~1~ (SMUL) Насыщение при умножении (ВКЛ)
    * ~~~~~~~~~~~~~~~0 (SST) Насыщение при записи результата (ВЫКЛ)
    *       BNKCMP PS-DS Reserwed HBH BH EXIO
    * BSCR: XXXX     X   XXXXXXXX  X  0   0
    * Регистр управления переключением банков
    * 0000100000000000 0800h
    * 0000~~~~~~~~~~~~ (BNKCMP) Размер банка 64К слов
    * 1000~~~~~~~~~~~~ (BNKCMP) Размер банка 32К слов
    * 1100~~~~~~~~~~~~ (BNKCMP) Размер банка 16К слов
    * 1110~~~~~~~~~~~~ (BNKCMP) Размер банка 8К слов
    * 1111~~~~~~~~~~~~ (BNKCMP) Размер банка 4К слов
    * ~~~~1~~~~~~~~~~~ (PS-DS) Дополнительный цикл между чтением PS и DS
    * ~~~~0~~~~~~~~~~~ (PS-DS) Дополнительный цикл при пересечении банков
    * ~~~~~00000000~~~	 Резерв
    * ~~~~~~~~~~~~~0~~ (HBH) Держатель шины данных HPI (ВЫКЛ)
    * ~~~~~~~~~~~~~~0~ (BH) Держатель шины данных (ВЫКЛ)
    * ~~~~~~~~~~~~~~~0 (EXIO) Функция отключения внешней шины (ВЫКЛ)
    *       XPA I/O DT8 DT0 PR8 PR0
    * SWWSR: 0  111 111 111 111 111
    * Регистр программного состояния ожидания
    * 0010000000000000 2000h
    * 0~~~~~~~~~~~~~~~ (XPA) Расширение адреса программ (R-only)
    * ~010~~~~~~~~~~~~ (I/O) Число тактов ожидания для IS 0000-FFFF
    * ~~~~000~~~~~~~~~ (DT8) Число тактов ожидания для DS 8000-FFFF
    * ~~~~~~~000~~~~~~ (DT0) Число тактов ожидания для DS 0000-7FFF
    * ~~~~~~~~~~000~~~ (PR8) Число тактов ожидания для PS 8000-FFFF
    * ~~~~~~~~~~~~~000 (PR0) Число тактов ожидания для PS 0000-7FFF
    * 	 Reserwed      SWSM
    * SWCR: 000000000000000 0
    * Регистр управления программным состоянием ожидания
    * 0000000000000000 0000h
    * 000000000000000~	 Резерв
    * ~~~~~~~~~~~~~~~0 (SWSM) Умножение числа тактов ожидания на 2 (НЕТ)
    *
    	.include regs.h
    	.def	init_5402
    ST0_VAL .set	1800h	; Значение по умолчанию
    ST1_VAL .set	2B40h	; Дополнительно устан. OVM, FRCT
    PMST_VAL .set	00A2h	; Прерывания на стр. 1 + OVLY=1
    BSCR_VAL .set	0800h	; 64К банк, дополнительный цикл
    SWWSR_VAL .set	2000h	; два такта ожидания для I/O
    	.text
    init_5402:
    *-------- Инициализация регистра режима процессора -----------
    	STM	#PMST_VAL, PMST
    *-------- Установка состояния ожидания для переключения банков -------
    	STM	#BSCR_VAL, BSCR
    *---------- Init. the S/W Wait State Register ---------------------
    	STM	#SWWSR_VAL, SWWSR	;используется значение по умолчанию
    *	--- Остановка внутренних таймеров ------
    	STM	#10h, TCR
    	STM	#10h, TCR1
    *	--- Возврат в основную программу ---
    	RETD
    	NOP
    	NOP

    Подпрограмма инициализации McBSP.
    *************************************************************************
    *		(C) Copyright Texas Instruments, Inc. 2000		*
    *		(C) Copyright U. Klius, BSUIR, Minsk, 2004		*
    *************************************************************************
    * MODULE NAME:	McBSP.ASM						*
    *	AUTHOR:	C5000 Applications					*
    * DESCRIPTION:	Эта программа инициализирует 5402 McBSP в режим		*
    *		SPI для связи с кодеком AD50 на плате			*
    *		Этот файл не включает McBSP Tx и Rx, прием и		*
    *		передача включаются в головной программе		*
    *	 DATE:	01/03/2004						*
    *************************************************************************
    *       DLB RJUST CLKSTP rsvd DXENA ABIS RINTM RSYNCERR RFULL RRDY -RRST
    * SPCR1: 0   00     00   000    0    0     00      0      0    0     0
    * Регистр управления 1 последовательным портом
    * 0101000000000000 5000h
    * 0~~~~~~~~~~~~~~~ (DLB) Цифровая обратная связь (ВЫКЛ)
    * ~00~~~~~~~~~~~~~ (RJUSR) Выровнять вправо и заполнить 0 DRR[1,2]
    * ~01~~~~~~~~~~~~~ (RJUSR) Выровнять вправо и заполнить зн. DRR[1,2]
    * ~10~~~~~~~~~~~~~ (RJUSR) Выровнять влево и заполнить 0 DRR[1,2]
    * ~11~~~~~~~~~~~~~ (RJUSR) Резерв
    * ~~~00~~~~~~~~~~~ (CLKSTP) Режим остановки синхронизации (ВЫКЛ)
    * ~~~10~~~~~~~~~~~ (CLKSTP) Синхронизация по фронту без задержки
    * ~~~~~000~~~~~~~~	 Резерв
    * ~~~~~~~~0~~~~~~~ (DXENA) Разрешитель DX (ВЫКЛ)
    * ~~~~~~~~~0~~~~~~ (ABIS) Режим A-bis (ВЫКЛ)
    * ~~~~~~~~~~00~~~~ (RINTM) RINT управляется RRDY (конец слова)
    * ~~~~~~~~~~01~~~~ (RINTM) RINT генерируется в конце блока или кадра
    * ~~~~~~~~~~10~~~~ (RINTM) RINT генерируется синхронизацией кадра
    * ~~~~~~~~~~11~~~~ (RINTM) RINT генерируется RSYNCERR
    * ~~~~~~~~~~~~0~~~ (RSYNCERR) Ошибка синхронизации (НЕ детектируется)
    * ~~~~~~~~~~~~~0~~ (RFULL) RBR[1,2] не переполнился (R-only)
    * ~~~~~~~~~~~~~1~~ (RFULL) DRR[1,2], RBR[1,2] и RSR[1,2] полные
    * ~~~~~~~~~~~~~~0~ (RRDY) Приемник не готов (R-only)
    * ~~~~~~~~~~~~~~0~ (RRDY) Приемник готов (чтение данных из DRR[1,2])
    * ~~~~~~~~~~~~~~~0 (-RRST) Приемник последовательного порта (ВЫКЛ)
    *         rsvd FREE SOFT -FRST -GRST XINTM XSYNCERR -XEMPTY XRDY -XRST
    * SPCR2: 000000 0    0     0     0     00     0        0     0      0
    * Регистр управления 2 последовательным портом
    * 0000000000000000 0000h
    * 0000000001000000 0040h
    * 000000~~~~~~~~~~	 Резерв
    * ~~~~~~0~~~~~~~~~ (FREE) Режим свободной работы (ВЫКЛ)
    * ~~~~~~~0~~~~~~~~ (SOFT) SOFT режим (ВЫКЛ)
    * ~~~~~~~~0~~~~~~~ (-FRST) Генератор синхронизации кадра (СБРОШЕН)
    * ~~~~~~~~~0~~~~~~ (-GRST) Генератор частоты дискретизации (СБРОШЕН)
    * ~~~~~~~~~~00~~~~ (XINTM) XINTM управляется XRDY (конец слова)
    * ~~~~~~~~~~01~~~~ (XINTM) XINTM генерируется в конце блока или кадра
    * ~~~~~~~~~~10~~~~ (XINTM) XINTM генерируется синхронизацией кадра
    * ~~~~~~~~~~11~~~~ (XINTM) XINTM генерируется XSYNCERR
    * ~~~~~~~~~~~~0~~~ (XSYNCERR) Ошибка синхронизации (НЕ детектируется)
    * ~~~~~~~~~~~~~0~~ (-XEMPTY) Регистр XSR[1,2] пустой (R-only)
    * ~~~~~~~~~~~~~1~~ (-XEMPTY) Регистр XSR[1,2] не пустой (R-only)
    * ~~~~~~~~~~~~~~0~ (XRDY) Передатчик не готов (R-only)
    * ~~~~~~~~~~~~~~1~ (XRDY) Передатчик готов (к записи в DXR[1,2])
    * ~~~~~~~~~~~~~~~0 (-XRST) Передатчик последовательного порта (ВЫКЛ)
    *      rsvd RFRLEN1 RWDLEN1 rsvd
    * RCR1: 0   0000000   000   00000
    * Регистр управления 1 приемником
    * 0000000001000000 0040h
    * 0~~~~~~~~~~~~~~~	 Резерв
    * ~0000000~~~~~~~~ (RFRLEN1) Число слов в принимаемом кадре (1 слово)
    * ~~~~~~~~010~~~~~ (RWDLEN1) Число бит в принимаемом слове (16 бит)
    * ~~~~~~~~~~~00000	 Резерв
    *    RPHASE RFRLEN2 RWDLEN2 RCOMPAND RFIG RDATDLY
    * RCR2: 0   0000000   000      00     0     00
    * Регистр управления 2 приемником
    * 0000000001000000 0040h
    * 0~~~~~~~~~~~~~~~ (RPHASE) Однофазовый кадр
    * 1~~~~~~~~~~~~~~~ (RPHASE) Двухфазовый кадр
    * ~0000000~~~~~~~~ (RFRLEN2) Число слов в принимаемом кадре (2 фаза)
    * ~~~~~~~~010~~~~~ (RWDLEN2) Число бит в принимаемом слове (2 фаза)
    * ~~~~~~~~~~~00~~~ (RCOMPAND) Данные принимаются со старшего бита
    * ~~~~~~~~~~~01~~~ (RCOMPAND) Данные 8 бит принимаются с младшего бита
    * ~~~~~~~~~~~10~~~ (RCOMPAND) Принимаемые данные сжаты по ?-law закону
    * ~~~~~~~~~~~11~~~ (RCOMPAND) Принимаемые данные сжаты по A-law закону
    * ~~~~~~~~~~~~~0~~ (RFIG) Новый кадровый синхросигнал перезапускает
    * ~~~~~~~~~~~~~1~~ (RFIG) Второй кадровый синхросигнал игнорируется
    * ~~~~~~~~~~~~~~00 (RDATDLY) Задержка на 0 бит данных (1 или 2)
    *      rsvd XFRLEN1 XWDLEN1 rsvd
    * XCR1: 0   0000000   000   00000
    * Регистр управления 1 передатчиком
    * 0000000001000000 0040h
    * 0~~~~~~~~~~~~~~~	 Резерв
    * ~0000000~~~~~~~~ (XFRLEN1) Число слов в передаваемом кадре (1 слово)
    * ~~~~~~~~010~~~~~ (XWDLEN1) Число бит в передаваемом слове (16 бит)
    * ~~~~~~~~~~~00000	 Резерв
    *     XPHASE XFRLEN2 XWDLEN2 XCOMPAND XFIG XDATDLY
    * XCR2: 0    0000000   000      00     0     00
    * Регистр управления 2 передатчиком
    * 0000000001000000 0040h
    * 0~~~~~~~~~~~~~~~ (XPHASE) Однофазовый кадр
    * 1~~~~~~~~~~~~~~~ (XPHASE) Двухфазовый кадр
    * ~0000000~~~~~~~~ (XFRLEN2) Число слов в передаваемом кадре (2 фаза)
    * ~~~~~~~~010~~~~~ (XWDLEN2) Число бит в передаваемом слове (2 фаза)
    * ~~~~~~~~~~~00~~~ (XCOMPAND) Данные передаются со старшего бита
    * ~~~~~~~~~~~01~~~ (XCOMPAND) Данные 8 бит передаются с младшего бита
    * ~~~~~~~~~~~10~~~ (XCOMPAND) Передаваемые данные сжим. по ?-law закону
    * ~~~~~~~~~~~11~~~ (XCOMPAND) Передаваемые данные сжим. по A-law закону
    * ~~~~~~~~~~~~~0~~ (XFIG) Новый кадровый синхросигнал перезапускает
    * ~~~~~~~~~~~~~1~~ (XFIG) Второй кадровый синхросигнал игнорируется
    * ~~~~~~~~~~~~~~00 (XDATDLY) Задержка на 0 бит данных (1 или 2)
    *          FWID     CLKGDV
    * SRGR1: 0000 0000 XXXX XXXX
    * Регистр 1 генератора частоты дискретизации
    * 0000000000000001 0001h
    * 00000000~~~~~~~~ (FWID) Ширина кадрового импульса (1 такт FSG)
    * ~~~~~~~~00000001 (CLKGDW) Делитель частоты дискретизации
    *      GSYNC CLKSP CLKSM FSGM      FPER
    * SRGR2: 0     0     X     0  0000 0000 0000
    * Регистр 2 генератора частоты дискретизации
    * 0010000000000000 2000h
    * 0~~~~~~~~~~~~~~~ (GSYNC) Генератор частоты дискретизации не синхронный
    * ~0~~~~~~~~~~~~~~ (CLKSP) CLKG и FSG по нарастанию CLKS (если CLKSM=0)
    * ~~1~~~~~~~~~~~~~ (CLKSM) Генератор частоты дискретизации от ЦПУ
    * ~~~0~~~~~~~~~~~~ (FSGM) Синхронизация кадра после записи DXR в XSR
    * ~~~~000000000000 (FPER) Период кадрового импульса
    *     rsvd XIOEN RIOEN FSXM FSRM CLKXM CLKRM rsvd STAT FSXP FSRP CLKXP CLKRP
    * PCR: 00    0     0    0    0     0     0     0  000   0    0    0      0
    * Регистр управления выводами
    * 0000000000001100 000Ch
    * 00~~~~~~~~~~~~~~	 Резерв
    * ~~0~~~~~~~~~~~~~ (XIOEN) DX, FSX и CLKX выводы порта (а не общего назн)
    * ~~~0~~~~~~~~~~~~ (RIOEN) DR, FSR и CLKR выводы порта (а не общего назн)
    * ~~~~0~~~~~~~~~~~ (FSXM) Синхронизация кадра передатчика внешняя
    * ~~~~~0~~~~~~~~~~ (FSRM) Синхронизация кадра приемника внешняя
    * ~~~~~~0~~~~~~~~~ (CLKXM) CLKX - вход (режим ведомого)
    * ~~~~~~~0~~~~~~~~ (CLKRM) CLKR - вход внешнего сигнала
    * ~~~~~~~~0~~~~~~~	 Резерв
    * ~~~~~~~~~000~~~~ (STAT) Состояние выводов CLKS, DX, DR (R-only)
    * ~~~~~~~~~~~~1~~~ (FSXP) Активный уровень FSX - низкий (0 - высокий)
    * ~~~~~~~~~~~~~1~~ (FSRP) Активный уровень FSR - низкий (0 - высокий)
    * ~~~~~~~~~~~~~~0~ (CLKXP) Данные выдаются нарастающим фронтом CLKX (L-H)
    * ~~~~~~~~~~~~~~~0 (CLKRP) Данные принимаются спадающим фронтом CLKR(H-L)
    *
    	.include regs.h
    	.def	init_McBSP
    	.text
    ;=============================================================
    ;	При инициализации McBSP используется
    ;	субадресация регистров порта
    ;=============================================================
    init_McBSP:
    	STM	SPCR1, McBSP1_SPSA
    	STM	#5000h, McBSP1_SPSD	; Сброс приемника McBSP1
    	STM	SPCR2, McBSP1_SPSA
    	STM	#0000h, McBSP1_SPSD	; Сброс передатчика McBSP1
    	STM	RCR1, McBSP1_SPSA	; 0300h - свободный режим
    	STM	#0040h, McBSP1_SPSD	; 16 бит в слове
    	STM	RCR2, McBSP1_SPSA
    	STM	#0040h, McBSP1_SPSD	; 16 бит в слове
    	STM	XCR1, McBSP1_SPSA
    	STM	#0040h, McBSP1_SPSD	; 16 бит в слове
    	STM	XCR2, McBSP1_SPSA
    	STM	#0040h, McBSP1_SPSD	; 16 бит в слове
    	STM	SRGR1, McBSP1_SPSA
    	STM	#0001h, McBSP1_SPSD	; Делитель частоты дискретизации 1
    	STM	SRGR2, McBSP1_SPSA
    	STM	#2000h, McBSP1_SPSD	; Генератор частоты дискр. от ЦПУ
    	STM	PCR, McBSP1_SPSA
    	STM	#000Ch, McBSP1_SPSD	; Полярность FSX, FSR, CLKX и CLKR

    	STM	SPCR2, McBSP1_SPSA	; ВКЛ генератор частоты дискрет.
    	LDM	McBSP1_SPSD, A
    	OR	#0040h, A
    	STL	A, McBSP1_SPSD
    	NOP				; Ожидание 2 тактов дискретизации
    					; для стабилизации SRG (генерат.)
    *=============================================================
    *	Команды разрешения Rx и Tx исключены
    *	Rx и Tx включаются в вызывающей программе
    *=============================================================
    	RETD
    	NOP
    	NOP

    Подпрограмма инициализации AD50.
    *************************************************************************
    *  (C) Copyright Texas Instruments, Inc. 2000				*
    *		(C) Copyright U. Klius, BSUIR, Minsk, 2004		*
    *************************************************************************
    * MODULE NAME:	INITAD50.ASM     					*
    * AUTHOR:	C5000 Applications					*
    * DESCRIPTION:	Эта программа инициализирует расположенный на плате	*
    *		DSK кодек AD50 в (15+1)-бит режим ЦАП, 16-бит АЦП	*
    *		и устанавливает частоту дискретизации 8.0 КГц		*
    *	 DATE:	05/09/2004						*
    *************************************************************************
    	.asg	0, COS
    	.asg	1, AOS
    	.include regs.h
    	.def	init_AD50
    NOP_REQ .set	0000h	; Значение псевдорегистра 0
    REG1_RST .set	0180h	; Programm Reset
    REG1_VAL .set	0104h	; Контрольный усилитель = 0 дБ
    REG2_VAL .set	0210h 	; 16-бит АЦП, ост. по умолчанию
    REG3_VAL .set	0300h	; Нет задержки синхронизации кадра
    REG4_VAL .set	04F0h	; Fs=MCLK/(512*N)=8.192E6/(512*2)
    			; Усиление: Вход=0дБ, Выход=0дБ
    SEC_REQ .set	0001h
    	.text

    ;==========================================================
    ;	Инициализация регистров 1, 2 и 4 AD50
    ;	Значение по умолчанию для регистра 3
    ;==========================================================
    init_AD50:
    	PORTR	DSP_CPLD_CNTL2, 60h	; Выбрать AD50 на плате
    	NOP
    	NOP
    	ANDM	#0FF00h, 60h
    	PORTW	60h, DSP_CPLD_CNTL2
    	NOP
    	NOP
    	STM	#3FFFh,IFR		; Очистить все флаги
    	STM	#0800h,IMR		; Размаскировать BXINT1
    	STM	#SPCR2, McBSP1_SPSA	; Разрешить McBSP1 Tx
    	ORM	#0001h, McBSP1_SPSD	; Ожидание 2 такта SCLK
    	NOP
    	NOP
    	NOP
    	STM 	#NOP_REQ, McBSP1_DXR1	; McBSP1_DXR1=0
    	NOP
    REG1:	LD	#REG1_VAL, A		; ACCA=0x104
    	CALLD	WAIT			; Переслать в AD50
    	NOP
    	NOP
    REG2:	LD	#REG2_VAL, A		; ACCA=0x210
    	CALLD	WAIT			; Переслать в AD50
    	NOP
    	NOP
    REG4:	LD	#REG4_VAL, A		; ACCA=0x4F0
    	CALLD	WAIT			; Переслать в AD50
    	NOP
    	NOP
    REG0:	LD	#NOP_REQ, A		; ACCA=0x300
    	CALLD	WAIT			; Переслать в AD50
    	NOP
    	NOP
    	STM	#SPCR2, McBSP1_SPSA	; Запретить McBSP1 Tx
    	ANDM	#0FFFEh, McBSP1_SPSD	; Ожидание 2 такта SCLK
    	RETD  				; Возврат
    	NOP
    	NOP
    *
    WAIT:	STM 	#SEC_REQ, McBSP1_DXR1	; McBSP1_DXR1=1
    	NOP
    	STM	#7FFFh, IFR		; Очистить флаг BXINT1
    	NOP
    	IDLE	1			; Ожидать BXINT1
    	STLM	A, McBSP1_DXR1		; ACCA => McBSP1_DXR1
    	NOP
    	STM	#7FFFh, IFR		; Очистить флаг BXINT1
    	NOP
    	IDLE	1			; Ожидать BXINT1
    	RETD				; Возврат
    	NOP
    	NOP

Оглавление | Программа | Теория| Практика | Контроль знаний | Об авторах
© БГУИР , 2012