ToR
Guest
Thu Aug 17, 2006 8:49 pm
Potrzebuje napisac komunikacje SPI w full-duplex'sie i mam problem bo nie wiem
jak to zaimplemenotwac.Otoz aktualnie mam funkcje dostepne w dokumentacji
Atmega16 AVR czyli:
//--------------------------------
void SPI_MasterTransmit(char cData)
{
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)));
}
//--------------------------------
char SPI_Master_Receive(void)
{
/* Wait for reception complete */
while(!(SPSR & (1<<SPIF)));
/* Return data register */
return SPDR;
}
ale to nie full duplex...Bo transmisje "z" i "do" sa osobno.
Znalezlem w ksiazce (BTC) pseudo-kod full-dupleska ale nie wiem jak sie do
niego dobrac moze Wy bedziecie miec jakies propozycje:
unsigned char SPI_trans(unsigned char dana_nadana)
{
unsigned char i,dana_odebrana;
dana_odebrana = 0;
i = 8;
whil (i)
{
i--;
MISO=(dana_nadana>>i)$1;
SCK=1;
dana_Odebrahna=dana_odebrana|(unsigned char) (MOSI)<<i);
SCK = 0;
}
return dana_odebrana;
}
gdzie MISO,MOSI,SCK wyprowadzenia SPI na procku.
Wszytko fajnie ale ten ten kod wyglada mi na wlasna implementacje algorytmu SPI
a ja chce wykotrzystac sprzetowy. A wiec czy mozecie jakos doradzic jak to
polaczyc ?
Moja propozycja:
char SPI_MasterTransmit(char cData)
{
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)));
return SPDR;
}
Pozdrawiam,
Rafal k.
--
Wysłano z serwisu OnetNiusy:
http://niusy.onet.pl
Ostry
Guest
Fri Aug 18, 2006 5:02 pm
Dnia 17-08-2006 o 22:49:36 ToR <ToR_kulaWYTNIJTO@o2.pl> napisał:
Quote:
Moja propozycja:
char SPI_MasterTransmit(char cData)
{
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)));
return SPDR;
}
jest OK
--
Ostry