[Armadillo:03550] Re: Armadilo-500 GPIOピンを利用した割り込みについて
g-kihara
email@hidden
2008年 10月 16日 (木) 10:57:42 JST
山本 様
早々のご返信ありがとうございます。
>> request_irq(INT_GPIO3_13, irq_handler, SA_INTERRUPT, "inttest",
>> NULL);
>> set_irq_type(INT_GPIO3_13, IRQT_RISING);
>
> 上記は手順が逆なのではないでしょうか?
>
> (1)set_irq_type(INT_GPIO3_13, IRQT_RISING);
> (2)request_irq(INT_GPIO3_13, irq_handler, SA_INTERRUPT, "inttest", NULL);
>
> の手順で設定するのが正しいのではないかと。
この手順で行ったところ、正常に動作するようになりました。
ご教示頂きありがとうございました。
>IRQの割り込みのデフォルトはLOWレベル割り込みで、
>set_irq_type()でRISINGを設定する前にrequest_irq()で
>割り込みを有効にすると、信号がLOWなので、
>ノンストップで割り込みが上がってきているように思えます。
原因もこれでわかりました。
ご親切に解説していただき、誠にありがとうございました。
以上
>
> On Wed, 15 Oct 2008 17:58:49 +0900
> g-kihara <email@hidden> wrote:
>
>> お世話になっています。
>>
>>
>> 割り込みがかかるようになったものの、
>> デバイスドライバをinsmodすると、
>> ずっと割り込みがかかりっぱなしになります。
>> ただ、その割り込みがかかりっぱなしのときに、
>> 下記の【テスト環境】の説明に記したスイッチを
>> ONにすると、割り込みは停止します。
>> その後、スイッチをOFF -> ONに切り替えごとに、
>> 割り込みハンドラがよばれ、期待した動作(立ち上がりエッジ
>> で割り込み発生)を行ってくれます。
>>
>> insmod時、割り込みがかかりっぱなしになるのを
>> 防ぎたいのですが、どのような設定を行えばよろしいのでしょうか?
>> ご教示のほど宜しくお願い申し上げます。
>>
>>
>> ----------------------------------------------------------------------------
>> 【テスト目的】
>>
>> GPIO3_13(CON16 30ピン)を割り込みピンとして使用し、
>> 立ち上がりエッジで割り込みハンドラが呼ばれるようにしたい。
>>
>> ----------------------------------------------------------------------------
>> 【テスト環境】
>>
>> CON16 30ピン(GPIO3_13) 、31ピン(GPIO3_14)をともにテストボード上のトグルスイッチ
>> の1端子に接続し、OFF状態のときは、ともにピン30(GND)に接続されています。
>>
>> スイッチをONにすると、これらCON16の2端子とGNDとの接続は断たれます。
>>
>> スイッチOFF状態のとき、デバイスドライバーをinsmod す
>> ると、 GPIO3_14 にHighが出力されます
>> (mxc_set_gpio_dataout(MX31_PIN_CSI_D14, 1/*HIGH*/)。
>>
>> insmodした後、
>> テストボードのスイッチをONにすると、CON16 30ピン(GPIO3_13) 、31ピン(GPIO3_14)
>> とGND線との接続が断たれ、GPIO3_14とGPIO3_13がともにHighになります。
>> スイッチをOFFにすると、GNDと接続され、LOWになります。
>>
>> ---------------------------------------------------------------------
>> 【デバイスドライバーソース】
>>
>> #include <linux/module.h>
>> #include <linux/interrupt.h>
>> #include <linux/irq.h>
>> #include "/home/atmark//linux-2.6.18-at2/arch/arm/mach-mx3/iomux.h"
>>
>> #include <asm/arch/mx31_pins.h>
>> #include <asm/arch/gpio.h>
>>
>> #define AUTHOR "Test, Inc."
>> #define DESCRIPTION "Armadillo-5x0 GPIO Interrupt test driver"
>> #define LICENSE "GPL v2"
>>
>> static irqreturn_t
>> irq_handler(int irq, void *dev_id, struct pt_regs *regs)
>> {
>> static int n=0;
>> printk("interrupt occur!! %02dkai\n", n);
>> n++;
>>
>> return IRQ_HANDLED;
>> }
>>
>> static int __init
>> a500_extbus_init(void)
>> {
>> printk("init start!\n");
>>
>> // GPIO3_13 割り込みピンとして使用
>> mxc_set_gpio_direction(MX31_PIN_CSI_D13 , GPIO_DIR_INPUT);
>> mxc_request_iomux(MX31_PIN_CSI_D13 , OUTPUTCONFIG_GPIO,
>> INPUTCONFIG_GPIO);
>>
>> // GPIO3_14 GPIO出力ピンとして使用
>> mxc_set_gpio_direction(MX31_PIN_CSI_D14, 0/*OUTPUT*/);
>> mxc_request_iomux(MX31_PIN_CSI_D14 , OUTPUTCONFIG_GPIO,
>> INPUTCONFIG_NONE);
>>
>> // GPIO3_14 にHighを出力
>> mxc_set_gpio_dataout(MX31_PIN_CSI_D14, 1/*HIGH*/);
>>
>> request_irq(INT_GPIO3_13, irq_handler, SA_INTERRUPT, "inttest",
>> NULL);
>> set_irq_type(INT_GPIO3_13, IRQT_RISING);
>>
>> return 0;
>> }
>>
>> static void __exit
>> a500_extbus_exit(void)
>> {
>> free_irq(INT_GPIO3_13, NULL);
>> }
>>
>> MODULE_AUTHOR(AUTHOR);
>> MODULE_DESCRIPTION(DESCRIPTION);
>> MODULE_LICENSE(LICENSE);
>>
>> module_init(a500_extbus_init);
>> module_exit(a500_extbus_exit);
>>
>> ---------------------------------------------------------------------
>> 以上
>>
>>
>> _______________________________________________
>> armadillo mailing list
>> email@hidden
>> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>>
>
> =================================================
> 北都システム株式会社
> 第4ユニット ITソリューショングループ所属
> 山本 慎二郎(Shinjiro Yamamoto)
> TEL: 045-470-2773
> Mail: email@hidden
> =================================================
>
>
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
armadillo メーリングリストの案内