我正在尝试在Arduino due上创建NVIC中断。我需要4个来自按钮的外部中断,但除了NVIC中断外,使用任何其他中断都有问题。首先,我可以使用PMC_PCER0来处理所有4个中断吗?其次,我可以在同一个端口上进行多个中断吗?是否只需调用一次NVIC(PIOB_IRQn)即可启用所有中断?最后,是否有更好的方法和寄存器用于Arduino due (sam3x8e)上的外部中断。
void configure_ext_int_1(){
PMC->PMC_PCER0 |= 1 << ID_PIOB; // Enable Clock for PIOB - needed for sampling falling edge
PIOB->PIO_PER = PIO_PB27; // Enable IO pin control
PIOB->PIO_ODR = PIO_PB27;
PIOB->PIO_PUER = PIO_PB27; // Enable pull-up
PIOB->PIO_IFER = PIO_PB27; /
PIOB->PIO_DIFSR = PIO_PB27; // Select Debouncing filter
PIOB->PIO_SCDR = 0x4FF; // Set Debouncing clock divider
PIOB->PIO_AIMER = PIO_PB27;
PIOB->PIO_ESR = PIO_PB27;
PIOB->PIO_FELLSR = PIO_PB27;
PIOB->PIO_IER = PIO_PB27;
NVIC_EnableIRQ(PIOB_IRQn);
}发布于 2019-05-22 12:00:29
我已经选择使用SAM3X8E可用的asf函数。我不确定这是否会同时在所有4个端口上工作。
void enable_NVIC_interrupts(){
// PORT A NVIC
pmc_enable_periph_clk(ID_PIOA);
pio_set_input(PIOA, PIO_PA29, PIO_PULLUP;
pio_handler_set(PIOA, ID_PIOC, PIO_PA29, PIO_IT_EDGE, int_RINGMODULATOR);
pio_enable_interrupt(PIOA, PIO_PA29);
NVIC_EnableIRQ(PIOA_IRQn);
// PORT B NVIC
pmc_enable_periph_clk(ID_PIOB);
pio_set_input(PIOB, PIO_PB25, PIO_PULLUP;
pio_handler_set(PIOB, ID_PIOB, PIO_PB25, PIO_IT_EDGE, int_TREMOLO);
pio_enable_interrupt(PIOB, PIO_PB25);
NVIC_EnableIRQ(PIOB_IRQn);
// PORT C NVIC
pmc_enable_periph_clk(ID_PIOC);
pio_set_input(PIOC, PIO_PC22, PIO_PULLUP;
pio_handler_set(PIOC, ID_PIOC, PIO_PC22, PIO_IT_EDGE, int_DISTORTION);
pio_enable_interrupt(PIOC, PIO_PC22);
NVIC_EnableIRQ(PIOC_IRQn);
// PORT D NVIC
pmc_enable_periph_clk(ID_PIOD);
pio_set_input(PIOD, PIO_PD7, PIO_PULLUP;
pio_handler_set(PIOD, ID_PIOD, PIO_PD7, PIO_IT_EDGE, int_REVERB);
pio_enable_interrupt(PIOD, PIO_PD7);
NVIC_EnableIRQ(PIOD_IRQn);https://stackoverflow.com/questions/56196903
复制相似问题