[an error occurred while processing this directive]
Вроде нашёл, но возникла проблема в симуляторе...
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

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

Отправлено MIR 15 октября 2002 г. 17:25
В ответ на: ADSP-2191 SPI в режиме автобуферизации?.. отправлено MIR 15 октября 2002 г. 10:35

Документация на 2191 действительно как ребус...
Вроде нашёл, что буферизация - это упрощённые дескрипторы...
Сделал с двумя дескрипторами и двумя буферами (один буфер - код запроса к DataFlash, адрес страницы и адрес странице + 4 байта резерва... После чего DMA переключается на приём во второй буфер, описанный другим дескриптором...)
Проблема в том что в симуляторе это всё работает не так как ожидается...
Во первых передаются не 8 а только 4 байта из буфера передачи...
В буфер приёма попадают данные неизвестно с чего и как...
Пожалуйста, помогите???
Мои настройки:

* * *
// Настроить работу SPI0
iopg = SPI0_Controller_Page;

// Настроить регистр конфигурации SPI0
ar = b#0101000000100110;
io(SPICTL0) = ar;

// SCK0 на 80/4 = 20 МГц
ar = 2;
io(SPIBAUD0) = ar;

// Задействовать выходы выборок устройств, подключенных к SPI
ar = SPI0SEL1;
io(SPIFLG0) = ar;
* * *

// Буфер передачи кода команды и адреса для чтения DataFlash
.var CMD_Read[8] =
0xE8,0x01,0x02,0x03,0x04,0x05,0x06,0x07;

// Дескриптор, описывающий послание кода команды для чтения DataFlash
.var CMD_Read_Descriptor[5] =
b#1000000000000001, // Config word
0, // Start page
CMD_Read, // Start address
Length(CMD_Read), // DMA count
Buffer_Read_Descriptor; // Next pointer

// Буфер чтения данных из DataFlash
.var Buffer_Read[200];

// Дескриптор, описывающий чтение данных из DataFlash
.var Buffer_Read_Descriptor[5] =
b#1000000000000111, // Config word
0, // Start page
Buffer_Read, // Start address
Length(Buffer_Read), // DMA count
END_DMA; // Next pointer

* * *
Запуск всего этого:
iopg = SPI0_Controller_Page;

// Указатель на 1 дескриптор, описывающий запись кода
// команды для операции чтения из DataFlash
ar = CMD_Read_Descriptor;
io(SPI0D_CP) = ar; // SPI 0 DMA Next Descriptor Pointer

// Конфигурационный регистр в начале операции записи/чтения
ar = b#0000000000000001;
io(SPI0D_CFG) = ar; // SPI 0 DMA Configuration register

// Сбросить прерывание обмена SPI по DMA
// ar = 0x0001;
// io(SPI0D_IRQ) = ar; // SPI 0 DMA Interrupt register

// Определить готовность цепи дескрипторов передачи SPI через DMA
// ar = 0x0001;
// io(SPI0D_CPR) = ar; // SPI 0 DMA Descriptor Ready

// Размер блока передачи данных по SPI
// ar = Length(CMD_Read);
// io(SPI0D_CNT) = ar; // SPI 0 DMA Count register



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

Ответы


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

Имя (обязательно): 
Пароль: 
E-mail: 

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

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

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


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru