Цитата
А разьве там клок не нужен непрерывный? Там же сигма-дельта ацп. Если так - то нужно устраивать рплкладку между синхронным каналом ацп и синхронным каналом контроллера.
Мастер клок идет с генератора и тактирует АЦП и ЦАП. Он же деленный на 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);