AVR SPI Slave problem
Karel Minarčík
karel.minarcik na gmail.com
Pondělí Únor 28 10:37:05 CET 2011
Ne, psal jsem v prvnim prispevku:
Testoval jsem ten prenos kdyz byly veskere ostatni preruseni zakazane, zadny
program krome nekonecne smycky se nevykonaval, nic jineho to zpozdit nemuze.
KM
2011/2/28 Tomas Chvatal <tchvatal na ezop.cz>
> A nemate (treba jen nekdy) povolene preruseni i od jinych periferii ?
> Pokud je cpu v preruseni neceho jineho a prijde int. od /SS, tak
> se preruseni od /SS obslouzi az po ukonceni aktualniho.
>
> s přáním hezkého dne / Best regards
> Tomáš Chvátal
> EZOP Praha s.r.o.
> tel./fax.: 257320853
> www.ezop.cz
> tchvatal na ezop.cz
>
> ----- Původní zpráva -----
> *Od:* Karel Minarčík <karel.minarcik na gmail.com>
> *Komu:* HW-news <hw-list na list.hw.cz>
> *Odesláno:* 28. února 2011 10:05
> *Předmět:* Re: AVR SPI Slave problem
>
> 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
>>
>
> ------------------------------
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
>
> _______________________________________________
> 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/786c9745/attachment-0001.htm>
Další informace o konferenci Hw-list