I implemented an extrenal interrupt, which is configured as followed:
Code: Select all
static EXTConfig extern_interrupt_config = { {
{EXT_CH_MODE_DISABLED, NULL},
{EXT_CH_MODE_DISABLED, NULL},
{EXT_CH_MODE_DISABLED, NULL},
{EXT_CH_MODE_DISABLED, NULL},
{EXT_CH_MODE_DISABLED, NULL},
{EXT_CH_MODE_DISABLED, NULL},
{EXT_CH_MODE_DISABLED, NULL},
{EXT_MODE_GPIOC | EXT_CH_MODE_RISING_EDGE | EXT_CH_MODE_AUTOSTART, adc_sync_callback}, /* Pin PC7 */
{EXT_CH_MODE_DISABLED, NULL},
{EXT_CH_MODE_DISABLED, NULL},
{EXT_CH_MODE_DISABLED, NULL},
{EXT_CH_MODE_DISABLED, NULL},
{EXT_CH_MODE_DISABLED, NULL},
{EXT_CH_MODE_DISABLED, NULL},
{EXT_CH_MODE_DISABLED, NULL},
{EXT_CH_MODE_DISABLED, NULL},
{EXT_CH_MODE_DISABLED, NULL},
{EXT_CH_MODE_DISABLED, NULL},
{EXT_CH_MODE_DISABLED, NULL},
{EXT_CH_MODE_DISABLED, NULL},
{EXT_CH_MODE_DISABLED, NULL},
{EXT_CH_MODE_DISABLED, NULL},
{EXT_CH_MODE_DISABLED, NULL}
} };The callback function:
Code: Select all
void adc_sync_callback (EXTDriver *ext_driver, expchannel_t channel){
(void)ext_driver;
(void)channel;
chSysLockFromISR();
Do_Someting();
extChannelDisableI(&EXTD1, 7);
chSysUnlockFromISR();
}The "execution" in the main programm:
Code: Select all
extStart(&EXTD1, &extern_interrupt_config);
extChannelEnable(&EXTD1, 7);The extrenal interrupt works, but it is executed twice. I tried to set the interrupt pending bit to 1 (as stated in the reference manuel on page 388) by
Code: Select all
EXTI->PR |= 0x00000010;How can I achive a single execution?
BR Skadi