Жесткий сбой обычно означает, что вы пытаетесь выполнить код за пределами разрешенных адресов.Если вы не зарегистрировали прерывание в таблице векторов, но включили его, MCU перейдет на любой адрес, который там записан, после чего произойдет сбой программы.
Как исправить это, зависит от цепочки инструментов.Предполагая LPCXpresso, у вас есть несколько опций для настройки библиотек (я не знаю, в частности, о LPCOpen), поэтому, где найти таблицу векторов, отличается от случая к случаю.Тем не менее, это работает довольно похоже на большинство MCU, ARM или нет.Где-то в файле запуска crt у вас должно быть что-то вроде этого:
void (* const g_pfnVectors[])(void) = ...
Это массив указателей на функции, который будет таблицей векторов, размещенной в памяти по адресу 0 в Cortex.М. Вы должны поместить свою функцию в соответствующий вектор прерывания.Например, он может сказать что-то вроде
PIN_INT0_IRQHandler, // PIO INT0
Если это прерывание вы должны реализовать, то вы замените эту строку:
#include "my_irq_stuff.h"
...
void (* const g_pfnVectors[])(void) =
...
my_INT0, // PIO INT0
Предполагая, что my_irq_stuff.h
содержит прототип функции my_INT0
для обработки прерываний.Фактическая процедура должна быть реализована в соответствующем файле .c.