AVR SPI Slave problem

Karel Minarčík karel.minarcik na gmail.com
Pondělí Únor 28 10:05:52 CET 2011


Uplne cely program poslat nemuzu, jen znacne upraveny vytah:


#define TLED_ON  PORTD |=  (0x80)
#define TLED_OFF PORTD &= ~(0x80)


void SPI_Slave_Init(void)
{
    DDR_SPI2 = (1<<MISO2);
    SPI2_PORT = (1<<SCK2)|(1<<MOSI2)|(1<<CS2);
    SPCR = (1<<SPIE)|(1<<SPE)|(1<<MSTR)|(1<<CPOL)|(1<<CPHA);
}


//*Preruseni* *od* SPI

ISR(SPI_STC_vect)

{

uint8_t length = 10;

      uint8_t data;

      uint8_t a;



cli();

      SPCR = (0<<SPIE)|(1<<SPE)|(0<<MSTR)|(1<<CPOL)|(1<<CPHA);

      TLED_ON;

      SPDR = 0x02;

      *do*

      {

*#define* delay 300

            *for*(a=0;a<delay;a++) *if*((SPSR&0x80))*break*;

            ...

            data = SPDR;

            SPDR = pole[data];

                        .....

}*while*(--length);



      TLED_OFF;

      SPCR = (1<<SPIE)|(1<<SPE)|(1<<MSTR)|(1<<CPOL)|(1<<CPHA);

      sei();

      *return*;

}


Ve smycce while je toho samozrejme vice, s problemem to ale nesouvisi.
Nektere veci v kodu jsem pridaval a menil nahodne ze zoufalstvi, nic
nepomohlo.
To zpozdeni jsem zjistoval pomoci LA napichnuteho na SPI + jeden I/O pin AVR
jako signalizace kdy jsem v preruseni.
Problem se vyskytuje uplne nahodne, tj. treba mnohostokrat do preruseni
skocim ihned po shozeni /SS, semtam az po prijeti jednoho byte.
KM



2011/2/28 Jan Waclawek <konfera na efton.sk>

> ----- Original Message ---------------
> >Uvnitr
> >preruseni zakazu globalni preruseni (cli)
>
> To je zbytocne, vyvolanim prerusenia sa automaticky dalsie prerusenia
> zakazu (procesor automaticky vynuluje flag I).
>
> >Zjistil jsem pomoci log. analyzeru ze v AVR se
> >vyvolalo preruseni pozde, az po prijmu prvniho byte a ne hned po shozeni
> >/SS.
>
> Ako presne ste to zistovali? Mozete poslat program?
>
> wek
>
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
------------- dal?í ?ást ---------------
HTML p?íloha byla odstran?na...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20110228/c7350d72/attachment.htm>


Další informace o konferenci Hw-list