В основной фунции work() уберем регистрацию падения напряжения(детектор спада) и добавим инцициализацию системного таймера:
/* enable exti0 interrupt */ EXTI->IMR |= EXTI_IMR_MR0; /* nvic enable exti0 irq */ NVIC_EnableIRQ(EXTI0_IRQn); /* setup SysTick timer */ SysTick_Config(16000);Также добавим функцию аппаратной задержки с обновлением флага прерывания exti0:
/* hardware delay and switch */void hard_delay(void) { static unsigned int counter; counter++; /* wait a half second */ if (counter > 500) { /* switch leds */ LED_PORT->ODR ^= ALL_LEDS; counter = 0; } /* if exit0 interrupt disable */ if (!(EXTI->IMR & EXTI_IMR_MR0)) { /* enable exti0 interrupt */ EXTI->IMR |= EXTI_IMR_MR0; }}