I've tried to write a module to catch interrupts on DIO_11, my code
is here:
http://cs.earlham.edu/~eeap/cvsweb/cvsweb.cgi/eeapnode/module/
eeapnode.c?rev=1.1
I have a switch to test the pulses, which goes 3.3V high when I flip
it. It's connected to DIO_11. But I never recieve an interrupt, and /
proc/stat doesn't show any occurring on IRQ 33.
:eeapnode# insmod -f eeapnode.o
dmesg:
...
eeapnode: /proc/eeapnode created
eeapnode: control pointer acquired (c604f000)
eeapnode: control = 0
eeapnode: setting external IRQ on DIO_11
eeapnode: control = 1
:eeapnode# cat /proc/interrupts
4: 55191 timer
33: 0 eeapnode <-----
39: 475 EP9312_Eth
52: 4132 amba
54: 12 amba
56: 0 usb-ohci
Err: 0
* flipping switch back and forth a couple of times *
:eeapnode# cat /proc/stat
cpu 1386 0 9542 46913
cpu0 1386 0 9542 46913
page 99869 300
swap 0 0
intr 62506 0 0 0 0 57841 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 521 0 0 0 0 0 0 0 0 0 0 0 0 4132 0 12 0 0 0 0
0 0 0 0 0
disk_io:
ctxt 3530
btime 1177092065
processes 391
rmmod, dmesg:
eeapnode: cleanup
eeapnode: control = 1
eeapnode: unsetting external IRQ on DIO_11
eeapnode: control = 0
eeapnode: /proc/eeapnode removed
I have some user space code that polls DIO_11 using mmap, which shows
the pin going high when I flip the switch. Not sure what I'm doing
wrong. Any ideas?
colin
On Apr 19, 2007, at 11:56 AM, Eddie Dawydiuk wrote:
> Hello,
>
>> But I'm not sure what irq to ask for with request_irq() in my kernel
>> module.
>> Does anyone know?
>
> At the end of the TS-7400 documentation your question is answered.
>
> "If you choose to use DMA or IRQ support for the GPBUS, you will
> likely want to write a kernel driver. Simple userspace applications
> can not directly set up interrupt handler functions or translate
> the virtual addresses of process data structures to the physical
> addresses needed by the DMA controller. When writing a kernel
> driver in C, one should be aware of certain details:
> *) To set a handler on the GPBUS IRQ, you must request IRQ #33 and
> allow IRQ sharing (the UART and SD drivers also generate the
> same IRQ). This means calling the request_irq() kernel function
> with SA_SHIRQ in the 'flags' parameter.
> *) To use DMA, you must manipulate the M2M1 EP9302 DMA channel.
> Details
> on its programming can be found in the EP9301 CPU User Manual
> from
> Cirrus Logic at http://www.cirrus.com
> *) To access various registers in arbitrary physical address space,
> use
> the __ioremap() function and not the ioremap() kernel function.
> ioremap() does not expect physical addresses and will apply an
> offset
> to your requested address on the EP9302 ARM Linux kernel.
> *) If you are unable to write a driver yourself, you may consider
> contracting Technologic Systems to write one for you. Often
> times,
> TS engineers can accomodate your requirements for less cost
> than it
> takes to accomplish internally."
>
> Best Regards,
> ______________________________________________________________
> Eddie Dawydiuk, Technologic Systems | voice: (480) 837-5200
> 16610 East Laser Drive Suite 10 | fax: (480) 837-5300
> Fountain Hills, AZ 85268 | web: www.embeddedARM.com
>
>
>
> Yahoo! Groups Links
>
>
>
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/ts-7000/
<*> Your email settings:
Individual Email | Traditional
<*> To change settings online go to:
http://groups.yahoo.com/group/ts-7000/join
(Yahoo! ID required)
<*> To change settings via email:
<*> To unsubscribe from this group, send an email to:
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
|