[Suzaku:01601] Re: SZ410 FPGA側で発生させた割り込み信号がlinux側で認識できない件

Miyamoto email@hidden
2009年 8月 18日 (火) 12:05:57 JST


溝渕様
アーツテックラボの宮本です。
お世話になっています。
ご回答ありがとうございます。

> "割り込みのペクタテーブルをクリア"というのは、interrupt_clean()のことで
> しょうか?

はい。

> これは、SILのプロジェクトでなければ呼ばれませんし、SILのプロジェクトの割
> り込み番号0〜5はすでに使用されています。
>
> FPGAプロジェクトは、SZ410のデフォルからカスタマイズしましたか?SZ410-SIL
> からですか?

SZ410のデフォルトを元にして、SZ410-SILを参考にカスタマイズしました。
そのため、JP1をショート時にはinterrupt_initやinterrupt_cleanが呼ばれています。 


SZ410のデフォルトでは呼ばれないと言う事は、
FPGAの割り込み信号をlinux側で認識するためにinterrupt_〜系の関数の呼び出しは不要という事でしょうか?
main.cはデフォルトのままでもOSが起動すれば割り込みは有効になると考えてよろしいでしょうか?

> あと、意図したxparametersがincludeされているかを確認するために、上書きし
> たxparametersの中に、
> #warning [任意のメッセージ]
> を挿入して、ビルド時にメッセージが表示されるかを確認してみてください。

ビルド時にメッセージが表示されました。

以下が自作したデバイスドライバのrequest_irq()を呼んでいる部分、並びにハンドラのソースです。

よろしくお願いします。

//変数
static char sync_device_name[] = "sync";
static int irq = 3;
static char *id = "Sync SCI interrupt";
//ハンドラ
static void sync_irq(int irq, void *dev_id, struct pt_regs *regs)
{
 printk("!\n");
}
//ドライバのインストール
int init_module(void)
{
 int r;

 printk("sync: start driver\n");

 sync_addr = (void *)ioremap_nocache(SYNC_BASE + 4, 1);
 sync_addrW = (void *)ioremap_nocache(SYNC_BASE, 1);

 r = register_chrdev(sync_major, sync_device_name, &sync_fops);
 if (r < 0) {
  printk("sync: can't get major %d failed\n", r);
 }
 spin_lock_init(&sync_spinlock);

 if (request_irq(irq, sync_irq, 0, sync_device_name, id)) {
  printk("sync:request_irq failed\n");
 }

 return 0;
}




suzaku メーリングリストの案内