概要
detachInterrupt()は、外部割り込みが発生したときに呼び出す関数の登録を解除します。detachInterrupt()のリファレンスはこちらを参照してください。
外部割り込みが発生したときに呼び出す関数の登録は、attachInterrupt()を使って設定します。割り込みの詳細は、attachInterrupt()を参照してください。
ソースコード
detachInterrupt()は、hardware/arduino/avr/cores/arduino/WInterrupts.c に定義されています。以下に全ソースコードを示します。Arduino Unoの場合に適用される部分だけを抜粋しています。実際には#if によりさまざまなチップに対応しています。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
void detachInterrupt(uint8_t interruptNum) {
if(interruptNum < EXTERNAL_NUM_INTERRUPTS) {
// Disable the interrupt. (We can't assume that interruptNum is equal
// to the number of the EIMSK bit to clear, as this isn't true on the
// ATmega8. There, INT0 is 6 and INT1 is 7.)
switch (interruptNum) {
case 0:
EIMSK &= ~(1 << INT0);
break;
case 1:
EIMSK &= ~(1 << INT1);
break;
case 2:
break;
}
intFunc[interruptNum] = nothing;
}
}
|
入力は、interruptNumで、uint8_t型です。出力はありません。
1
|
void detachInterrupt(uint8_t interruptNum) {
|
割り込み番号(interruptNum)が、EXTERNAL_NUM_INTERRUPTS未満のとき、それ以降を実行します。
2
|
if(interruptNum < EXTERNAL_NUM_INTERRUPTS) {
|
割り込み番号に対応したレジスタの値を設定し、割り込みを無効にします。
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
// ATmega8. There, INT0 is 6 and INT1 is 7.)
switch (interruptNum) {
case 0:
EIMSK &= ~(1 << INT0);
break;
case 1:
EIMSK &= ~(1 << INT1);
break;
case 2:
break;
}
intFunc[interruptNum] = nothing;
}
}
|
EIMSKは、外部割り込みの許可・禁止を制御するレジスタです。
intFunc[]にnothingを設定して、登録してあった関数を削除します。nothingは、何もしない関数です。
バージョン
Arduino AVR Boards 1.8.6
最終更新日
March 21, 2023