Mam problem, potrzebuje wysłać do układu 3 bajty w jednej paczce przez SPI, procesor jest masterem i wysyła dane do układu. Robie to narazie na piechote, jak na ząłączonym kodzie. I właśnie:
Czy jest możliwe by cała sekwencja 3 bajtów miała nie "zakłócony" cykl zegarowy - widac to na zdjęciu, te przerwy ( u góry zegar, na dole dane). Być może układ przyjął by te dane, ale chciałbym żeby to wyglądało ładnie, czy jest wogole taka możliwość? Wiem że jest to spowodowane ładowaniem zmiennej do r16, i kolejną instrukcją ładującą ją do SPDR - są to dwa takty przed fizycznym wysłaniem danych, ale przy dzielniku zegara 4 ta przerwa jakaś nazbyt wyraźna. Czy jedyna rada to większy podział zegara, tak by te dwie instrukcje nie były nazbyt widoczne?
----Chyba odpowiem sobie sam przy fazie zegara zacznającego start od "0" ta przerwa tak się 'wydłuża" i w rzeczywistości wynosi pół cyklu lini SCLK SPI. Bo zegar dla 1 bitu 2 i 3 bajtu "zaczyna się" w połowie tej "przerwy" .
Drugie takie uzupełniające pytanie:
Co by było gdybym miał wysłać np. 19 bitów. Przecież nie mamy informacji który aktualnie bit jest wysuwany w danej chwili, by zastopować transmisje, zmieniając stan lini SS (CS). Jest to wogóle wykonalne ?
Czy jest możliwe by cała sekwencja 3 bajtów miała nie "zakłócony" cykl zegarowy - widac to na zdjęciu, te przerwy ( u góry zegar, na dole dane). Być może układ przyjął by te dane, ale chciałbym żeby to wyglądało ładnie, czy jest wogole taka możliwość? Wiem że jest to spowodowane ładowaniem zmiennej do r16, i kolejną instrukcją ładującą ją do SPDR - są to dwa takty przed fizycznym wysłaniem danych, ale przy dzielniku zegara 4 ta przerwa jakaś nazbyt wyraźna. Czy jedyna rada to większy podział zegara, tak by te dwie instrukcje nie były nazbyt widoczne?
----Chyba odpowiem sobie sam przy fazie zegara zacznającego start od "0" ta przerwa tak się 'wydłuża" i w rzeczywistości wynosi pół cyklu lini SCLK SPI. Bo zegar dla 1 bitu 2 i 3 bajtu "zaczyna się" w połowie tej "przerwy" .
SPInadaj: ;
ldi r16,0b01010011 //1 bajt
out SPDR,r16
czekaj:
sbis spsr,spif
rjmp czekaj ; czekaj az zakonczy sie transmisja jednego bajtu
ldi r16,0b01110000 //drugi bajt
out SPDR,r16
czekaj2:
sbis spsr,spif
rjmp czekaj2
ldi r16,0b00111001 //tzreci bajt
out SPDR,r16
czekaj3:
sbis spsr,spif
rjmp czekaj3
ret
Drugie takie uzupełniające pytanie:
Co by było gdybym miał wysłać np. 19 bitów. Przecież nie mamy informacji który aktualnie bit jest wysuwany w danej chwili, by zastopować transmisje, zmieniając stan lini SS (CS). Jest to wogóle wykonalne ?