Zdravím mám takový problém při sbírání dat přes SPI, mám funkční kód, který již použivám v jedné jednotce. Po nahrání tohoto kódu do jiné ATmega nefunguje a není mi jasné proč, jakmile zavolám 2x za sebou funcki SPI_Prenos, tak tam se program zasekne a nepokračuje dál. Prosím o jakoukoliv radu. Díky.
#include <avr/io.h>
#define F_CPU 1000000 //11059200
#define BAUD 9600 //115200
#define MYUBRR F_CPU/16/BAUD-1
#include <util\delay.h>
void SPI_Inicializace(void);
unsigned char SPI_Prenos(unsigned char data);
void USART_Inicializace(unsigned char baud);
void USART_Vysilani( unsigned char data );
typedef unsigned char promenna;
SPI_Inicializace(); // inicializace SPI a USART
USART_Inicializace(MYUBRR);
PORTA=0xFF;
_delay_ms(100);
for(; ////////sber dat z akcelerometru/////////
{ promenna data;
promenna pomocna = 0xFF;
PORTA = 0xFD;
SPI_Prenos(0b00001110); // osa Y
data = SPI_Prenos(0);
USART_Vysilani(data);
PORTA=0xFF;
USART_Vysilani(pomocna);
}
return 0;
}
void SPI_Inicializace(void)
{
DDRB = (1<<DDB7)|(1<<DDB5); // nastaveni MOSI a SCK
SPCR = (1<<SPE)|(1<<MSTR)|(0<<SPR1)|(0<<SPR0); // povoleni SPI, nastaveni master, hodiny F_CPU/4
}
unsigned char SPI_Prenos(unsigned char data)
{
char pomocna;
SPDR=data;
while (!(SPSR & (1<<SPIF))); //cekani odeslani dat
pomocna=SPDR;
return pomocna;
}
void USART_Inicializace(unsigned char ubbr)
{
UBRRH = (unsigned char)(ubbr>>8); // nastaveni baud rate
UBRRL = (unsigned char)ubbr;
UCSRB =(1<<TXEN); // aktivace vystupu
}
void USART_Vysilani( unsigned char data )
{
while ( !( UCSRA & (1<<UDRE)) ) // podminka prazdneho bufferu
;
UDR=data; // odeslani dat
}