diff --git a/cores/arduino/SERCOM.cpp b/cores/arduino/SERCOM.cpp index 2d31c24588fcd1c52c924369c528689b4a09c3ca..16670b8f1c1e7ff3a58e3e82188ea7b7d2536fc8 100644 --- a/cores/arduino/SERCOM.cpp +++ b/cores/arduino/SERCOM.cpp @@ -20,8 +20,7 @@ SERCOM::SERCOM(Sercom* s) void SERCOM::initUART(SercomUartMode mode, SercomUartSampleRate sampleRate, uint32_t baudrate) { resetUART(); - initClock(); - initNVIC(); + initClockNvic(); //Setting the CTRLA register sercom->USART.CTRLA.reg = SERCOM_USART_CTRLA_MODE(mode) | @@ -154,6 +153,7 @@ int SERCOM::writeDataUART(uint8_t data) void SERCOM::initSPI(SercomSpiTXPad mosi, SercomRXPad miso, SercomSpiCharSize charSize, SercomDataOrder dataOrder) { resetSPI(); + initClockNvic(); //Setting the CTRLA register sercom->SPI.CTRLA.reg = SERCOM_SPI_CTRLA_MODE(SPI_MASTER_OPERATION) | @@ -493,35 +493,46 @@ uint8_t SERCOM::readDataWIRE() } -void SERCOM::initClock() +void SERCOM::initClockNvic() { uint8_t clockId = 0; + IRQn_Type Id; if(sercom == SERCOM0) { clockId = GENERIC_CLOCK_SERCOM0; + Id = SERCOM0_IRQn; } else if(sercom == SERCOM1) { clockId = GENERIC_CLOCK_SERCOM1; + Id = SERCOM1_IRQn; } else if(sercom == SERCOM2) { clockId = GENERIC_CLOCK_SERCOM2; + Id = SERCOM2_IRQn; } else if(sercom == SERCOM3) { clockId = GENERIC_CLOCK_SERCOM3; + Id = SERCOM3_IRQn; } else if(sercom == SERCOM4) { clockId = GENERIC_CLOCK_SERCOM4; + Id = SERCOM4_IRQn; } else if(sercom == SERCOM5) { clockId = GENERIC_CLOCK_SERCOM5; + Id = SERCOM5_IRQn; } + //Setting NVIC + NVIC_EnableIRQ(Id); + NVIC_SetPriority (Id, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority */ + //Setting clock GCLK->CLKCTRL.reg = GCLK_CLKCTRL_ID( clockId ) | // Generic Clock 0 (SERCOMx) GCLK_CLKCTRL_GEN_GCLK0 | // Generic Clock Generator 0 is source @@ -534,39 +545,6 @@ void SERCOM::initClock() } } -void SERCOM::initNVIC() -{ - IRQn_Type Id; - - if(sercom == SERCOM0) - { - Id = SERCOM0_IRQn; - } - else if(sercom == SERCOM1) - { - Id = SERCOM1_IRQn; - } - else if(sercom == SERCOM2) - { - Id = SERCOM2_IRQn; - } - else if(sercom == SERCOM3) - { - Id = SERCOM3_IRQn; - } - else if(sercom == SERCOM4) - { - Id = SERCOM4_IRQn; - } - else if(sercom == SERCOM5) - { - Id = SERCOM5_IRQn; - } - - NVIC_EnableIRQ(Id); - NVIC_SetPriority (Id, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority */ -} - /* ========================= * ===== SERCOM DEFINITION * ========================= diff --git a/cores/arduino/SERCOM.h b/cores/arduino/SERCOM.h index 132e60fa1830a0dc433202af060425e9f2da9d4c..8a1f9bd5d12a782b5c80541f42069af2b5197f57 100644 --- a/cores/arduino/SERCOM.h +++ b/cores/arduino/SERCOM.h @@ -198,7 +198,7 @@ class SERCOM Sercom* sercom; uint8_t calculateBaudrateSynchronous(uint32_t baudrate); uint32_t division(uint32_t dividend, uint32_t divisor); - void initClock(); + void initClockNvic(); void initNVIC(); };