so hier mal der sklave der nix sendet:
Code:
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#define DDR_SPI PORTB
#define DD_SS PB0
#define DD_SCK PB1
#define DD_MOSI PB2
#define DD_MISO PB3
//#####################
void spi_slave_init(void);
void spi_slave_receive(void);
int main(void);
//#####################
volatile char tx_data;
volatile char rx_data;
SIGNAL (SIG_SPI)
{
rx_data=SPDR;
SPDR=tx_data;
}
void spi_transmit(void)
{
switch (rx_data)
{
case 0x00: tx_data=0xFF;break; //1.mal ini
case 0x01: tx_data=0xFE;break; //daten
case 0x02: tx_data=0xFD;break;
case 0x03: tx_data=0xFC;break;
case 0x04: tx_data=0xFB;break;
case 0x05: tx_data=0xFA;break;
case 0x06: tx_data=0xF9;break;
case 0x07: tx_data=0xF8;break;
case 0x08: tx_data=0xF7;break;
case 0x09: tx_data=0xF6;break;
}
}
void spi_slave_init(void)
{
DDR_SPI = (1<<DD_MISO)|(0<<DD_MOSI)|(0<<DD_SS)|(0<<DD_SCK);
SPCR = (1<<SPE)|(1<<SPIE);
sei();
}
/*
void spi_slave_receive(void)
{
SPDR=tx_data;
while(!(SPSR & (1<<SPIF)));
rx_data=SPDR;
}
*/
int main(void)
{
DDRE=0xFF;
spi_slave_init();
while(1)
{
PORTE=rx_data;
spi_transmit();
//spi_slave_receive();
}
return 0;
}
Lesezeichen