AT73C213_Enable
Default mainpageat91libcomponentsdac-at73c213AT73C213_Enable
Description Source Call Graph
Start Line: 218
void AT73C213_Enable(unsigned int Fs, unsigned int sampleSize, unsigned int numChannels, unsigned char isClock384, unsigned int masterClock)
{
    // Configure the SPI peripheral chip select
    SPI_ConfigureNPCS(BOARD_AT73C213_SPI,
                      BOARD_AT73C213_SPI_NPCS,
                      AT73C213_SPI_NPCSCONFIG(masterClock));

    // DAC startup sequence
    // De-assert reset
    AT73C213_Write(AT73C213_DAC_RST,
                   AT73C213_DAC_RST_RSTZ
                   | AT73C213_DAC_RST_RESFILZ);

    // Precharge and turn on master power
    AT73C213_Write(AT73C213_DAC_PRECH,
                   AT73C213_DAC_PRECH_ONMSTR
                   | AT73C213_DAC_PRECH_ALL);

    // Enable line out drivers
    AT73C213_Write(AT73C213_DAC_CTRL,
                   AT73C213_DAC_CTRL_ONLNOL
                   | AT73C213_DAC_CTRL_ONLNOR);

    // TODO 500 ms delay

    // Stop precharging
    AT73C213_Write(AT73C213_DAC_PRECH, AT73C213_DAC_PRECH_ONMSTR);

    // TODO 1ms delay

    // Enable DACs
    AT73C213_Write(AT73C213_DAC_CTRL,
                   AT73C213_DAC_CTRL_ONLNOL
                   | AT73C213_DAC_CTRL_ONLNOR
                   | AT73C213_DAC_CTRL_ONDACL
                   | AT73C213_DAC_CTRL_ONDACR);

    // Select master clock speed
    if (isClock384) {
    
        AT73C213_Write(AT73C213_DAC_CSFC, AT73C213_DAC_CSFC_OVRSEL);
    }

    // Output DAC register values
    unsigned int i;
    TRACE_DEBUG_WP("DAC register values:\n\r");
    for (i=0; i <= AT73C213_PA_CTRL; i++) {

        TRACE_DEBUG_WP(" - @0x%02X = 0x%02X\n\r", i, AT73C213_Read(i));
    }

    // Unmute channels
    AT73C213_SetMuteStatus(0, 0);

    // Configure the SSC
    SSC_Configure(BOARD_AT73C213_SSC,
                  BOARD_AT73C213_SSC_ID,
                  Fs * sampleSize * 8 * numChannels,
                  masterClock);
    SSC_ConfigureTransmitter(BOARD_AT73C213_SSC,
                             AT73C213_TCMR(sampleSize, numChannels),
                             AT73C213_TFMR(sampleSize, numChannels));
    SSC_EnableTransmitter(BOARD_AT73C213_SSC);
}