Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пояснительная_записка.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
5.24 Mб
Скачать
        1. Конфигурирование интерфейса dma

Конфигурирование интерфейса DMA происходит в функции DMA0_Init()по следующему алгоритму:

  1. Запись значения 0x00 в регистр DMA0CN – отключаем DMA

  2. Запись 16-битной переменной XRAM_START_ADD в 16-битный регистр DMA0DA – установка начального адреса данных

  3. Запись значения переменной NumSamp (количество выборок) в регистр счетчика повторений DMA0CT

  4. Запись значения 0x00 (начальный адрес команд) в регистр адреса команд DMA0IPT;

  5. В зависимости от переменной ADC_Mode (режим работы АЦП) в регистр данных команд DMA0IDT записываем либо значение 0x10 (b00010000) (получение данных с ADC0 в однофазном режиме), либо значение 0x40 (b01000000) (получение данных с ADC0 в дифференциальном режиме)

  6. Запись значения 0x00 в регистр данных команд DMA0IDT – команда «Конец операции»;

  7. Запись значения 0x00 в регистр границы команд DMA0BND (адрес, с которого начинается выполнение команд);

  8. Запись значения 0xA0 (b10100000) в регистр DMA0CN – включение DMA в 1-ом режиме.

Описанный алгоритм иллюстрирует следующий код:

DMA0CN = 0x00; // Disable DMA interface

DMA0DA = XRAM_START_ADD; // Starting Point for XRAM addressing

DMA0CT = NUM_SAMPLES; // Get NUM_SAMPLES samples

DMA0IPT = 0x00; // Start writing at location 0

// Push instructions onto stack in order they will be executed

if (ADC_Mode == 's')

DMA0IDT = DMA0_GET_ADC0; // Retrieve data from ADC0

else DMA0IDT = DMA0_GET_DIFF;//Retrieve differential data from ADC0-ADC1

DMA0IDT = DMA0_END_OF_OP; // End of operations

DMA0BND = 0x00; // Begin instruction executions at address 0

DMA0CN = 0x20; // switch DMA0 to mode 1

        1. Инициализация последовательного интерфейса uart

Инициализация последовательного порта UART происходит в функции UART0_Init().

Инициализация последовательного порта UART проходит по следующему алгоритму:

  1. Запись значения 0x50 (b01010000) в регистр управления UART0 SCON, значения 0x10 (b00010000) в регистр состояния и выбора источника тактирования UART0 SSTA0 (установка УАППа в 1-ый режим работы – стандартный асинхронный полный дуплексный обмен данными с использованием 10 бит для передачи 1 байта данных, данные передаются через внешний вывод TX0 и принимаются через RX0, скорость обмена данными обеспечивается с помощью таймера T1)

  2. Инициализация таймера T1 с помощью регистров TMOD (0x20 – режим 2, т.е. 8-разрядный автоперезагружаемый таймер-счетчик), CKCON (0x10 – таймер T1 тактируется системным тактовым сигналом) и задание значений переполнения таймера (TH1 = -(SYSCLK / BAUDRATE)/16) и начального значения таймера (TL1 = -(SYSCLK / BAUDRATE)/16).

Описанный алгоритм иллюстрирует следующий код:

SCON0 = 0x50 // Mode 1: 8-Bit UART, Variable Baud Rate, UART0 reception enabled.

SSTA0 |= 0x10; // UART0 baud rate divide-by-two disabled.Timer 1 generates UART0 TX Baud Rate

// T1 initialization

SFRPAGE = TIMER01_PAGE;

TMOD = 0x20; // Mode 2: 8-bit counter/timer with autoreload

TH1 = -(SYSCLK / BAUDRATE)/16; // 250; // Reload value

TL1 = -(SYSCLK / BAUDRATE)/16; // 250; // Start value for T1

TR1 = 1; // Start T1

CKCON |= 0x10; // Timer 1 uses the system clock.