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

 
 
 
Reply to this topicStart new topic
> AD73311 и SAM7, не хотят дружить
beer_warrior
сообщение Jul 17 2006, 10:19
Сообщение #1


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Прицепил кодек на SSC, написал софт, запускаю - не пашет.
Проверяю осциллом - нет сигнала на TD/TF. Переключаю на внутренний клок - все ОК.
Пробую брать клок и с TK, и с RK - ноль.Сигнал SCLK вида препаскуднейшего - больше похож на пилу,
охотно верю, что SAM отказыватся его принимать.
Кто имеет опыт - подскажите, где копать(слабо верится, что такой SCLK штатный).
MCLK береться с генератора на 74HC00 16.384MHz, питание всей схемы 3.3В.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
KRS
сообщение Jul 18 2006, 07:03
Сообщение #2


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



У меня пила на выходах была, когда ограничение по току срабатывало, правда это было на LPC и на выходах I2C
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jul 18 2006, 08:19
Сообщение #3


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Спасибо, поборол - обвешал все конденсаторами, и клок не то что бы исправился, но приобрел более приемлемую форму.
Теперь еще один вопрос - какой режим обмена более приемлемый? Когда все синхронизируеться по SDOFS или FSы работают раэдельно?
В первом случае не совсем понятно, как инициализировать.
Я так понял - сначала сбросить в буфер последовательность команд, дернуть reset - придет SDOFS и PDC их отправит. А как потом сбрасывать данные, если они еще не готовы?
Во втором, вроде все тип-топ можно отправить инит-последовательность побайтно, без всякого PDC и включать/выключать передачу по желанию. Но при этом усложняется разруливание данных уже в самом SAMе.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 18 2006, 12:06
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(beer_warrior @ Jul 18 2006, 12:19) *
Теперь еще один вопрос - какой режим обмена более приемлемый? Когда все синхронизируеться по SDOFS или FSы работают раэдельно?

По-моему, первый вариант предпочтительнее.

Цитата(beer_warrior @ Jul 18 2006, 12:19) *
В первом случае не совсем понятно, как инициализировать.
Я так понял - сначала сбросить в буфер последовательность команд, дернуть reset - придет SDOFS и PDC их отправит. А как потом сбрасывать данные, если они еще не готовы?

Я бы сделал отдельный автомат на передачу, единственная задача которого - переключать буферы и перегружать регистры PDC, а о наличии в буферах правильных данных пусть заботится остальной софт.
Go to the top of the page
 
+Quote Post
elantra
сообщение Jul 18 2006, 13:35
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 47
Регистрация: 28-07-05
Пользователь №: 7 162



А разьве там клок не нужен непрерывный? Там же сигма-дельта ацп. Если так - то нужно устраивать рплкладку между синхронным каналом ацп и синхронным каналом контроллера.
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jul 18 2006, 17:07
Сообщение #6


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Цитата
А разьве там клок не нужен непрерывный? Там же сигма-дельта ацп. Если так - то нужно устраивать рплкладку между синхронным каналом ацп и синхронным каналом контроллера.

Мастер клок идет с генератора и тактирует АЦП и ЦАП. Он же деленный на 8 дает задает клок для обмена.Контроллер по этому клоку обязан скармливать кодеку данные.

Тут кстати еще веселуха начинается. Не срабатывает прерывание PDC ENDTX. Какого черта?

Код
void InitSSC(DWORD imode, DWORD baudrate)
{
//--------------------------------------------------------------------------
//disable all
AT91C_BASE_PDC_SSC->PDC_PTCR = AT91C_PDC_RXTDIS;
AT91C_BASE_PDC_SSC->PDC_PTCR = AT91C_PDC_TXTDIS;
AT91C_BASE_SSC->SSC_CR = AT91C_SSC_SWRST|AT91C_SSC_RXDIS|AT91C_SSC_TXDIS;
AT91C_BASE_SSC->SSC_IDR = (DWORD)(-1);
//--------------------------------------------------------------------------
//enable hardware
//--------------------------------------------------------------------------
AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC,(1 << AT91C_ID_SSC));
//--------------------------------------------------------------------------
//configure interrupt
//--------------------------------------------------------------------------
AT91F_AIC_ConfigureIt    (AT91C_BASE_AIC,             //base adr
                 AT91C_ID_SSC,                //int number
                AT91C_AIC_PRIOR_HIGHEST - 2,      //priority
                3,                        //int source type
                SSCInterrupt                //handler
                );            
AT91C_BASE_SSC->SSC_IER = imode;                        
//--------------------------------------------------------------------------                        
AT91F_SSC_SetBaudrate(AT91C_BASE_SSC,48054857, baudrate);

.......

AT91C_BASE_SSC->SSC_RPR = (DWORD)SSCCB.prx_buf;
AT91C_BASE_SSC->SSC_RCR = SSCCB.rx_len;

AT91C_BASE_SSC->SSC_TPR = (DWORD)SSCCB.ptx_buf;
AT91C_BASE_SSC->SSC_TCR = SSCCB.tx_len;

// enable the RX and TX PDC transfer requests
AT91C_BASE_PDC_SSC->PDC_PTCR = AT91C_PDC_RXTEN;
AT91C_BASE_PDC_SSC->PDC_PTCR = AT91C_PDC_TXTEN;
//--------------------------------------------------------------------------
//enable device
//--------------------------------------------------------------------------
AT91C_BASE_SSC->SSC_CR = AT91C_SSC_RXEN | AT91C_SSC_TXEN;
//--------------------------------------------------------------------------
//enable interrupt
//--------------------------------------------------------------------------
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_SSC);


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 18 2006, 17:19
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



А значение imode чему равно?
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Jul 18 2006, 17:45
Сообщение #8


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Код
InitSSC(AT91C_SSC_ENDTX,64000);

Это типовой инит, такой же работает с USART.Маска прерваний вынесена в аргументы, чтобы на лету можно было переконфигурить прием/передачу/синхронизацию.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
Unomano
сообщение Oct 23 2006, 13:24
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 3-09-05
Из: Минск, Беларусь
Пользователь №: 8 203



Народ, поделитесь сурсами для TMS320 + AD73311. А то никак не пойму зачем по два раза слать каждую комманду и данные на кодек.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th June 2025 - 09:41
Рейтинг@Mail.ru


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