Hello,
I'm unable to get the EIC to work on my MKR1000 using SAMD21 (have been at it since the past two days). I've used the following two posts as reference to enable EIC on D0 which is PA22.
1.) Enable Alternate Pins for Interrupts - #7 by gavinremme
2.) SAMD-Projects/app.c at master · ArmstrongSubero/SAMD-Projects · GitHub
According to the variant.cpp file, D0 has EXTINT6. I've shared the code below.
const int redPin = 3;
const int bluePin = 1;
const int greenPin = 2;
bool check = false;
void setup()
{
// Set D1 (PA23), D2 (PA10), D3 (PA11) as output. Same as pinMode
PORT->Group[PORTA].DIRSET.reg = PORT_PA11;
PORT->Group[PORTA].DIRSET.reg = PORT_PA23;
PORT->Group[PORTA].DIRSET.reg = PORT_PA10;
// Enable EIC
enable_EIC();
// Disable external interrupt controller
NVIC_DisableIRQ(EIC_IRQn);
// Clear any pending device specific IRQn
NVIC_ClearPendingIRQ(EIC_IRQn);
// Set interrupt priority
NVIC_SetPriority(EIC_IRQn, 0);
// Enabling Interrupt
NVIC_EnableIRQ(EIC_IRQn);
analogWrite(redPin, 100);
analogWrite(bluePin, 0);
analogWrite(greenPin, 10);
}
void loop()
{
}
void enable_EIC()
{
PORT->Group[PORTA].PINCFG[22].bit.INEN = 1;
PORT->Group[PORTA].PINCFG[22].bit.PULLEN = 1;
PORT->Group[PORTA].PINCFG[22].bit.PMUXEN = 1;
PORT->Group[PORTA].PMUX[22 >> 1].reg |= PORT_PMUX_PMUXE_A;
// Enable GCLK for IEC (External Interrupt Controller)
GCLK->CLKCTRL.reg = (uint16_t) (GCLK_CLKCTRL_CLKEN | GCLK_CLKCTRL_GEN_GCLK0 | GCLK_CLKCTRL_ID(GCM_EIC));
while (GCLK->STATUS.bit.SYNCBUSY);
// Enable EIC
EIC->CTRL.bit.ENABLE = 1;
while (EIC->STATUS.bit.SYNCBUSY == 1) { }
EIC->WAKEUP.bit.WAKEUPEN6 = 1;
EIC->INTENSET.bit.EXTINT6 = 1;
// Rising edge detection
// Filter 7 enable
// config 0 for EXTINT 0-7 and config 1 for EXTINT 8-15
EIC->CONFIG[0].reg |= EIC_CONFIG_SENSE7_RISE | EIC_CONFIG_FILTEN7;
}
void EIC_Handler(void)
{
Serial.println("Hello");
analogWrite(redPin, 0);
analogWrite(bluePin, 155);
analogWrite(greenPin, 0);
EIC->INTFLAG.bit.EXTINT6 = 1;
// if ((EIC->INTFLAG.reg & PORT_PB11) != 0)
// {
//
//
// // Clear interrupt flag
// EIC->INTFLAG.reg = PORT_PB11;
// }
}
Thanks a lot for the help.