#include "usart_sync.h" #include "core.h" #define USART_TX PIN_PA04 #define USART_RX PIN_PA05 #define USART_SERCOM SERCOM0 void usart_init(void) { // CLOCKS INIT PCHCTRL if(!SERCOM0->USART.SYNCBUSY.bit.SWRST) { uint32_t mode = SERCOM0->USART.CTRLA.bit.MODE; if(SERCOM0->USART.CTRLA.bit.ENABLE) { SERCOM0->USART.CTRLA.bit.ENABLE = 0; while(SERCOM0->USART.SYNCBUSY.bit.ENABLE); } SERCOM0->USART.CTRLA.reg = mode | SERCOM_USART_CTRLA_SWRST; while(SERCOM0->USART.SYNCBUSY.bit.SWRST || SERCOM0->USART.SYNCBUSY.bit.ENABLE); } while(SERCOM0->USART.SYNCBUSY.bit.SWRST); CRITICAL_SECTION_ENTER(); SERCOM0->USART.CTRLA.bit.MODE = CRITICAL_SECTION_LEAVE(); }