82xx IRQ handling
Hi everybody,
I am trying to setup an IRQ handler for IRQ4:
#define IRQ SIU_INT_IRQ4
volatile cpm2_map_t *immap;
int irq_flags = 0;
immap = (cpm2_map_t *)CPM_MAP_ADDR;
immap->im_intctl.ic_simrh &= ~(0x0800);
request_irq(IRQ,
&irq_handler, /* our handler */
irq_flags,
"interrupt_test",
NULL);immap->im_intctl.ic_simrh |= 0x0800;
I can see on a scope that IRQ line pulls up/down but handler get never called. I am sure I made some very stupid mistake here but I will really appreciate if somebody can help me with this.
Thank you
Dmytro
Quoted 1 line · Dmytro Bablinyuk
immap->im_intctl.ic_simrh&= ~(0x0800);
You should not be messing around with this register in your code. The generic 82xx interrupt functions will properly manage this for you.
Quoted 5 lines
request_irq(IRQ,
&irq_handler, /* our handler */ irq_flags, "interrupt_test", NULL);
This is all you should do.
Thanks.
-- Dan
Quoted 7 lines
Quoted 2 lines
immap->im_intctl.ic_simrh&= ~(0x0800);You should not be messing around with this register in your code. The generic 82xx interrupt functions will properly manage this for you.
Thank you Dan,
It's working now!
By the way question - shall I program somewhere an edge of the IRQ or it always triggers on the rising edge?
Also does anybody knows any source code example of using 82xx General Purpose Timer Unit so that it triggers interrupt handler after some period.
Thank you
Quoted 10 lines · Dmytro Bablinyuk
Quoted 4 lines
Quoted 1 line
immap->im_intctl.ic_simrh&= ~(0x0800);You should not be messing around with this register in your code. The generic 82xx interrupt functions will properly manage this for you.
Thank you Dan,
It's working now!By the way question - shall I program somewhere an edge of the IRQ or it always triggers on the rising edge?
Also does anybody knows any source code example of using 82xx General Purpose Timer Unit so that it triggers interrupt handler after some period.
The IRQ pins are set to edge trigger by default.
- kumar