The V1.20 Teensyduino 9-bit serial support incorrectly implements 9-bit receive, resulting in the 9'th bit being randomly dropped. This is because, per the datasheet, the UART_C3 register must be read before UART_D for it to be valid. So the order of these lines of code in serial1.c, serial2.c, and serial3.c should be reversed:
As in this code (this example is from Serial2.c):
Code:
n = UART1_D;
if (use9Bits && (UART1_C3 & 0x80)) n |= 0x100;
Code:
if (use9Bits && (UART1_C3 & 0x80)) n = 0x100; else n=0;
n += UART1_D;