Curto:
Observando o firmware do ATMEGA16U2 ( https://github.com/arduino/ArduinoCore-sam/blob/master/firmwares/atmega16u2/arduino-usbserial/Arduino-usbserial.c ) Acho que, quando você define / altera as configurações do Porta serial emulada USB, o USART é redefinido. Isso acontece mesmo quando você abre o Arduino Serial Monitor (ele deve configurar a velocidade serial, etc.). Isso causa seu pico.
Grandes:
Veja a função:
void EVENT_CDC_Device_LineEncodingChanged(USB_ClassInfo_CDC_Device_t* const CDCInterfaceInfo)
Lá você verá que, após algumas linhas, ele redefine o USART, zerando seus registros:
/* Must turn off USART before reconfiguring it, otherwise incorrect operation may occur */
UCSR1B = 0;
UCSR1A = 0;
UCSR1C = 0;
Na página 168, da folha de dados atual do ATMEGA16U2, você encontrará que, configurando o bit 3 do UCSR1B (TXEN1), você habilita o transmissor, substituindo a operação normal da porta (ou seja, ela se torna saída). Citando a folha de dados:
Escrever este bit em um habilita o transmissor USART. O transmissor substituirá a operação normal da porta do pino TxDn quando ativado. A desativação do transmissor (escrevendo TXENn em zero) não será efetivada até que as transmissões em andamento e pendentes sejam concluídas, ou seja, quando o registro de mudança de transmissão e o registro de buffer de transmissão não contiverem dados a serem transmitidos. Quando desativado, o transmissor não substituirá mais a porta TxDn.
Portanto, ao escrever, UCSR1B = 0;
você não substitui mais o pino TXD1, que atuará como entrada.
O ATMEGA16U2 TXD está conectado à linha RX do ATSAM3X8E. Em operação normal, com o UART ativado, essa linha permanece alta se nenhum dado estiver sendo transmitido. Se você desabilitar o UART, essa linha específica não será mais um driver para 1. Como o código de inicialização não define o pull-up naquele pino (e nem está configurado como saída), o pino se torna uma entrada flutuante e qualquer vazamento para O GND ou mesmo a impedância de entrada da sua sonda (que fica entre o pino e o GND), trará lentamente o nível lógico para 0.
Para substituir esse problema, você deve: 1) Modificar o firmware do ATMEGA16U2, configurando esse PIN como OUTPUT, com o valor 1. 2) Modificar o firmware do ATMEGA16U2, ativando o pull-up nesse pino. 3) (sugerido) Habilite o pull-up na linha RX no ATSAM3X8E.