LPC1769 UART中断导致硬故障

时间:2013-11-14 08:00:00

标签: arm interrupt-handling uart cortex-m3 lpc

我刚刚为UART3启用了接收中断,但是一发送数据就会出现硬故障。这是我如何初始化它:

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和PC似乎都没有帮助。这是我添加的第一个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

1 个答案:

答案 0 :(得分:1)

0x00寄存器的PC看起来像向量表中的0x00000000一样可疑。检查你的中断向量表是否正确,lpc176x上UART3的处理程序是否在24位。

表条目((uint32_t*)0x00000)[24]必须指向您的处理程序加拇指位。