Дело в том, что в своей задаче я использую прерывания в PIO Controllerе, которые срабатывают при изменении уровня сигнала на указанной ножке.. (ножка настроена как вход) Кроме того, мне необходимо перезагружать контроллер софтовым способом, например, вида:
pRSTC->RSTC_RCR = AT91C_RSTC_EXTRST |
AT91C_RSTC_KEY_PASS;
Так вот, проблема в том, что при выполнении перезагрузки, указанной выше, происходит прерывание PIO Controllerа, причем независимо от того, запретил я это прерывание перед ресетом или нет.. Как это можно объяснить? Разве при сбросе все регистры не должны сбрасываться в дефолтное состояние? И даже если какие-то регистры не сбросились, все равно прерывание не должно срабатывать, если его запретили.. По-моему, так..
Чтобы было понятней, приведу отрывок из простейшей программы , иллюстрирующей данную проблему:
........................
//Функция прерывания:
__irq void IRQ_Handler (void) {
pAIC>AIC_IDCR = 0xFFFFFFFF; // disable all interrupts
pPIOB->PIO_IDR = 0xFFFFFFFF; // disable PIOB interrupts
pRSTC->RSTC_RCR = AT91C_RSTC_EXTRST |
AT91C_RSTC_KEY_PASS; // External Reset
pPIOB_int->PIO_ISR; // clear PIOB interrupts
pAIC_int->AIC_EOICR = 0x0; // end of interrupt
}
...........................
В данном примере Reset вызывает зацикливание данной функции прерывания.. Если убрать Reset, прерывание сработает один раз, как и положено..