This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

How to debug an isr?

Hi!

I have written a simple uart driver for the nordic bRF24E1 (8051 with intergrated rf) and somehow i do not seem to be able to debug my interrupt service routine.

EA is set to 1 and Serial Interrupt is enabled but when i set a breakpoint inside the isr the debugger will not stop at the breakpoint.

The isr is triggered however. I know it because there seems to be a bug in my isr (stack is messed up) which only occurs when EA = 1. As soon as i disable interrupts the bug goes away. So isr is triggered but i can not debug it because tracing into the isr doesn't seem to be possible.

So how can i debug interupt-service-routines with the integrated debugger?

Regards

Christian

Parents
  • "Exactly - so what would happen if one of the other interrupts was triggered unintentionally...?

    The CPU would of course vector to an adress where it assumes that an isr would be, although there isn't one. Thats one thing which i haven't considered at all. I feel quite stupid at the moment :-(. I will see into this.

    IE = 0x90 however (According to the Watch Window). Therefore only EA and Serial Interrupt are enabled.

    How do i set breakpoints on the interrupt vectors?

    Regards

    Jeff

Reply
  • "Exactly - so what would happen if one of the other interrupts was triggered unintentionally...?

    The CPU would of course vector to an adress where it assumes that an isr would be, although there isn't one. Thats one thing which i haven't considered at all. I feel quite stupid at the moment :-(. I will see into this.

    IE = 0x90 however (According to the Watch Window). Therefore only EA and Serial Interrupt are enabled.

    How do i set breakpoints on the interrupt vectors?

    Regards

    Jeff

Children
  • Jeff,

    Please don't change your name mid-thread. It's very confusing.

    Why dont you post the minimum complete program that demonstrates the problem? We're fishing in the dark a bit here.

    Stefan

  • What I always do is to have an ISR for each and every possible interrupt source. I have seen the above way too often.
    Unused ISRs simply call ICrash() which is a do nothing routine there for enabling breakpointing all unused ISRs in one place.

    Do this and your eyes will open as to the actual nature of your problem.

    IE = 0x90 however (According to the Watch Window). Therefore only EA and Serial Interrupt are enabled.
    With 11 interrupt sources (I saw that in the thread) there MUST be another interrupt enable SFR (IE1 ?) so the "only" above beg a question mark.

    Erik

  • In the meantime i have found what caused my problem. I have assigned the wrong interrupt number to my routine. So during the interrupt the processor switched to the correct code location but there was no interrupt routine.

    ASs simple as that. Very enlighting but i feel rather stupid now ;-)

    Thanks for your help

    Regards Christian