Работающая конфигурация UART -
PM->APBCMASK.reg |= PM_APBCMASK_SERCOM0;
/* Enable peripheral Multiplexer */
PORT->Group[0].PINCFG[6].reg = 0 | 1 * PORT_PINCFG_PMUXEN; // TXD
PORT->Group[0].PINCFG[5].reg = 0 // RXD
| 1 * PORT_PINCFG_INEN
| 1 * PORT_PINCFG_PULLEN
| 1 * PORT_PINCFG_PMUXEN;
/* Peripheral Function D selected */
PORT->Group[0].PMUX[6/2].bit.PMUXE = PORT_PMUX_PMUXE_D_Val; // TXD
PORT->Group[0].PMUX[5/2].bit.PMUXO = PORT_PMUX_PMUXO_D_Val; // RXD
/* Baudrate Register */
uint64_t BaudReg_S0 = (uint64_t)(65536 * (f_cpu - (16 * baud)) / f_cpu);
/* */
GCLK->CLKCTRL.reg = GCLK_CLKCTRL_GEN(0)
| GCLK_CLKCTRL_ID(SERCOM0_GCLK_ID_CORE)
| GCLK_CLKCTRL_CLKEN;
/* */
SERCOM0->USART.CTRLA.reg = 0
| 1 * SERCOM_USART_CTRLA_DORD // Data Order LSB
| SERCOM_USART_CTRLA_TXPO(0x1) // Transmit Data PA6 SERCOM0_PAD[2]
| SERCOM_USART_CTRLA_RXPO(0x1) // Receive Data PA5 SERCOM0_PAD[1]
| SERCOM_USART_CTRLA_SAMPR(0x0) // Sample Rate 16x
| 1 * SERCOM_USART_CTRLA_RUNSTDBY // Run In Standby
| 1 * SERCOM_USART_CTRLA_MODE_USART_INT_CLK; // Operating Mode, Internal Clock
//while(SERCOM0->USART.SYNCBUSY.reg & SERCOM_USART_SYNCBUSY_ENABLE); // synchronization busy
SERCOM0->USART.CTRLB.reg = 0
|SERCOM_USART_CTRLB_CHSIZE(0x0) // Character Size, 8 bits
| 1 * SERCOM_USART_CTRLB_TXEN // TX Enable
| 1 * SERCOM_USART_CTRLB_RXEN; // RX Enable
while(SERCOM0->USART.SYNCBUSY.bit.CTRLB); // synchronization
SERCOM0->USART.BAUD.reg = (uint16_t)BaudReg_S0; // Baudrate value
SERCOM0->USART.CTRLA.reg |= SERCOM_USART_CTRLA_ENABLE; // SERCOM0 peripheral enabled
while(SERCOM0->USART.SYNCBUSY.reg & SERCOM_USART_SYNCBUSY_ENABLE); // synchronization busy
Добавляю такой же конфиг для другого UART -
зависает на последней строке
while(SERCOM2->USART.SYNCBUSY.reg & SERCOM_USART_SYNCBUSY_ENABLE); // synchronization busy
Где я ошибаюсь ?