[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[microblaze-uclinux] Interrupt rutine



Hi,
I trying work with interrupt controller. but I have problem with return jump from interrupt_handler. Return code is in register R14. I trying study source code from uClinux, but code is very difficult.

What steps are significant to do for correct return from interrupt_handler rutine?


void interrupt_handler(void)
{
   timer_isr(arg)
   count++;
   intc->iar=0xFFFFFFFF;
   microblaze_enable_interrupts();
}

void timer_isr(void *arg){
   timestamp++;
   tmr->control=tmr->control | TIMER_INTERRUPT;
}


Dump part of source code. In R1 is stack but the last instruction (line 12000390 - decreased stack) don't executable.

12000338 <interrupt_handler>:
12000338: 3021ffd0  addik r1, r1, -48
...
1200037c: b0000000  imm 0
12000380: b9f401f4 brlid r15, 500 // 12000574 <microblaze_enable_interrupts>
12000384: 80000000  or r0, r0, r0
12000388: c9e00800  lw r15, r0, r1
1200038c: b60f0008  rtsd r15, 8
12000390: 30210030  addik r1, r1, 48

I need instruction rtid with setting interrupt enable bit in MSR.

This part is in assembler from entry.S but in source code are many macros for resolution.

G_ENTRY(irq):
swi r1, r0, ENTRY_SP; // save stack (emulate v850)
SAVE_STATE (IRQ, r0, ENTRY_SP) // Save registers.

add r5, r0, r0;  // Clear first param
la r6, r1, PTO;  // User regs are arg2
bralid r15, CSYM(handle_irq);
nop;
// fall through
/* Entry point used to return from an interrupt (also used by exception handle s, below). */
ret_from_irq:
RETURN(IRQ)
END(irq)


G_ENTRY and END macro are simple but RETURN and SAVE_STATE is difficult.

#define G_ENTRY(name)             \
  .align 4;              \
  .globl name;              \
  .type  name,@function;            \
  name

#define END(name)             \
  .size  name,.-name


Thanx
Michal Simek




___________________________
microblaze-uclinux mailing list
microblaze-uclinux@xxxxxxxxxxxxxx
Project Home Page : http://www.itee.uq.edu.au/~jwilliams/mblaze-uclinux
Mailing List Archive : http://www.itee.uq.edu.au/~listarch/microblaze-uclinux/