SPI

Ukázka použití SPI

28. 3. 2013
/*
 *  inicializace SPI
 *------------------------------------------------------------------------------*/
void SPI_init(void)
{
    DDRB |= (1<<3) | (1<<5) | (1<<2);

    // SPI enable, Data order 0 MSB first, Master, clock fosc/2 (0 1 0)
    SPCR = (0<<SPIE) | (1<<SPE) | (0<<DORD) | (1<<MSTR) | (0<<CPOL) | (0<<CPHA) | (1<<SPR1) |(0<<SPR0);
    SPSR = (0<<SPI2X);
}

/*
 *  Vyslani Bytu po SPI
 *------------------------------------------------------------------------------*/
void SPI_transmit(unsigned char c)
{
    SPDR = c;
    while(!(SPSR & (1<<SPIF)));
}

/*
 *  Nastaveni DAC
 *------------------------------------------------------------------------------*/
void SPI_set_DAC(char chan, unsigned int val)
{
    val &= 0x0FFF;
    val |= (chan<<15) | (1<<12);

    PORTD &= ~(1<<5);        // nastavi CS DAC na 0 (= aktivni)
    SPI_transmit(val>>8);
    SPI_transmit(val);
    PORTD |= (1<<5);        // nastavi CS DAC na 1
}