реклама на сайте
подробности

 
 
> ADSP-2191 и FT2232 (SPI протокол), вопрос новичка
skopus
сообщение Jan 15 2007, 10:38
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 65
Регистрация: 31-08-05
Из: Moscow
Пользователь №: 8 124



Господа, а существует ли какая-нибудь библиотека, подключаемая в VisualDSP++ 3.5 для обмена данными по SPI на языке Си. Или необходимо вручную на ассемблере организовывать обмен сообщениями?


пока хочется написать простой тест типа : принять команду по USB (FT2232), затем получить ее по SPI дспшником и отправить сообщение обратно.

Был бы очень признателен, если бы вы показали мне пример на Си, или подсказали место, где его взять.

PS : с сайта analog.com Скачал апнот "Interfacing the ADSP-2191 to an AD7476 via SPI port", однако понимается с трудом sad.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
mihask
сообщение Jan 16 2007, 12:05
Сообщение #2


Частый гость
**

Группа: Validating
Сообщений: 80
Регистрация: 7-12-05
Пользователь №: 11 905



Вот - но правда на асме. smile.gif
______________________

При переходе на СИ для переключения страниц и записи/чтения
регистров используются вот эти функции (описание в мануале на компилятор)

sysreg_write ();
io_space_write();
io_space_read();
______________________

// ax0,ar,af и.т.д внутренние регистры adsp
______________________


/************************************************************************/
out_data_spi_8:
IOPG = SPI0_Controller_Page; // sysreg_write ()
AR = IO(RDBR0); /* Чтение SPI0 буфера приема */ // io_space_read()
AR = b#0000000001010110;
IO(SPIST0) = AR; /* ОЧИСТКА ОШИБОК */ // io_space_write()

AR = b#1111111100000000;
IO(SPIFLG0) = AR; /* запись во Flag Register */

ar = b#0101000000001001; /*длина слова 8 бит*/
IO(SPICTL0) = AR;

IO(TDBR0) = ax0;
ax0=0;
out_data_spi_8_1:
mx0=IOPG;
ar=IO(SPIST0);
ax1=ar;
ay0=0x9;
ar=ar and ay0; //поразрядное AND
ay0=1;
af=ar-ay0;
af=pass af; // pass команда для определения знака регистра
if eq jump out_data_spi_8_2; // если af == 0 то переход на метку
ar=ax0-1;
ax0=ar;
ar=pass ar;
if ne jump out_data_spi_8_1; // если ar != 0 то переход на метку
nop;
jump out_data_spi_8_3; // безусловный переход
out_data_spi_8_2:
nop;
out_data_spi_8_3:
rts;




/************************************************************************/
in_data_spi_8:
IOPG = SPI0_Controller_Page;
AR = b#0000000001010110;
IO(SPIST0) = AR; /* ОЧИСТКА ОШИБОК */

ar = b#0101000000001000; /*длина слова 8 бит прием*/
IO(SPICTL0) = AR;
AR = IO(RDBR0); /* Чтение SPI0 буфера приема */
in_data_spi_8_1:
ar=IO(SPIST0);
ax0=ar;
ay0=0x30;
ar=ar and ay0;
af=pass ar;
if eq jump in_data_spi_8_1;
AR = IO(RDBR0); /* Чтение SPI0 буфера приема */
rts;







/************************************************************************/
end_spi:
IOPG = SPI0_Controller_Page;
ax0 = b#0001000100001001;
IO(SPICTL0) = ax0;
AR = IO(RDBR0); /* Чтение SPI0 буфера приема */
IOPG = General_Purpose_IO;
AX0 = 0x0004; /* Turn ON FLAGS 0, 1, 2, and 3,4,5,6,7 */
IO(FLAGS) = AX0;

rts;
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 14:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.02277 секунд с 7
ELECTRONIX ©2004-2016