[an error occurred while processing this directive]
Ответ: (+)
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено NC 18 января 2006 г. 16:58
В ответ на: ADSP2191: кто-нибудь может бросить пример кода для работы UART прием/передача в режиме DMA? отправлено <font color=gray>&Некто</font> 18 января 2006 г. 15:57

Init_UART_DMA:

ax1 = IMASK;
IMASK = 0;

IOPG = UART_Controller_Page;
//================ Инициализация UART ================================================

ar = 0x80; io(LCR) = ar; // переключаем в режим записи делителя скорости
ar = 0xF0; io(DLL) = ar; // младшая часть делителя 19200
ar = 0x00; io(DLH) = ar; // старшая часть делителя
ar = 0x07; io(LCR) = ar; // переключаем в режим записи конфигурации
// 8 бит данных 2 стопа
//================ Инициализация DMA TX ===============================================

ar = 0x8005; dm(HEAD_TX) = ar; // Конфигурация DMA порта
ar = 0x0000; dm(HEAD_TX + 1) = ar; // Стартовая страница
ar = UART_Tx_buf; dm(HEAD_TX + 2) = ar; // Стартовый адрес буфера
ar = length(UART_Tx_buf); dm(HEAD_TX + 3) = ar; // Счетчик слов
ar = 0x0000; dm(HEAD_TX + 4) = ar; // Останов в конце передачи

/* ar = HEAD_TX; io(UARDT_CP) = ar;
ar = 0x0001; io(UARDT_CPR) = ar;
ar = 0x8001; io(UARDT_CFG) = ar;
*/
ar = IMASK;
ar = setbit 12 of ax1;
ax1 = ar; // разрешить прерывание передачи

//================ Инициализация DMA RX ===============================================

ar = 0x8007; dm(HEAD_RX) = ar; // Конфигурация DMA порта
ar = 0x0000; dm(HEAD_RX + 1) = ar; // Стартовая страница
ar = UART_Rx_buf; dm(HEAD_RX + 2) = ar; // Стартовый адрес буфера
ar = length(UART_Rx_buf); dm(HEAD_RX + 3) = ar; // Счетчик слов
ar = 0x0000; dm(HEAD_RX + 4) = ar; // Останов в конце передачи

ar = HEAD_RX; io(UARDR_CP) = ar;
ar = 0x0001; io(UARDR_CPR) = ar;
ar = 0x8007; io(UARDR_CFG) = ar;

ar = IMASK;
ar = setbit 11 of ax1;
IMASK = ar; // разрешить прерывание передачи
/*
ar = 0x0010; io(UARDR_CFG) = ar; // DMA - автобуферизация
ar = 0x0000; io(UARDR_SRP) = ar; // внутреннее ОЗУ
ar = UART_Rx_buf; io(UARDR_SRA) = ar; // указатель начала буфера

ar = length(UART_Rx_buf);

io(UARDR_CNT) = ax0; // счетчик передаваемых слов
ar = 0x0017; io(UARDR_CFG) = ar; // прерывание по окончанию обмена старт
ar = IMASK;
ar = setbit 11 of ar;
IMASK = ar; // разрешить прерывание приема
*/

rts;

Send_Reg: // подпрограма передачи значения 16 разрядного регистра по RS
// значение в SI;

dm(Tx_buf) = si;
State_1:
ax0 = dm(UART_Tx_bisy);
ar = pass ax0;
if ne jump State_1;

si = dm(Tx_buf);


i0 = UART_Tx_buf;
l0 = 0;
m0 = 1;
ar = 0x0D; // Hex код "Возврат каретки"
dm(i0,m0) = ar;
ar = 0x42; // Hex код "B"
dm(i0,m0) = ar;
ar = 0x23; // Hex код "#"
dm(i0,m0) = ar;
ay0 = 0x0030;
cntr = 16;

do convert_bin until ce;
sr = lshift si by 1 (lo);
si = sr0;
ar = sr1 + ay0;
convert_bin: dm(i0,m0) = ar;

IOPG = UART_Controller_Page;

ar = 19; dm(HEAD_TX + 3) = ar; // Счетчик слов

ar = 0x8005; dm(HEAD_TX) = ar; // Конфигурация DMA порта
ar = HEAD_TX; io(UARDT_CP) = ar;
ar = 0x0001; io(UARDT_CPR) = ar;
ar = 0x8005; io(UARDT_CFG) = ar;

ar = 0x0001;
dm(UART_Tx_bisy) = ar;

rts;

Send_RegX:

dm(Tx_buf) = si;
State_2:
ax0 = dm(UART_Tx_bisy);
ar = pass ax0;
if ne jump State_2;

si = dm(Tx_buf);

i0 = UART_Tx_buf;
l0 = 0;
m0 = 1;
ar = 0x0D; // Hex код "Возврат каретки"
dm(i0,m0) = ar;
ar = 0x30; // Hex код "0"
dm(i0,m0) = ar;
ar = 0x78; // Hex код "x"
dm(i0,m0) = ar;

ay0 = 9;
ax0 = 0x0030;
ax1 = 0x0037;
cntr = 4;

do convert_hex until ce;
sr = lshift si by 4 (lo);
si = sr0;
ar = sr1 - ay0;
if gt ar = pass ax1;
if le ar = pass ax0;
ar = ar + sr1;
convert_hex: dm(i0,m0) = ar;


IOPG = UART_Controller_Page;

ar = 7; dm(HEAD_TX + 3) = ar; // Счетчик слов

ar = 0x8005; dm(HEAD_TX) = ar; // Конфигурация DMA порта
ar = HEAD_TX; io(UARDT_CP) = ar;
ar = 0x0001; io(UARDT_CPR) = ar;
ar = 0x8005; io(UARDT_CFG) = ar;

ar = 0x0001;
dm(UART_Tx_bisy) = ar;

rts;

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru