/*************************************************************************************************************
  Copyright (C) 2016-2022 JSC "ICC Milandr" 

*************************************************************************************************************/

/*
 *
 *  Файл:      readme.txt
 *  Описание:  Описание примера DMA_2D_TCB_Chain
 *
 *  История:
 *             29.09.22  - cоздан
 *
 */


/* Описание примера ----------------------------------------------------------------------------------------*/

В данном примере приведено, как реализовать цепочку DMA с использованием двухмерного режима.

Массивы данных объявляются в виде матрицы ROWSxCOLUMNS (10x32), при этом DMA настраивается для заполнения 
блока данных, содержащих 16 первых элементов в 5 первых строках (матрица USED_ROWSxUSED_COLUMNS (5x16)).

Для работы настраивается 0 канал DMA, который имеет два регистра TCB: для передатчика и для приемника.
Для приёмника инициализируется конфигурация tcbRx: 2D режим, передача данных во внутреннюю память, 
размер данных - квадрослово.
Для передатчика инициализируются конфигурации tcbTx1, tcbTx2 и tcbTx2: 2D режим, передача данных из 
внутренней памяти, размер данных - квадрослово.

В конфигурации tcbRx, tcbTx1, tcbTx2 и tcbTx2 добавляется параметры для создания циклических цепочек TCB:
- для приёмника: tcbRx -> tcbRx;
- для передатчика: tcbTx1 -> tcbTx2 -> tcbTx3 -> tcbTx1.

Далее регистры TCB приёмника и передатчика канала 0 DMA инициализируются первыми элементами - в TCB приёмника 
записывается tcbRx, а в TCB передатчика записывается tcbTx1. Если инициализация канала 0 DMA выполнена успешно,
то в отладочную консоль будет выведно сообщение "Result: Success - DMA channel 0 active", иначе в отладочную
консоль будет выведено сообщение "Result: Error - DMA channel 0 is not active".

Если инициализация прошла успешно, то канал 0 DMA начинает выполнять пересылку данных. После завершения 
передачи данных по каналу 0 с конфигурацией tcbTx1/tcbRx начнётся передача данных по каналу 0 с конфигурацией
tcbTx2/tcbRx. Последующие передачи данных выполняются в соответствии с заданными цепочками TCB.

Для проверки работы примера необходимо открыть окно "Windows -> Show View -> Memory Browser", в поле адреса 
ввести "rxData", далее кликнуть ПКМ на область памяти и выбрать "Columns -> 32". Таким образом каждая строка
в "Memory Browser" будет соответствовать одной строке массива rxData. При обновлении окна "Memory Browser" 
(кнопка Refresh) видно, что DMA заполняет только заданную часть массива - 5x16.

Обратите внимание, что переменные для хранения конфигурации tcb должны быть выровнены на границу квадраслова!
Так как DMA передаёт данные квадрословами, то буферы данных для приёмника и передатчика также должны быть 
выровнены на границу квадраслова, при этом количество передаваемых данных должно быть кратно 4!


/* Содержание каталога -------------------------------------------------------------------------------------*/

    - main.c               Основная программа
    - project.ldf          Файл сценария для компоновщика
    - session.lldbinit     Файл инициализации периферии до запуска отладки
    - .cproject, .project  Файлы конфигурации проекта


/* Аппаратная и программная среда --------------------------------------------------------------------------*/

    - Интегрированная среда разработки CM-LYNX.
    - Отладочная плата для процессора 1967ВН044 или программный симулятор процессора 1967ВН044.


/* Использование -------------------------------------------------------------------------------------------*/

Для запуска примера необходимо выполнить следующие действия:
    - Создать новое или открыть существующее рабочее пространство (Workspace).
    - Выполнить импорт проекта "DMA_2D_TCB_Chain" в соответствии с "ML_GUI_Руководство_пользователя_R_Vx", 
      п. "Импорт существующего проекта".
    - Выполнить сборку проекта.
    - Создать конфигурацию отладки в соответствии с "ML_GUI_Руководство_пользователя_R_Vx", п. "Настройка 
      конфигурации и запуск отладки".
    - Запустить пример в режиме отладки.
    
Подробное описание библиотеки HAL с примерами использования функций приведено в каталоге по пути:
"CM-LYNX.x.yy.zz\toolchain\1967VN044\HAL\doc".
