Hello there,
I'm trying to handle a timer interrupt within the at91 processor...
The Problem is: nothing happens, my interrupt handler is never called...
Maybe someone here knows about the at91...
this is my setup routine:
static int __init ad_irq_init(void)
{
unsigned int ret;
printk(KERN_INFO "init timer");
// unsigned int base, unsigned int reg_offset, unsigned long value
// disable clock:
printk(KERN_INFO "ccr: %i\n", (unsigned int)at91_sys_read(AT91_TC_CCR)
);
at91_sys_write(AT91_TC_CCR, (at91_sys_read(AT91_TC_CCR) | 2) );
printk(KERN_INFO "ccr: %i\n", (unsigned int)at91_sys_read(AT91_TC_CCR)
);
// disable all interrupts:
at91_sys_write(AT91_TC_IDR, 0xFFFFFFFF );
// enable timer clock 5, reset counter and start clock
at91_sys_write(AT91_TC_CMR, 0x4 | 0x4000 );
// enable clock :
at91_sys_write(AT91_TC_CCR, 0x1 );
// Enables the RC Compare Interrupt. :
at91_sys_write(AT91_TC_IER, 0x10 );
// set isr
//at91_sys_write( AT91_AIC_SVR(6), timer_interrupt);
// setup_irq(AT91_ID_TC0, &timer_interrupt);
if (request_irq(AT91_ID_TC0, (void *)ad_irq_interrupt, SA_INTERRUPT
,AD_IRQ_DEVICE_NAME, NULL)) {
printk(KERN_ERR "ad_irq: irq alrdy claimed!\n");
return -EIO;
}
// write something to timer register c (taken from sample code without
OS
support):
at91_sys_write( AT91_TC_RC , 0xFBC5 );
at91_sys_write(AT91_TC_CCR , 0x4 );
// set capture mode:
at91_sys_write(AT91_TC_CMR, (0 << 15) );
return 0;
}
when i load the kernel module, it works fine (except that nothing
happens...).
When i do unload dmesg says:
Trying to free free IRQ17
ad_irq module removed.
then i do:
cat /proc/interrupts
Segmentation fault
dmesg
Unable to handle kernel paging request at virtual address bf09e144
pgd = c1510000
[bf09e144] *pgd=21988011, *pte=00000000, *ppte=00000000
Internal error: Oops: 7 [#1]
Modules linked in: at91_wdt vfat fat jffs2 nls_iso8859_1 nls_cp437 nls_base
usb_ storage sd_mod sg scsi_mod dnp9200
cfi_cmdset_0001 cfi_probe cfi_util gen_probe
chipreg mtdblock mtd_blkdevs mtdchar mtdpart mtdcore unix af_packet
zlib_inflate zlib_deflate intermodule
CPU: 0
PC is at strnlen+0x1c/0x44
LR is at vsnprintf+0x310/0x5a4
pc : [<c00b846c>] lr : [<c00b8fac>] Tainted: P
sp : c1443e64 ip : c1443e74 fp : c1443e70
r10: c1518fff r9 : c151805a r8 : 00000000
r7 : ffffffff r6 : c1443ed0 r5 : bf09e144 r4 : c151805c
r3 : c0156fb4 r2 : bf09e144 r1 : fffffffe r0 : bf09e144
Flags: Nzcv IRQs off FIQs on Mode SVC_32 Segment user
Control: C000317F Table: 21510000 DAC: 00000015
Process cat (pid: 875, stack limit = 0xc1442198)
Stack: (0xc1443e64 to 0xc1444000)
3e60: c1443eb4 c1443e74 c00b8fac c00b8460 0000000a 0000000a
ffffffff
3e80: 00000000 00000fa6 c014fe07 c0684360 00000011 c0684360 80000013
000411c0
3ea0: 00000000 00002000 c1443ec8 c1443eb8 c0086fc0 c00b8cac c1ac7b20
c1443f00
3ec0: c1443ed8 c001c74c c0086f98 c014fe04 bf09e144 0000005a 30555043
00002000
3ee0: c1443f00 c1443f18 0000004a c0684360 c1443f18 c1443f50 c1443f04
c00869d0
3f00: c001c698 c0684370 c0684378 c0684380 c1443f78 c0627120 00000011
00000000
3f20: 00000010 00000000 c0627120 000411c0 c1443f78 00002000 c1442000
c1442000
3f40: 0003a804 c1443f74 c1443f54 c0066d8c c008675c c0627140 c0627120
c1443f78
3f60: 00000000 00000000 c1443fa4 c1443f78 c0067110 c0066ce0 00000000
00000000
3f80: 00000000 00002000 00002000 000411c0 00000003 c001be64 00000000
c1443fa8
3fa0: c001bcc0 c00670d4 00002000 00002000 00000003 000411c0 00002000
00002000
3fc0: 00002000 00002000 000411c0 00000003 00000001 00000003 0003a804
ffffffff
3fe0: 00000000 becc5d38 00003744 400c6fd0 60000010 00000003 0003a230
000315e4
Backtrace:
[<c00b8450>] (strnlen+0x0/0x44) from [<c00b8fac>] (vsnprintf+0x310/0x5a4)
[<c00b8c9c>] (vsnprintf+0x0/0x5a4) from [<c0086fc0>] (seq_printf+0x3c/0x64)
[<c0086f84>] (seq_printf+0x0/0x64) from [<c001c74c>]
(show_interrupts+0xc4/0x13c )
r3 = 0000005A r2 = BF09E144 r1 = C014FE04
r4 = C1AC7B20
[<c001c688>] (show_interrupts+0x0/0x13c) from [<c00869d0>]
(seq_read+0x284/0x3dc )
r7 = C1443F18 r6 = C0684360 r5 = 0000004A r4 = C1443F18
[<c008674c>] (seq_read+0x0/0x3dc) from [<c0066d8c>] (vfs_read+0xbc/0x174)
[<c0066cd0>] (vfs_read+0x0/0x174) from [<c0067110>] (sys_read+0x4c/0x74)
r8 = 00000000 r7 = 00000000 r6 = C1443F78 r5 = C0627120
r4 = C0627140
[<c00670c4>] (sys_read+0x0/0x74) from [<c001bcc0>]
(ret_fast_syscall+0x0/0x2c)
r8 = C001BE64 r7 = 00000003 r6 = 000411C0 r5 = 00002000
r4 = 00002000
Code: e2411001 e3710001 e1a02000 0a000007 (e5d23000)
Maybe someone can help me on this issue or point me at an misstake? Maybe I
missunderstood the at91_sys_write() function?
Cheers,
Ole
--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to [email protected]
Please read the FAQ at http://kernelnewbies.org/FAQ