решил создать WAV проигрыватель на ATtiny85. Сам wav файл закидываю во внешнею eeprom AT25P1024. Она работает по протоколу SPI, но так как мой МК не подерживает хардварно этот протокол, решил сделать его софтварно. Но тут и вся загвоздка...в инете ничего толкового не нашёл. Даже написал пару строк, вроде чтото отправляется, но как получать???
Если вам не трудно и есть какие-то соображения поделитесь очень прошу...уже неделю снятся кошмары про SPI
CODE
#include <avr/io.h>
#include "util/delay.h"
unsigned char _FF_spi(unsigned char mydata);
unsigned char _FF_spi(unsigned char mydata)
{
unsigned char temp;
USIDR = mydata;
mydata = 0x11;
temp = 0x13;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
return (USIDR);
}
void port_init(void)
{ DDRB |= _BV(PB3); // as output (CS)
DDRB |= _BV(PB1); // as output (DO)
DDRB |= _BV(PB2); // as output (USISCK)
DDRB &= ~_BV(PB0); // as input (DI)
PORTB |= _BV(PB0); // pullup on (DI)
PORTB |= _BV(PB3); // CS HI
}
int main(void)
{unsigned char resive_byte;
port_init();
while(1){
_delay_ms(100);
PORTB &= 0xFF- _BV(PB3);
resive_byte = _FF_spi(0x03);
PORTB |= _BV(PB3);
}
return 0;
}
#include "util/delay.h"
unsigned char _FF_spi(unsigned char mydata);
unsigned char _FF_spi(unsigned char mydata)
{
unsigned char temp;
USIDR = mydata;
mydata = 0x11;
temp = 0x13;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
USICR = mydata;
USICR = temp;
return (USIDR);
}
void port_init(void)
{ DDRB |= _BV(PB3); // as output (CS)
DDRB |= _BV(PB1); // as output (DO)
DDRB |= _BV(PB2); // as output (USISCK)
DDRB &= ~_BV(PB0); // as input (DI)
PORTB |= _BV(PB0); // pullup on (DI)
PORTB |= _BV(PB3); // CS HI
}
int main(void)
{unsigned char resive_byte;
port_init();
while(1){
_delay_ms(100);
PORTB &= 0xFF- _BV(PB3);
resive_byte = _FF_spi(0x03);
PORTB |= _BV(PB3);
}
return 0;
}