Hi, Tomahawk:
I think the problem may be related to the fact that you are single stepping through the code.
When stepping through the code, after I put the first byte into the SPDR, the SPRF flags sets immediatly . . .
I would bet that it doesn't set imediatly, but that it is setting after the first transfer takes place. It appears imediate because you are stepping.
. . . but no matter what the next line of code is, the SPRF clears without my Rx interrupt being serviced.
I suspect that, because you are stepping, the debugger is reading the registers in order to display them, and that is clearing the receive flag.
What I would do is this:
Load the first byte into the SPDR.
Wait for SPTE, and then load the second byte into the SPDR.
Now wait for the SPRF bit to set from the first byte, and read SPDR to fetch the data.
Wait for the SPRF bit to set from the second byte, and read SPDR to get that data.
But if you try to step through this routine, you will get an overflow. You cannot breakpoint between the time that you load the second transmitted byte into the SPDR until after you have read the first received byte from the SPDR.
hope that helps.