Disabilitare pcint interrupt

Ciao ragazzi,
mi potete passare le istruzioni per disabilitare tutti gli interrupt su tutti i pin tranne l'interrupt esterno sul pin3?
Per favore ovviamente.
Grazie

Spiegati meglio, perché ne hai bisogno?
Ciao Uwe

ekjk:
Ciao ragazzi,
mi potete passare le istruzioni per disabilitare tutti gli interrupt su tutti i pin tranne l'interrupt esterno sul pin3?
Per favore ovviamente.
Grazie

Tutti i PCINT sono disabilitati di default, a meno che tu non li attivi esplicitamente da codice.

Mi spiego, praticamente vorrei impedire che qualche segnale di disturbo potesse far scattare un interrupt.
Nel setup scrivo questo codice per settare un timer e disabilito e poi abilito gli interrupt

// initialize Timer1
    cli();          // disable global interrupts
    TCCR1A = 0;     // set entire TCCR1A register to 0
    TCCR1B = 0;     // same for TCCR1B
 
    // set compare match register to desired timer count:
    // turn on CTC mode:
    TCCR1B |= (1 << WGM12);
    TCCR1B &= ~(1 << WGM10);
    TCCR1B &= ~(1 << WGM11);
    // Set for prescaler 8:
    TCCR1B |= (1 << CS11);
    TCCR1B  &= ~(1 << CS12);
    TCCR1B  &= ~(1 << CS10);
    // enable timer compare interrupt:
    TIMSK1 |= (1 << OCIE1A);
    // enable global interrupts:
    sei();

non vorrei che con sei() abbia abilitato tutti gli interrupt. Se per caso arriva un disturbo su un pin e arduino lo riconosce come segnale e attiva una isr fa qualcosa che non voglio. quindi vorrei disabilitarli su tutti gli ingressi a parte il 3.

Le istruzioni sei() e cli() agiscono sul bit 7 del registro SREG che corrisponde a "Global Interrupt Enable", cli() blocca tutti gli interrupt abilitati, sei() (ri)attiva tutti gli interrupt abilitati, quelli non specificatamente abilitati rimangono inattivi.

Ok grazie, ma per mia nozione personale se avessi la necessità di disabilitarli in futuro (anche se ho capito che di default lo sono già), quali istruzioni devo scrivere?

Devi prima abilitarli, a quel punto diventano e li tratti come tutti gli altri, con cli() li disabiliti

Ok, ma quindi di default mi assicuri che sono tutti disabilitati?

yes, te l'hanno già detto due mostri sacri, vuoi farli ]:smiley: ]:smiley: ]:D?

ekjk:
Ok grazie, ma per mia nozione personale se avessi la necessità di disabilitarli in futuro (anche se ho capito che di default lo sono già),

Dopo il reset del micro tutti gli interrupt sono disattivati di default, però l'ambiente di lavoro di Arduino attiva per suo conto l'interrupt del timer 0 quelli abbinati a Rx e Tx della UART.
Attenzione che se usi cli() disabiliti anche la ricezione/trasmissione della seriale e la millis con tutte le funzionalità legate a questa funzione, l'uso di cli() e sei() deve sempre essere ben ponderato perché agisci su un controllo globale e non sulle singole funzioni.

Ok grazie mille delle risposte!

Ciao Astro, un'informazione...

L'UART dovrebbe possedere un piccolo buffer (da 64 byte se non ricordo male) che funziona in modo indipendente.

La cli() disattiva il Timer0 per il "trasporto" da buffer hardware a quello software oppure è il Timer0 che gestisce tutto?

sei() e cli() sono solo alias per le operazioni

SREG |= (1<<SREG_I) e SREG &= ~(1<<SREG_I)

Questo bit attiva/disattiva gli interrupt a livello globale. Per attivare/disattivare specifici interrupt, va modificato il corrispondente bit a livello del registro che controlla la periferica da gestire. Ad esempio, se io voglio attivare un interrupt sull'overflow del timer 2, devo impostare il bit TOIE2 nel registro TIMSK2. Ovviamente tale interrupt viene attivato solo se il bit "I" del registro SREG è attivo.

Tornando alla seriale, il buffer è software ed è gestito dal core di Arduino: ogni volta che viene ricevuto un dato, viene sollevato un interrupt sulla ricezione seriale, la cui ISR copia il byte nel buffer seriale.

Grazie, Leo!