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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> программирование AD9954 через SPI посредством ADSP21364
Genadi Zawidowsk...
сообщение Oct 17 2009, 11:51
Сообщение #31


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



А я про стробирование перепадами в 0 говорил ещё месяц назад...
iosync не надо дёргать, один раз пред инициализацией. Если обязательно требуется - разбирайтесь.
Не путать с ioupdate.
Цитата
вот только еще ощибка к даташате почемуто появилась.
ну или у меня чтото с мозгами.
Просто когда hex слова считал для отправки в ДДС, оно в 1 месте не сошлось с тем что прочиталось после программирования компом.
А комп считывает то что я сам считал

Некоторые программисты используют вычисления с плавающей точкой для получений слов программирования - и теряют при этом битики (и тчность).
Попробуйте целочисленно.
Go to the top of the page
 
+Quote Post
WreWolf
сообщение Oct 18 2009, 12:44
Сообщение #32


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 10-11-07
Пользователь №: 32 211



Да я пока не использую вычисления. Все забито руками.
И IO_Synk нормально помогло только после смены режима SPI.

И нормально чтение гарантируеться только после повторного IO_Synk
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Oct 18 2009, 17:14
Сообщение #33


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Значит где-т битиков не досчитались.
Цитата
Asynchronous Active High Reset of the Serial Port Controller. When high, the current I/O operation is immediately terminated, enabling a new I/O operation ...

Что-то не то скормили микросхеме.
Да попробуйте же в ручную битиками пошевелить! Когда ясность с управляющими словами настанет, будете SPI дрессировать.
Go to the top of the page
 
+Quote Post
WreWolf
сообщение Oct 19 2009, 06:48
Сообщение #34


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 10-11-07
Пользователь №: 32 211



Ну с битиками то все в порядке.
На осциллографе все выглядит прекрасно, значит я думаю и для ДДС тоже.

А про сброс текущего IO я знаю, по этому и дергаю.

вот код. битиков лишних нет
CODE
#include <def21364.h>
.section/dm seg_dmda;

.var CFR1_d[]= 0x00,0x00,0x00,0x22,0x00;
.var CFR2_d[]= 0x01,0x18,0x00,0x44;
.var FTW0_d[]= 0x04,0x0F,0xAA,0xAA,0xAB;
.var irx= 0x84;
.var rx_buf1[5];
.var rx_buf2[4];
.var rx_buf3[3];
.var rx_buf4[2];
.var rx_buf5[5];
.var rx_buf6[3];
.var rx_buf7[5];

.global _main;
.segment/pm seg_pmco;
_main:

call init; //Начальная инициализация
up_up:




//Передача данных
call SPI_init;
ustat3=CFR1_d; ustat4=@CFR1_d; //Установка входныхх данных и их длинны
call SPI_init_TX;


call SPI_init;
ustat3=CFR2_d; ustat4=@CFR2_d; //Установка входныхх данных и их длинны
call SPI_init_TX;


call SPI_init;
ustat3=FTW0_d; ustat4=@FTW0_d; //Установка входныхх данных и их длинны
call SPI_init_TX;



// прием данных из DDS
call SPI_init;
ustat3=rx_buf1; ustat4=@rx_buf1; ustat2=0x80;
call read_reg;

call SPI_init;
ustat3=rx_buf2; ustat4=@rx_buf2; ustat2=0x81;
call read_reg;

call SPI_init;
ustat3=rx_buf3; ustat4=@rx_buf3; ustat2=0x82;
call read_reg;

call SPI_init;
ustat3=rx_buf4; ustat4=@rx_buf4; ustat2=0x83;
call read_reg;

_main.end: jump (pc,0);


//Инициализация SPI перед новой транзакцией
SPI_init:
call SPI_reset;
call SPI_init_FLG_reset_error;
rts;

//Инициализация флагов и пр.
init:
bit set flags FLG1O;
bit clr flags FLG1;
call SPI_reset;
call SPI_init_FLG_reset_error;
rts;

//Сброс параметров SPI
SPI_reset:
r0=0; dm(SPICTL)=r0;
dm(SPIFLG)=r0;
dm(SPIDMAC)=r0;
r0=500; dm(SPIBAUD)=r0;
r0=DS0EN; dm(SPIFLG)=r0;
rts;

//Начальная инициализация регистра SPIFLG и сброс ошибок
SPI_init_FLG_reset_error:
ustat3=0x01; dm(SPISTAT)=ustat3;
ustat3= DS0EN| /*enable SPI slave device select zero */
SPIFLG3|SPIFLG2|SPIFLG0;/* Set SPIFLG1 low to */
dm(SPIFLG) = ustat3; /*select SPI slave on FLAG0 pin */
rts;

//Махание флагом I/O Update
FLAG_IO:
lcntr=12000, do (pc,FLAG_IO1) until LCE;
nop;nop;nop;nop;nop;nop;nop;nop;nop;FLAG_IO1:nop;
bit set flags FLG1;
lcntr=240, do (pc,FLAG_IO2) until LCE;
nop;nop;nop;nop;nop;nop;nop;nop;nop;FLAG_IO2:nop;
bit clr flags FLG1;
lcntr=12000, do (pc,FLAG_IO3) until LCE;
nop;nop;nop;nop;nop;nop;nop;nop;nop;FLAG_IO3:nop;
rts;

//Ожидание окончания передачи/приема
waitSPI:
lcntr=5, do (pc,waitSPI_c) until LCE;
call wait_for_SPIF;
waitSPI_c:call wait_for_SPIF;
rts;

//Инициализация процесса передачи
SPI_init_TX:
dm(IISPI)=ustat3;
dm(CSPI)=ustat4;
ustat3=1; dm(IMSPI)=ustat3;
ustat3 = DMISO|
WL8|
SPIMS|
SPIEN|
TIMOD2|
CPHASE|
CLKPL|
MSBF;
dm(SPICTL)=ustat3;
ustat3=SPIDEN;
dm(SPIDMAC)=ustat3;
call waitSPI;
call FLAG_IO;
rts;


//WAIT FOR SPI Transfert 1 Byte
wait_for_SPIF:
ustat1=dm(SPISTAT);
bit tst ustat1 SPIF;
if not tf jump (pc,wait_for_SPIF);
wait_for_SPIF.end:
rts;


//----------------------------------------
//READ Register
read_reg:

r0=DS0EN|SPIFLG3|SPIFLG2|SPIFLG0;
dm(SPIFLG)=r0;

r0=5000;
dm(SPIBAUD)=r0;

r0=SPIEN|SPIMS|SENDZ|CPHASE|CLKPL|TIMOD2|WL8|MSBF;
dm(SPICTL)=r0;

dm(CSPI)=ustat4;
dm(IISPI)=ustat3;
r0=1;
dm(IMSPI)=r0;

dm(TXSPI)=ustat2;


r0=INTEN|SPIDEN|SPIRCV;
dm(SPIDMAC)=r0;

//Wait for SPI DMA to complete using polling------

wspi:ustat1=dm(SPIDMAC);
bit tst ustat1 SPIDMAS; // Check SPI DMA Status bit
IF TF jump (pc,wspi); // SPIDMAS = 1 when DMA in progress

//Disable DMA
r15=0;
dm(SPIDMAC)=r15;

//Disable SPI
dm(SPICTL)=r15;
dm(SPIFLG)=r15;
dm(SPIBAUD)=r15;

read_reg.end: rts;
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Oct 19 2009, 19:21
Сообщение #35


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Цитата
Ну с битиками то все в порядке.
На осциллографе все выглядит прекрасно, значит я думаю и для ДДС тоже.

А про сброс текущего IO я знаю, по этому и дергаю.


Вот у меня с битиками всё в полном порядке - я IORESET дёргаю один раз - перед инициализацией DDS. Вся последующая работа идёт без этого. А у Вас, раз требутся выводить SPI интерфейс у микросхемы из "заклинившего состояяния - не в порядке.

SPI порт у Вашего процессора использует выводы совместно с GPIO ли они выделенные? Если совместно - ну на час максимум возни по написанию (или адаптации любого чужого, например моего) SPI драйверв к Вашему процессору. И проверьте всё.

Да, вопрос из любопытства - почему не используете язык "С" для написания некритичных по быстродействию кусков программы?

Сообщение отредактировал Genadi Zawidowski - Oct 19 2009, 19:26
Go to the top of the page
 
+Quote Post
WreWolf
сообщение Oct 20 2009, 12:37
Сообщение #36


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 10-11-07
Пользователь №: 32 211



не с битиками проблем нет.
все уже работает без лишних сбросов.

просто была небольшая ошибка в коде(длинна не соответствовала отправляемым данным).

Теперь следующая часть марлезонского балета
Line Sweep режим

пишем в CFR1 разрешение Line Sweep
потом
FTW0 FTW1 NLSCW PLSCW
и в зависимости от ножки PS0 DDS определят направление sweep

Сообщение отредактировал WreWolf - Oct 20 2009, 12:42
Go to the top of the page
 
+Quote Post
truebest
сообщение Sep 26 2010, 08:28
Сообщение #37


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 12-05-10
Пользователь №: 57 214



Добрый день всем...Старая тема но уж также такаяже у меня задача. Неполучается инициализировать AD9954..

После прочитки этого форума понял что надо донышко микры припоять, а также более менее как дергать RESET CS i/o sync и i/o update

Мне хотелось чтобы ниже описали правильный алгоритм инициализации, а то размазали по форуму rolleyes.gif )
У меня CLKMODESELECT приварен к GND), генератор внешний на 20мгц. Управление реализовываю по 3 проводному SPI.

Заранее спасибо.

Сообщение отредактировал truebest - Sep 26 2010, 08:31
Go to the top of the page
 
+Quote Post

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

 


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


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