[Suzaku:01603] Re: SZ410 FPGA側で発生させた割り込み信号がlinux側で認識できない件
mizo
email@hidden
2009年 8月 18日 (火) 13:23:14 JST
溝渕です。
Miyamoto wrote:
> SZ410のデフォルトを元にして、SZ410-SILを参考にカスタマイズしました。
> そのため、JP1をショート時にはinterrupt_initやinterrupt_cleanが呼ばれてい
> ます。
>
> SZ410のデフォルトでは呼ばれないと言う事は、
> FPGAの割り込み信号をlinux側で認識するためにinterrupt_〜系の関数の呼び出
> しは不要という事でしょうか?
> main.cはデフォルトのままでもOSが起動すれば割り込みは有効になると考えてよ
> ろしいでしょうか?
はい。
[SUZAKU]# cat /proc/interrupts
と入力すると、シリアルやLANの割り込みが入っていることを確認できると思い
ます。
> 以下が自作したデバイスドライバの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;
> }
init_module()を以下のようにしてみるとどうなりますか?ちなみにrequest_irq
()の第5引数に値を設定していましたが、割り込みは共有していますか?
ビルドしてみていないので正確なコードではないかもしれませんが試してみてく
ださい。
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 = request_irq(irq, sync_irq, SA_INTERRUPT, sync_device_name, NULL);
if (r < 0) {
printk(KERN_ERR "sync:request_irq failed\n");
goto fail1;
}
r = register_chrdev(sync_major, sync_device_name, &sync_fops);
if (r < 0) {
printk(KERN_ERR "sync: can't get major %d failed\n", r);
goto fail2;
}
spin_lock_init(&sync_spinlock);
return 0;
fail2:
free_irq(irq, NULL);
fail1:
return r;
}
suzaku メーリングリストの案内