USART IRQ --------- This is a slightly fancier console interface using interrupts. Basically this example sets up the USART for serial input and output as before except that the receive side is interrupt driven. That means you program won't miss a character if it happens to be taking its time printing something at the time. I've demonstrated this by setting it up so that if you type ^C to the program it causes an interrupt to occur that resets the program back to the start. This is done in a slightly tricky way to accomodate the Cortex M architecture. When you are interrupted in the Cortex M, the proccessor goes into "Handler" mode, saves information on the stack, and takes the interrupt. Part of this involves saving a special value on the stack in the LR register. The useful thing is that it means you can write interrupt service routines as regular C code, the not so useful thing is that if you don't return from that stack, the processor gets confused about what state it should be in. So to avoid confusing the processor, the interrupt routine changes where the code will return, then does the return. This pops the processor out of Handler mode and back into Thread mode, at which point the C code can do a longjump. In the future, the C library may be able to note that the processor needs to change state for you, and save the special gymnastics here, but in the mean time this works and will continue to work in the future.