Возьмите CodeVision AVR, запустите его Визард с UART, настроенным на работу по прерываниям как на прием, так и на передачу и с объемом буфера, допустим, 128. Он вам 90% программы и сгенерит. Останется только SPI часть для обслуживания этого буфера :)