You might find this message board thread helpful. Your XIRQ ISR is probably not set up correctly and when an XIRQ interrupt happens, the microcontroller goes off into "bogus territory" where there are BGND instructions. Check your interrupt vector for the XIRQ, which should be at your vector base + $F4, which is usually $FFF4 unless you've messed with the IVBR register. Check that the location that $FFF4 points to is your XIRQ ISR.
If you are using Freescale Codewarrior, you can use the bin/Project.abs.s19 file to look at the contents of $FFF4, and you can use the bin/Project.map to check where your XIRQ ISR is put. Be aware of banking issues. You might want to have your XIRQ ISR look like this:
#pragma push#pragma CODE_SEG __NEAR_SEG NON_BANKEDinterrupt void __near XIRQ_ISR(){ //code here}#pragma pop That way the ISR will not be placed in banked memory and therefore the ISR can be addressed using only two bytes, which means it can fit in $FFF4..$FFF5.