Skip to content

Commit

Permalink
[stm32] i2c irq priority can be set
Browse files Browse the repository at this point in the history
  • Loading branch information
wald-zat authored and victorandrehc committed Mar 12, 2024
1 parent 9496060 commit b82a906
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 8 deletions.
10 changes: 5 additions & 5 deletions src/modm/platform/i2c/stm32-extended/i2c_master.cpp.in
Original file line number Diff line number Diff line change
Expand Up @@ -513,7 +513,7 @@ MODM_ISR(I2C{{ id }}_ER)
// ----------------------------------------------------------------------------

void
modm::platform::I2cMaster{{ id }}::initializeWithPrescaler(uint32_t timingRegisterValue)
modm::platform::I2cMaster{{ id }}::initializeWithPrescaler(uint32_t timingRegisterValue, uint8_t isrPriority)
{
Rcc::enable<Peripheral::I2c{{id}}>();

Expand Down Expand Up @@ -557,19 +557,19 @@ modm::platform::I2cMaster{{ id }}::initializeWithPrescaler(uint32_t timingRegist

%% if shared_irq
// Enable Interrupt
NVIC_SetPriority({{ shared_irq }}_IRQn, 10);
NVIC_SetPriority({{ shared_irq }}_IRQn, isrPriority);
NVIC_EnableIRQ({{ shared_irq }}_IRQn);
%% elif single_interrupt
// Enable Interrupt
NVIC_SetPriority(I2C{{ id }}_IRQn, 10);
NVIC_SetPriority(I2C{{ id }}_IRQn, isrPriority);
NVIC_EnableIRQ(I2C{{ id }}_IRQn);
%% else
// Enable Error Interrupt
NVIC_SetPriority(I2C{{ id }}_ER_IRQn, 10);
NVIC_SetPriority(I2C{{ id }}_ER_IRQn, isrPriority);
NVIC_EnableIRQ(I2C{{ id }}_ER_IRQn);

// Enable Event Interrupt
NVIC_SetPriority(I2C{{ id }}_EV_IRQn, 10);
NVIC_SetPriority(I2C{{ id }}_EV_IRQn, isrPriority);
NVIC_EnableIRQ(I2C{{ id }}_EV_IRQn);
%% endif

Expand Down
6 changes: 3 additions & 3 deletions src/modm/platform/i2c/stm32-extended/i2c_master.hpp.in
Original file line number Diff line number Diff line change
Expand Up @@ -99,12 +99,12 @@ public:
*/
template<class SystemClock, baudrate_t baudrate=kBd(100), percent_t tolerance=pct(5)>
static void
initialize()
initialize(uint8_t isrPriority = 10u)
{
constexpr std::optional<uint32_t> timingRegisterValue = calculateTimings<SystemClock, baudrate, tolerance>();
static_assert(bool(timingRegisterValue), "Could not find a valid clock configuration for the requested baudrate");

initializeWithPrescaler(timingRegisterValue.value());
initializeWithPrescaler(timingRegisterValue.value(), isrPriority);
}

static bool
Expand All @@ -118,7 +118,7 @@ public:

private:
static void
initializeWithPrescaler(uint32_t timingRegisterValue);
initializeWithPrescaler(uint32_t timingRegisterValue, uint8_t isrPriority = 10u);

%% if shared_irq
friend void ::{{ shared_irq }}_IRQHandler();
Expand Down

0 comments on commit b82a906

Please sign in to comment.