Добавим вектор для обработчика таймера и сам обработчик:
0, /*!#13 cortex-m4 penable request for system service interrupt */
sys_tick_handler, /*!#14 cortex-m4 system tick timer interrupt */
/* External Interrupts */
/* system tick timer handler */
void sys_tick_handler(void) {
hard_delay();
}
Также изменим обработчик прерывания exti0 - уберем условия и добавим очистку очереди и выключение прерывания:
/* exti0 irq handler */
void exti0_irq_handler(void) {
LED_PORT->ODR ^= GREEN_LED | RED_LED;
/* clear pending irq */
EXTI->PR |= EXTI_PR_PR0;
/* disable exti0 interrupt */
EXTI->IMR &= ~EXTI_IMR_MR0;
}