[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 メーリングリストの案内