|
|
  |
AD73311 и SAM7, не хотят дружить |
|
|
|
Jul 17 2006, 10:19
|

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

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

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

|
Спасибо, поборол - обвешал все конденсаторами, и клок не то что бы исправился, но приобрел более приемлемую форму. Теперь еще один вопрос - какой режим обмена более приемлемый? Когда все синхронизируеться по SDOFS или FSы работают раэдельно? В первом случае не совсем понятно, как инициализировать. Я так понял - сначала сбросить в буфер последовательность команд, дернуть reset - придет SDOFS и PDC их отправит. А как потом сбрасывать данные, если они еще не готовы? Во втором, вроде все тип-топ можно отправить инит-последовательность побайтно, без всякого PDC и включать/выключать передачу по желанию. Но при этом усложняется разруливание данных уже в самом SAMе.
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
Jul 18 2006, 12:06
|
Гуру
     
Группа: Свой
Сообщений: 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, а о наличии в буферах правильных данных пусть заботится остальной софт.
|
|
|
|
|
Jul 18 2006, 17:07
|

Профессионал
    
Группа: Свой
Сообщений: 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);
--------------------
Вони шукають те, чого нема, Щоб довести, що його не існує.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|