External interrupt support(exti.h)
外部割込み・イベントコントローラ(EXTI)のサポート
原文
ヘッダーファイル:libmaple/exti.h
関連ヘッダーファイル stm32f1/include/series/exti.h、libmaple/libmaple_types.h
関連ソースファイル libmaple/exti.c、libmaple/exti_f1.c
概要(*1)
イベント/割り込みリクエストを生成するための外部割り込み/イベントコントローラは、コネクティビティラインデバイスでは最大 20 本のエッジ検出回路で構成され、その他のデバイスでは 19 本のエッジ検出回路で構成されます。各入力ラインは、個別に設定可能で、タイプ(パルスまたはペンディング)と対応するトリガイベント(立ち上がり、立ち下がり、または両方)を選択できます。また、ラインごとにマスクをかけることもできます。ペンディングレジスタは、割り込みリクエストのステータスラインを維持します。
主な特徴(*1)
EXTI コントローラは次のような特長を備えています。
割り込み/イベントラインごとに独立したトリガとマスク
割り込みラインごとに専用のステータスビット
最大 20 本のソフトウェアイベント/割り込みリクエストの生成
APB2 クロック周期よりも短いパルス幅の外部信号の検出。
データ型
■ struct exti_reg_map
外部割込みレジスタマップ型
パブリックメンバー
__io uint32 IMR 割り込みマスクレジスタ(EXTI_IMR)
__io uint32 EMR イベントマスクレジスタ(EXTI_EMR)
__io uint32 RTSR 立ち上がりトリガ選択レジスタ(EXTI_RTSR)
__io uint32 FTSR 立ち下がりトリガ選択レジスタ(EXTI_FTSR)
__io uint32 SWIER ソフトウェア割り込みイベントレジスタ(EXTI_SWIER)
__io uint32 PR ペンディングレジスタ(EXTI_PR)
■ enum exti_num 列挙型
EXTIライン
EXTI0 EXTI ライン 0 (PA0,PB0,PC0,PD0,PE0,PF0,PG0)
EXTI1 EXTI ライン 1(PA1,PB1,PC1,PD1,PE1,PF1,PG1)
EXTI2 EXTI ライン 2(PA2,PB2,PC2,PD2,PE2,PF2,PG2)
EXTI3 EXTI ライン 3(PA3,PB3,PC3,PD3,PE3,PF3,PG3)
EXTI4 EXTI ライン 4(PA4,PB4,PC4,PD4,PE4,PF4,PG4)
EXTI6 EXTI ライン 6(PA5,PB5,PC5,PD5,PE5,PF5,PG5)
EXTI5 EXTI ライン 5(PA6,PB6,PC6,PD6,PE6,PF6,PG6)
EXTI7 EXTI ライン 7(PA7,PB7,PC7,PD7,PE7,PF7,PG7)
EXTI8 EXTI ライン 8(PA8,PB8,PC8,PD8,PE8,PF8,PG8)
EXTI9 EXTI ライン 9(PA9,PB9,PC9,PD9,PE9,PF9,PG9)
EXTI10 EXTI ライン 10(PA10,PB10,PC10,PD10,PE01,PF10,PG10)
EXTI11 EXTI ライン 11(PA11,PB11,PC11,PD11,PE11,PF11,PG11)
EXTI12 EXTI ライン 12(PA12,PB12,PC12,PD12,PE12,PF12,PG12)
EXTI13 EXTI ライン 13(PA13,PB13,PC13,PD13,PE13,PF13,PG13)
EXTI14 EXTI ライン 14(PA14,PB14,PC14,PD14,PE14,PF14,PG14)
EXTI15 EXTI ライン 15(PA15,PB15,PC15,PD15,PE15,PF15,PG15)
■ enum exti_cfg
外部割込みポート設定
これらは、外部割り込み回線を接続するGPIOポートを指定します。
EXTI_PA PAxピンの利用
EXTI_PB PBxピンの利用
EXTI_PC PCxピンの利用
EXTI_PD PDxピンの利用
EXTI_PE PExピンの利用
EXTI_PF PFxピンの利用
EXTI_PG PGxピンの利用
EXTI_PH PHxピンの利用
EXTI_PI PIxピンの利用
■ enum exti_trigger_mode
外部割り込みトリガモード
EXTI_RISING 立ち上がりエッジでトリガ
EXTI_FALLING 立ち下がりエッジでトリガ
EXTI_RISING_FALLING 立ち上がりエッジと立ち下がりエッジの両方でトリガ
これら(exti_num、exti_cfg、exti_trigger_mode)の3つの組み合わせは、外部割り込み設定を指定します(exti_attach_interrupt()を参照)。
デバイス
なし
API関数
■ void exti_attach_interrupt(exti_num num, exti_cfg port, voidFuncPtr handler, exti_trigger_mode mode)
外部割り込み時に実行するハンドラを登録します。
この関数は、与えられた外部割り込みに対応する割り込み要求がマスクされていることを前提としています。
引数
num :外部割り込みライン番号
port :外部割り込みのソース入力として使用するポート
handler :割り込みがトリガされたときに実行される関数ハンドラ
mode :トリガする遷移のタイプ.EXTI_RISING、EXTI_FALLING、EXTI_RISING_FALLINGのいずれかです。
利用例
PB10ピンの入力パルスの外部割込みを登録する
code:c
void ledOn() { digitalWrite(PC13,HIGH); };
exti_attach_interrupt((exti_num)(PIN_MAPPB10.gpio_bit),
gpio_exti_port(PIN_MAPB10.gpio_device),
ledOn,
EXTI_RISING);
PB10ピンの外部割込みライン番号、外部割り込みのソース入力として使用するポートは、
PIN_MAPを利用してい求めることができます。
外部割込みライン番号 :(exti_num)(PIN_MAP[PB10].gpio_bit)
外部割り込みのソース入力として使用するポート :gpio_exti_port(PIN_MAP[B10].gpio_device)
gpio_exti_port()関数については、「GPIO port and AFIO support(gpio.h) libmaple/gpio.h GPIO・AFIOサポートライブラリ」を参照して下さい。
■ void exti_detach_interrupt(exti_num num)
外部割り込みハンドラの登録を解除します。
引数
num :外部割り込みライン番号
■ void exti_attach_callback(exti_num num,exti_cfg port,voidArgumentFuncPtr handler,void *arg,exti_trigger_mode mode)
外部割り込み時に実行するハンドラを登録します。
この関数は、与えられた外部割り込みに対応する割り込み要求がマスクされていることを前提としています。
引数
num :外部割り込みライン番号
port :外部割り込みのソース入力として使用するポート
handler :割り込みがトリガされたときに実行される関数ハンドラ
arg :割り込みハンドラに渡す引数
mode :トリガする遷移のタイプ.EXTI_RISING、EXTI_FALLING、EXTI_RISING_FALLINGのいずれかです。
exti_attach_interrupt(num, port, handler, mode)は、
exti_attach_callback(num, port, (voidArgumentFuncPtr)handler, NULL, mode)と同じです。
■ void exti_select(exti_num num, exti_cfg port)
これは、ほとんどのユーザーが必要としない低レベルのルーチンです。
exti_attach_interrupt()は、この関数を適切に呼び出す処理を行います。
引数
num :外部割り込みライン番号
port :外部割り込みのソース入力として使用するポート
レジスタマップベースポインタ
■ EXTI_BASE
外部割込みレジスタマップのベースポインタ
レジスタのビット定義
なし
脚注
(*1)は、参考文献1の「外部割り込み/イベントコントローラ(EXTI)」より引用しています。
関連項目
attachInterrupt()
detachInterrupt()
外部割込み
GPIO port and AFIO support(gpio.h) libmaple/gpio.h
参考文献
1. RM0008 リファレンス・マニュアル 中容量及び大容量STM32F101x及びSTM32F103x 高性能 ARMベース 32bit MCU
License and Attribution: Portions of this page were adapted from the Arduino Reference Documentation, which is released under a Creative Commons Attribution-ShareAlike 3.0 License.
このドキュメントはleafLabs, LLC.が執筆し、たま吉が翻訳・一部加筆修正したものです。
NAVER、ヤフオク等の営利目的の記事転用、リンク貼りは禁止です。
Arduino STM32 リファレンス 日本語版 に戻る