Masz rację tmf.
Od pewnego czasu nie pracuję już z Xmega i zapomniałem, że jedynym rozsądnym SPI jest USART.
A co do wystawiania SS, to nie jest do końca tak. Mam aplikację, w której Touch Panel nie pracuje w przerwaniach, tylko jest skanowany (X,Y,Z1,Z2) co 50ms i to leci z przerwania od licznika (SysTick). Z kolei karta pamięci zawierająca grafikę dla TFT przesyła dane tylko wtedy gdy ich potrzebuje w reakcji na sygnały z panelu. Ale... do przesłania bywa >1MB podczas przeładowania ekranu, do tego czcionki, grafika do animacji i i to wszystko chwilę trwa. Gdybym tak po prostu chciał sobie zatrzymać transfer obrazu na czas odczytu panelu, to albo muszę inicjować transfer na nowo i mam zacięcia na ekranie (karta odpowiada z opóźnieniem), albo całkiem rozwalam transmisję. Ponieważ karty nie odpowiadają z jednakową prędkością, a do tego użytkownik w każdej chwili może wyjąć kartę, więc nie mogę czekać w nieskończoność na zakończenie transferu aby wtedy przejść do obsługi TP. Dlatego zastosowałem chyba najprostsze rozwiązanie. Co 50ms przed czytaniem TP sprawdzam czy jest jakiś transfer planowany do startu lub w toku i jeżeli warunek jest prawdziwy, to rezygnuję z czytania i odliczam 'TP_Read_Timeout'. Jeżeli odliczę do 0 lub wykryję brak karty, to wyłączam wszystkie urządzenia na SPI, rekonfiguruję moduł i obsługuję TP, ponieważ obsługa TP jest dla mnie nadrzędna, a obraz na TFT jest jako feedback. Po takiej operacji obraz jest odświeżany z karty, o ile jest obecna lub wystawiam komunikat błędu z innej pamięci ze znacznie ograniczonym polem graficznym.
Istotne jest, że urządzenia mogą być 'wywoływane' niezależnie i arbitraż w dostępnie jest konieczny.
@ASMnauka_:
Jeżeli chcesz wykorzystać pamięć W25Q16 do przechowywania grafiki, to nie ma większego sensu. Znacznie lepiej czytać dane z karty pamięci, ponieważ dużo łatwiej jest je tam umieścić korzystając z dowolnego komputera. Żeby załadować dane do pamięci, to musisz albo najpierw załadować je do Flash (wielokrotne programowanie), albo kopiować z karty pamięci (zbędne), albo korzystać z dodatkowego loadera, który też będzie pobierał dane z innego źródła.