Доброго времени суток, возникла проблема - не могу обеспечить передачу данных от одного мк atmega16 к другому (тоже 16-я мега) по spi.
Примеры инициализации, передачи и приёма символа брал из даташита, однако данные не приходят ни на реальном железе, ни в протеусе. Ниже привожу код для мк-мастера и мк-слэйва:
master:
slave:
Надеюсь на Вашу помощь!
Раздел: AVR
Примеры инициализации, передачи и приёма символа брал из даташита, однако данные не приходят ни на реальном железе, ни в протеусе. Ниже привожу код для мк-мастера и мк-слэйва:
master:
#include <avr/io.h>
#include <avr/interrupt.h>
volatile char bo;
int main(void)
{
DDRB|=(1<<PB4)|(1<<PB5)|(0<<PB6)|(1<<PB7); //все выходы кроме MISO
SPCR|=(1<<SPE)|(1<<MSTR)|(1<<SPI2X); //тактирование на половинной частоте от рабочей
sei();
while(1)
{
bo=spi_get(); //бесконечный приём символа
}
}
char spi_get()
{
while(!(SPSR & (1<<SPIF)));
return SPDR;
}
slave:
#include <avr/io.h>
#include <avr/interrupt.h>
int main(void)
{
DDRB|=(0<<PB4)|(0<<PB5)|(1<<PB6)|(0<<PB7); //все входы кроме MISO
SPCR|=(1<<SPE);
sei();
while(1)
{
SPDR = 'j'; //посылаем символ 'j' на другой МК
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)));
}
}
Надеюсь на Вашу помощь!
Раздел: AVR