I have a button attached to INT0, when pressed jumps into the ISR for INT0
Rephrase that to- I have a button attached to INT0, when pressed notifies may main loop that a button was pressed
Is that correct?
Yes. Interrupts are disabled by hardware when the avr decides to process an interrupt. Interrupt flags will still get set , though.
In there it shows to the user a small menu where some parameter can be set
When you are in the isr, all other isr's are blocked (isr's are now disabled), so when your user decides to change a setting, he could take 10 minutes to fiddle around with your menu, all the while nothing else happens- all other interrupts will not run. Maybe INT0 is your only interrupt for now, but lets say you also have an RX isr , or a timer isr keeping track of time- these are now all halted while stuck in your INT0 isr waiting for a user to complete your menu- no more RX characters received, no more updating of time, etc.
Here's what happens when one tries to get clever by re-enabling interrupts inside interrupts-
INT0 irq fires- about ~18 registers get pushed (saved) on the stack
you are in INT0
you enable irq's inside
button gets pressed- button probably bounces a few time (lookup button bounce)
INT0 fires again- another 18 registers pushed on the stack
second bounce- repeat- another 18
(stack is growing down and eventually will run into your data)
lets stop here, no need to go any farther- where am I in your menu system now?- did I even get into the menu with the second bounce, or did I exit the menu?
You could spend some time to analyze what is actually happening (the above is probably incorrect to some degree)- but you will end up concluding its bad idea because you really cannot determine what is happening- add a few more isr's and it becomes even more difficult.
I'm sure others can explain better.