Sorry to post a what amounts to a teaser for now, but I'll be working on a more thorough right-up as soon as I can (possibly delayed by a week of hunting...).
I've managed to configure the xmega32e5 as an FSK modem (one chip encode, one chip decode, half-duplex doable pretty easily) capable of transmitting 2Mbps serial data using 4Mhz/8Mhz carriers. There is *zero* external hardware.
The wire between them is short still because it's all on the breadboard, but since my target is differential transmission anyway I think it has a serious chance of working at close to that speed even over some pretty funky wiring.
The short version is:
- two full timers (TCC4 and TCC5) generating 4MHz and 8Mhz 50% square waves go to pins shared with the XCL
- XCL is configured in MUX mode, with either the onboard UART or an external driver passing through LUT1 to determine which wave is transmitted
- receive pin drives an event which is configured to RESET the XCL's timer BTC0
- BTC0 compare is set to a period equivalent to roughly avg(4,8)=6MHz, meaning a high-freq input will leave compare unset while a low-freq input will cause BTC0.OC0 to be set for the last ~1/3 of each input cycle
- XCL is configured in DFF mode, where the receive pin's event selects via MUX whether the D flip-flop is looped back or latched to the OC0 value. This means that at the rising edge of each input cycle, whether or not it was a fast or slow input is latched through until the next cycle == received waveform
It'll really be easier to understand with diagrams, which I'll be working on soon, if for no other reason than the document the pretty arcane settings of the XCL.
I've included a shot of the scope showing the TX, FSK, and RX signals.