Definizione Interrupt Service Routine

Alla fine sono riuscito a scrivere qualcosa: per quanto riguarda l'interrupt handler la sintassi è quella che ha detto leo, ISR(SPI_STC_vect){...}.

Ho provato a buttare giù una funzione che invii una sequenza di byte che sia non bloccante. Credo che funzioni ma per ora ho fatto un testing mooolto parziale. Per farlo ho semplicemente aggiunto nella libreria SPI questo:

volatile int SPI_len;
char *SPI_str;

void SPIClass::sendString(char* string, byte length)
{
	//make sure that the SPI interrupt is enabled
	SPI.attachInterrupt();
	//save length and str pointer in global variable
	SPI_len = length;
	SPI_str = string;
	//move first char in the SPDR register
	SPDR = *string;
}

int SPIClass::isBusy(){
	return(SPI_len);
}

ISR(SPI_STC_vect){
	*SPI_str = SPDR;
	SPI_str++;
	if (--SPI_len) SPDR = *SPI_str;
}

La funzione SPI.isBusy() si può chiamare per evitare di scrivere mentre il precedente trasferimento è ancora in corso.

Grazie ancora a tutti per l'aiuto :slight_smile:
Ciao!