Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KOMAROV.DOC
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.32 Mб
Скачать

1.12.5. Автобуферизация

В обычных условиях SPORT формирует запрос на прерывание, когда он получил или начал выдавать слово данных. Автобуферизация обеспечивает механизм приема/передачи целого блока последовательных данных прежде чем сформируется запрос на прерывание. Это уменьшает частоту прерываний, что ведет к увеличению производительности системы.

Автобуферизация использует способность DAG1, DAG2 поддерживать адресацию кольцевых буферов. При передаче слово данных из кольцевого буфера (по указателю, содержащегося в одном из индексных регистров Ix) пересылается в регистр ТХ0 или ТХ1, из которых передается в канал связи. После выполнения пересылки индексный регистр Ix модифицируется с помощью соответствующего регистра модификации Мх, как и при обычных пересылках. Каждая передача слова данных в канал связи не формирует запроса на прерывание. Такой запрос формируется только после записи в ТХ0 или ТХ1 последнего слова данных кольцевого буфера, когда в индексном регистре формируется адрес первого слова кольцевого буфера.

При приеме данных из канала связи принятое слово записывается в кольцевой буфер по указателю, содержащегося в одном из индексных регистров Ix. После выполнения пересылки индексный регистр Ix модифицируется с помощью соответствующего регистра модификации Мх, как и при обычных пересылках. Запрос на прерывание формируется после приема в кольцевой буфер последнего слова данных, когда в индексном регистре формируется адрес первого слова кольцевого буфера.

Режим автобуферизации может быть независимо разрешен для приема и передачи с помощью регистров управления автобуферизацией (см. пп. П1.3, П1.5).

Номера xIREG в регистрах управления автобуферизацией могут быть в диапазоне 0-3 для DAG1 и в диапазоне 4-7 для DAG2. Номера xMREG (там же) могут быть любыми в диапазоне 0-3. Предполагается, что они принадлежат тому DAGx, в котором определен соответствующий xIREG.

После сброса процессора (а также после очередной загрузки программы) биты TBUF, RBUF обнуляются, что соответствует запрещению автобуферизации.

1.12.6. Пример программирования автобуферизации

Программа конфигурирует SPORT1 на выполнение операций с автобуферизацией. Предполагается, что Fclkin = 12.288 МГц. SPORT1 будет автоматически передавать данные из кольцевого буфера с именем tx_buf­fer. Он также будет принимать данные из канала связи и автоматически записывать их в кольцевой буфер с именем rx_buffer.

Запрос на прерывание по передаче будет сформирован после передачи всех данных буфера tx_buffer в регистр ТХ1, но перед перезаписью последнего данного в сдвиговый регистр передачи. Запрос на прерывание по приему будет сформирован после заполнения буфера rx_buffer.

.MODULE/RAM code_to_init_Auto_Buff_SPORT1;

{Объявление переменных и точки входа в программу}

.VAR /DM/CIRC tx_buffer[10];

.VAR /DM/CIRC rx_buffer[10];

.ENTRY sport1_inits;

{Инициализация I, M и L регистров}

sport1_inits: I0 = ^tx_buffer; {I0 содержит начальный адрес tx_buffer}

M0 = 1; {используем каждый адрес буферов}

L0 = %tx_buffer; {L0 содержит длину буфера tx_buffer}

I1 = ^rx_buffer; {I1 содержит начальный адрес rx_buffer}

L1 = %rx_buffer; {L1 содержит длину буфера rx_buffer}

{Инициализация SPORT1 на автобуферизацию}

AX0 = 0x0013; {ТХ использ. I0, M0; RX использ. I1, M0}

DM(0x3FEF) = AX0; {автобуферизация разрешена}

{Инициализация SPORT1 на Frfs = 8 КГц, Fsclk = 2.048 МГц}

AX0 = 255; {RFSDIV = 255 для Frfs = 8 КГц}

DM(0x3FF0) = AX0;

AX0 = 2; {SCLKDIV = 2 для Fsclk = 2.048 МГц}

DM(0x3FF5) = AX0;

{Разрешение в SPORT1 нормального фрейминга и внутреннего SCLK}

AX0 = 0x6B27; {нормальный фрейминг, 8-бит -закон}

DM(0x3FF2) = AX0; {внутренняя байтовая синхронизация }

{Инициализация прерываний}

IFC = 6; {очистка всех внешних SPORT запросов}

ICNTL = 0; {запрет вложенных прерываний}

IMASK = 6; {разрешение прерываний от SPORT1}

{Передача первого слова данных в ТХ1}

AX0 = DM(0xI0, M0);

TX1 = AX0;

RTS;

.ENDMOD;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]