Хм, я человек адекватный и справедливый. Легко признаю свои ошибки. И не зацикливаюсь на каких-то идеях, как бы они мне не нравились. Если в этих идеях есть ошибки. Конечно же, мне еще расти и расти. Но и у вас я заметил несколько существенных моментов. Первый же, за который зацепился мой взгляд, инструкция sbiw допускает максимальное число 64. Второй, что-то скромненько вы преподали
cp2i Xh,Xl,(SPI_RECEIVE_BUFFER+SPI_RECEIVE_BUFFER_LENGTH)
4 инструкции, 4 такта. Хотя, я и не знаю, что там у вас в этом макросе. Но предварительные догадки таковы.
Приведенный вами код только для одного случая. Если пакеты всегда одинаковы. А если они разные? Потому я и ввел счетчик байтов в пакете. Хорошо, все равно у меня у меня практически всегда остаются неиспользуемые регистры. Задействуем один как счетчик байтов SPI. Еще один для сравнения.
В любом случае, вам спасибо, я взял на заметку ваши замечания. Переделал несколько задач с учетом приведенного принципа.
	clr				SPI_CNT_BYTES
	ldi				r16,3
	mov				SPI_BYTES_LENGHT,r16
	SPI_Transfer_Int_Init
	lds				r16,SPI_TRANSFER_BUFFER
	out				SPDR,r16
;=========================================================================
SPI_Transfer_Int:
	push	r16
	in		r16,SREG
	push	r16
	push	XL
	push	XH
	ldix	SPI_RECEIVE_BUFFER
	addw	X,SPI_CNT_BYTES,RCLR
	in		r16,SPDR
	st		X+,r16
	inc		SPI_CNT_BYTES
	cp		SPI_CNT_BYTES,SPI_BYTES_LENGHT
	brsh	SPI_Transfer_Int_Off
	addiw	X,(SPI_TRANSFER_BUFFER-SPI_RECEIVE_BUFFER)
	ld		r16,X
	out		SPDR,r16
	rjmp	SPI_Transfer_Int_End
SPI_Transfer_Int_Off:
	in		r16,SPCR
	cbr		r16,1<<SPIE
	out		SPCR,r16
	cbr		FLAGS,1<<SPITC_FLG
SPI_Transfer_Int_End:
	pop		XH
	pop		XL
	pop		r16
	out		SREG,r16
	pop		r16
	reti
;=========================================================================
29 команд. Это уже не 42 команды, как прежде.