Gast
#6679498
Hi,
ich versuche gerade erfolglos, bei einem ATSAMD51 einen externen
Interrupt abzufragen (genau IRQ0 für PB05 und PB06). Das erzeugt mir
ATMEL Start als Initialisierungscode:
void EXTERNAL_IRQ_0_init(void)
{
hri_gclk_write_PCHCTRL_reg(GCLK, EIC_GCLK_ID, CONF_GCLK_EIC_SRC |
(1 << GCLK_PCHCTRL_CHEN_Pos));
hri_mclk_set_APBAMASK_EIC_bit(MCLK);
// Set pin direction to input
gpio_set_pin_direction(CLKY, GPIO_DIRECTION_IN);
gpio_set_pin_pull_mode(CLKY,
// <y> Pull configuration
// <id> pad_pull_config
// <GPIO_PULL_OFF"> Off
// <GPIO_PULL_UP"> Pull-up
// <GPIO_PULL_DOWN"> Pull-down
GPIO_PULL_OFF);
gpio_set_pin_function(CLKY, PINMUX_PA05A_EIC_EXTINT5);
// Set pin direction to input
gpio_set_pin_direction(SYNCY, GPIO_DIRECTION_IN);
gpio_set_pin_pull_mode(SYNCY,
// <y> Pull configuration
// <id> pad_pull_config
// <GPIO_PULL_OFF"> Off
// <GPIO_PULL_UP"> Pull-up
// <GPIO_PULL_DOWN"> Pull-down
GPIO_PULL_OFF);
gpio_set_pin_function(SYNCY, PINMUX_PA06A_EIC_EXTINT6);
ext_irq_init();
}
Meine ISRs sehen so aus (gleichnamige Funktionen innerhalb des
ATMEL-Start-Codes habe ich entfernt):
void EIC_5_Handler(void)
{
if(EIC->INTFLAG.reg & (1<<5))
{
EIC->INTFLAG.reg=(1<<5);
}
else
{
/* spurious interrupt?, clear all interrupt flags */
EIC->INTFLAG.reg = EIC->INTFLAG.reg; /* clear all EIC
interrupt flags */
}
}
void EIC_6_Handler(void)
{
if(EIC->INTFLAG.reg & (1<<6))
{
EIC->INTFLAG.reg = (1<<6);
}
else
{
/* spurious interrupt?, clear all interrupt flags */
EIC->INTFLAG.reg = EIC->INTFLAG.reg; /* clear all EIC
interrupt flags */
}
}
Mein Problem: keine der ISRs wird jemals angesprungen, noch nicht mal
ein einziges mal. Ein Hardwaresignal ist vorhanden, in ATMEL Start habe
ich dne EIC mit einem 120 Mhz-Clock verbunden, die beiden Interrupts 5
und 6 sind enabled und es ist Fallende/Beide Flanken für diese
eingetragen.
Was könnte da noch fehlen?
Danke!