[Armadillo:03557] Re: Armadilo-500 GPIOピンを利用した割り込みについて

g-kihara email@hidden
2008年 10月 16日 (木) 19:07:31 JST


>
> H/W要因を除くのであれば、
> 正しく設定されていれば、無いはずです。
> ~~~~~~

誠に申し訳ございません。
"H/W要因"でした。
割り込みピンの隣に、Low -> Highを出力させるピンがあるのですが、
このピンに信号を出力するときに、ノイズが割り込みピンにのってしまい、
割り込みがかかっていたようです。
ノイズといっても非常に低い電圧(80mv)なので、まさかこの程度の電圧が
立ち上がり信号と認識され、割り込みが発生するとは思っていなかったのです。
いやはや、おそろるべし。

ご多忙の中、ご親切に対応頂きありがとうございました。

以上


> #そのような場合は、単純にソフト要因によるバグだと思いますが。。。
> #そのバグがカーネルが元々持っているものなのか、作ったソース部分なのか、
> #または、他の人が作ったアプリケーションなのかはわかりませんが。
>
> よろしくお願い致します。
>
> 以上
>
> On Thu, 16 Oct 2008 17:06:16 +0900
> g-kihara <email@hidden> wrote:
>
>>
>>
>> > 山本です。
>> > いつもお世話になっております。
>> >
>> > #まず、MLで特定の人に対して質問をするのは、
>> > #使い方を間違っているように思います。
>>
>> 失礼しました。申し訳ございません。
>>
>> >
>> > カーネルソースを追っていないので憶測ですが、
>> > 14bit目が1なのは、Lowレベル割り込みだからでは
>> > ないのでしょうか。
>> >
>> >  Lowレベル割り込みでICRが1になる
>> >   ↓
>> >  IMRで割り込み無効なので無視される
>> >   ↓
>> >  何もしないので1のまま
>>
>>
>> この"ICR"は誤記でしょうか?
>> ISRですよね?
>> ご教示頂きありがとうございました。
>>
>> ここでお聞きしたいのですが、
>> IMRで特定の1つのビットだけを割り込み許可したにもかかわらず、
>> 他のビットで割り込みが発生したか、もしくは他の要因
>> (ハード的要因は除く)により、
>> 割り込みハンドラがよばれるという場合はありますか?
>>
>> 以上
>>
>>
>> >
>> > 同様に13bit目が0なのは、Riseエッジにし、
>> > 割り込みを有効にしているからだと思います。
>> >
>> >  Riseエッジ割り込みでICRが1になる
>> >   ↓
>> >  IMRで割り込み有効なので、該当bit変化を拾う
>> >   ↓
>> >  カーネルは変化を認識したらICRを0にする
>> >   ↓
>> >  次の0→1が発生するまでは、ICRに変化なし
>> >
>> > 上記なら、Lowレベル割り込み設定で、
>> > Lowのままだと、ICRの0→1の繰り返しで
>> > 割り込みが延々と発生する現象にも
>> > 辻褄が合うと思います。
>> >
>> > #あくまで憶測ですので、確証を得たいのであれば、
>> > #ソースコードを自分で解析してみて下さい。
>> >
>> > よろしくお願い致します。
>> >
>> > 以上
>> >
>> > On Thu, 16 Oct 2008 15:13:56 +0900
>> > g-kihara <email@hidden> wrote:
>> >
>> >> 山本 様
>> >>
>> >> お世話になっています。
>> >>
>> >> 割り込みハンドラ内で
>> >> ISR(GPIO Interrupt Status Register)レジスタ
>> >> を読み出したところ、
>> >> 0xf5080
>> >> で、14bit目が1, 13bit目が0
>> >> となっていました。
>> >> 動作は期待した動作をしており問題はありませんが、
>> >> GPIO3_14は割り込みピンとして使用していないのに、なぜ1がたっている
>> >> のでしょうか?
>> >> GPIO3_13は割り込みピンとして使用しているのに、割り込み発生時、なぜ0なのか
>> >>
>> >> わかりません。
>> >> 初期処理の中で、以下のようにして、
>> >> 13bit目だけを割り込み許可にしてもやはり結果は同じでした。
>> >>
>> >> --------------------------------------------------------------
>> >>     //MX31_PIN_CSI_D14
>> >>     gpio3_base = (unsigned char *)ioremap(0x53FA4000,0x30);
>> >>
>> >>     // GPIO3 IMR (Interrupt Mask Register)
>> >>     Reg=0x00000000;
>> >>     writel((Reg | 0x01 << 13), gpio3_base + 0x53FA4014 - 0x53FA4000);
>> >> --------------------------------------------------------------
>> >>
>> >>
>> >>
>> >> 以上
>> >>
>> >>
>> >>
>> >> ----- Original Message ----- 
>> >> From: "山本 慎二郎" <email@hidden>
>> >> To: "Armadillo series general discussion list"
>> >> <email@hidden>
>> >> Sent: Wednesday, October 15, 2008 6:17 PM
>> >> Subject: [Armadillo:03548] Re: Armadilo-500 GPIOピンを利用した割り込みについて
>> >>
>> >>
>> >>
>> >>
>> >> > 山本です。
>> >> > いつもお世話になっております。
>> >> >
>> >> > #試していませんので、憶測ですが。。。
>> >> >
>> >> >>     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なので、
>> >> > ノンストップで割り込みが上がってきているように思えます。
>> >> >
>> >> > #割り込みの方が優先順位高いので、request_irq()の関数すら
>> >> > #抜けられていない状態かもしれないですね
>> >> >
>> >> >> ONにすると、割り込みは停止します。
>> >> >
>> >> > とあるので、スイッチ変更でHighになって、LOWレベル割り込みが止まって、 
>> >> > 
>> >> > request_irq()を抜け、set_irq_type()でRISINGに設定できた結果、
>> >> > 以降は正常に動作する、ということなら辻褄が合うと思います。
>> >> >
>> >> > よろしくお願い致します。
>> >> >
>> >> > 以上
>> >> >
>> >> > 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*/);
>> >> >>
>> >>      set_irq_type(INT_GPIO3_13, IRQT_RISING);
>> >>
>> >> >>     request_irq(INT_GPIO3_13, irq_handler, SA_INTERRUPT, "inttest",
>> >> >> NULL);
>> >> >>    >
>> >> >>     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 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 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 メーリングリストの案内