Skip to content
This repository has been archived by the owner on Jan 22, 2022. It is now read-only.

Commit

Permalink
Version 1.19
Browse files Browse the repository at this point in the history
We no longer set interrupt priorities ni the core, so that the
application can choose them itself.
  • Loading branch information
dc42 committed Aug 15, 2017
1 parent bb80505 commit 7647bbf
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 23 deletions.
23 changes: 7 additions & 16 deletions cores/arduino/WInterrupts.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,32 +42,27 @@ static void __initialize()
pmc_enable_periph_clk(ID_PIOA);
NVIC_DisableIRQ(PIOA_IRQn);
NVIC_ClearPendingIRQ(PIOA_IRQn);
NVIC_SetPriority(PIOA_IRQn, pioInterruptPriority);
NVIC_EnableIRQ(PIOA_IRQn);

pmc_enable_periph_clk(ID_PIOB);
NVIC_DisableIRQ(PIOB_IRQn);
NVIC_ClearPendingIRQ(PIOB_IRQn);
NVIC_SetPriority(PIOB_IRQn, pioInterruptPriority);
NVIC_EnableIRQ(PIOB_IRQn);

pmc_enable_periph_clk(ID_PIOC);
NVIC_DisableIRQ(PIOC_IRQn);
NVIC_ClearPendingIRQ(PIOC_IRQn);
NVIC_SetPriority(PIOC_IRQn, pioInterruptPriority);
NVIC_EnableIRQ(PIOC_IRQn);

pmc_enable_periph_clk(ID_PIOD);
NVIC_DisableIRQ(PIOD_IRQn);
NVIC_ClearPendingIRQ(PIOD_IRQn);
NVIC_SetPriority(PIOD_IRQn, pioInterruptPriority);
NVIC_EnableIRQ(PIOD_IRQn);

#ifdef ID_PIOE
pmc_enable_periph_clk(ID_PIOE);
NVIC_DisableIRQ(PIOE_IRQn);
NVIC_ClearPendingIRQ(PIOE_IRQn);
NVIC_SetPriority(PIOE_IRQn, pioInterruptPriority);
NVIC_EnableIRQ(PIOE_IRQn);
#endif
}
Expand All @@ -76,24 +71,20 @@ static void __initialize()
// This needs to be fast. Hopefully the ARM conditional instructions will be used to advantage here.
static unsigned int GetHighestBit(uint32_t bits)
{
unsigned int bitNum = 0;
if (bits >= 0x00010000)
{
bitNum += 16;
}
if ((bits >> bitNum) >= 0x0100)
unsigned int bitNum = (bits >= 0x00010000) ? 16 : 0;
if ((bits >> bitNum) >= 0x0100u)
{
bitNum += 8;
}
if ((bits >> bitNum) >= 0x0010)
if ((bits >> bitNum) >= 0x0010u)
{
bitNum += 4;
}
if ((bits >> bitNum) >= 0x0004)
if ((bits >> bitNum) >= 0x0004u)
{
bitNum += 2;
}
if ((bits >> bitNum) >= 0x0002)
if ((bits >> bitNum) >= 0x0002u)
{
bitNum += 1;
}
Expand All @@ -102,11 +93,11 @@ static unsigned int GetHighestBit(uint32_t bits)

extern "C" void attachInterrupt(uint32_t pin, void (*callback)(void*), uint32_t mode, void *param)
{
static int enabled = 0;
static bool enabled = false;
if (!enabled)
{
__initialize();
enabled = 1;
enabled = true;
}

// Retrieve pin information
Expand Down
8 changes: 4 additions & 4 deletions cores/arduino/wiring_digital.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ extern "C" void pinModeDuet(Pin pin, enum PinMode ulMode, uint32_t debounceCutof
(debounceCutoff == 0) ? 0 : PIO_DEBOUNCE);
if (debounceCutoff != 0)
{
pio_set_debounce_filter(pinDesc.pPort, pinDesc.ulPin, debounceCutoff); // enable debounce filer with specified cutoff frequency
pio_set_debounce_filter(pinDesc.pPort, pinDesc.ulPin, debounceCutoff); // enable debounce filter with specified cutoff frequency
}
break;

Expand All @@ -64,7 +64,7 @@ extern "C" void pinModeDuet(Pin pin, enum PinMode ulMode, uint32_t debounceCutof
(debounceCutoff == 0) ? PIO_PULLUP : PIO_PULLUP | PIO_DEBOUNCE);
if (debounceCutoff != 0)
{
pio_set_debounce_filter(pinDesc.pPort, pinDesc.ulPin, debounceCutoff); // enable debounce filer with specified cutoff frequency
pio_set_debounce_filter(pinDesc.pPort, pinDesc.ulPin, debounceCutoff); // enable debounce filter with specified cutoff frequency
}
break;

Expand All @@ -81,7 +81,7 @@ extern "C" void pinModeDuet(Pin pin, enum PinMode ulMode, uint32_t debounceCutof
(debounceCutoff == 0) ? 0 : PIO_DEBOUNCE);
if (debounceCutoff != 0)
{
pio_set_debounce_filter(pinDesc.pPort, pinDesc.ulPin, debounceCutoff); // enable debounce filer with specified cutoff frequency
pio_set_debounce_filter(pinDesc.pPort, pinDesc.ulPin, debounceCutoff); // enable debounce filter with specified cutoff frequency
}
break;
#endif
Expand Down Expand Up @@ -154,7 +154,7 @@ extern "C" void digitalWrite(Pin pin, bool ulVal)
const PinDescription& pinDesc = g_APinDescription[pin];
if (pinDesc.ulPinType != PIO_NOT_A_PIN)
{
if (ulVal) // we make use of the fact that LOW is zero and HIGH is nonzero
if (ulVal)
{
pinDesc.pPort->PIO_SODR = pinDesc.ulPin;
}
Expand Down
1 change: 0 additions & 1 deletion libraries/RTCDue/RTCDue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ void RTCDue::Init()
// disable RTC alarm interrupts
NVIC_DisableIRQ(RTC_IRQn);
NVIC_ClearPendingIRQ(RTC_IRQn);
NVIC_SetPriority(RTC_IRQn, 8);
}

bool RTCDue::IsDateTimeSet()
Expand Down
2 changes: 0 additions & 2 deletions libraries/Wire/Wire.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -513,7 +513,6 @@ static void Wire_Init(void) {

NVIC_DisableIRQ(TWI1_IRQn);
NVIC_ClearPendingIRQ(TWI1_IRQn);
NVIC_SetPriority(TWI1_IRQn, 6);
NVIC_EnableIRQ(TWI1_IRQn);
}

Expand All @@ -532,7 +531,6 @@ static void Wire1_Init(void) {

NVIC_DisableIRQ(TWI0_IRQn);
NVIC_ClearPendingIRQ(TWI0_IRQn);
NVIC_SetPriority(TWI0_IRQn, 6);
NVIC_EnableIRQ(TWI0_IRQn);
}

Expand Down

0 comments on commit 7647bbf

Please sign in to comment.