Я только что разрешил принимать прерывания для UART3, но я получаю жесткую ошибку, как только я отправляю данные. Вот как я его инициализации:LPC1769 Прерывание UART, вызывающее жесткую ошибку
LPC_UART_TypeDef *uart;
LPC_SC->PCONP |= 1 << 25;
LPC_PINCON->PINSEL1 |= 0b1111 << 18;
uart = LPC_UART3;
uart->FCR = 0b111; // Reset FIFOs
uart->LCR = 0b10000011;
uart->DLL = 12;
uart->DLM = 0;
uart->FDR = 0xe5;
uart->LCR = 0b00000011;
uart->IER = 1; // Enable RBR interrupt
NVIC_EnableIRQ(UART3_IRQn);
Согласно GDB, мой ISR даже не получить удар. Я подтвердил, что он находится в моей векторной таблице в нужном месте, с правильным адресом плюс бит 0 (для режима Thumb-2, как и для всех моих других обработчиков). Фактически, когда я заменяю ISR пустой функцией, я по-прежнему получаю ошибку. Вот результат моего обработчика ошибок:
Hard fault FORCED
r0 = 0000000a
r1 = 0000000b
r2 = 000002ed
r3 = 00000000
r12 = 00000000
lr = fffffffd
pc = 00000000
psr = 60000218
BFAR = e000ed38
CFSR = 00020000
DFSR = 00000000
AFSR = 00000000
SHCSR = 00070000
Ни LR, ни ПК не выглядят очень полезными. Это первый IRQ, который я добавил. Все остальные записи таблицы векторов - SysTick и ниже.
Как я могу узнать, что вызывает неисправность?
Вот мой вектор стол:
.word zeptos_msp_top
.word zeptos_reset_isr
.word 0 /* NMI */
.word zeptos_hardfault_isr_shim
.word zeptos_memmanage_isr
.word zeptos_busfault_isr
.word zeptos_usagefault_isr
.word 0 /* Reserved */
.word 0 /* Reserved */
.word 0 /* Reserved */
.word 0 /* Reserved */
.word zeptos_svc_isr
.word 0 /* DebugMon */
.word 0 /* Reserved */
.word zeptos_pendsv_isr
.word zeptos_systick_isr
.word 0 /* WDT */
.word 0 /* Timer 0 */
.word 0 /* Timer 1 */
.word 0 /* Timer 2 */
.word 0 /* Timer 3 */
.word 0 /* Timer 4 */
.word 0 /* UART 0 */
.word 0 /* UART 1 */
.word 0 /* UART 2 */
.word zeptos_uart3_isr
Я трижды проверил его, и я уверен, что это правильно. Я добавил его на мой вопрос на всякий случай. – Derecho
OH. MY. БОГ. У меня был дополнительный таймер IRQ там - нет таймера 4! Спасибо, что заставило меня проверить это снова! – Derecho