工具/软件:TI-RTOS
您好!
我正在尝试在 TIRTOS 中为 TM4C1294NCPDT 控制器实现 UART 中断、并在尝试注册中断处理程序时卡住。
EK_TM4C1294XL.c 中的 init 函数:
/* === EK_TM4C1294XL_initUART === /void EK_TM4C1294XL_initUART (void) { /* UART 0 */ SysCtlPeripheralEnable (SYSCTL_Periph_UART0); GPIOPinConfigure (GPIO_PA0_U0RX); GPIOPinConfigure (GPIO_PA1_U0TX); GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0 | GPIO_PIN_1); UARTConfigSetExpClk (UART0_BASE、120000000、9600、 (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); /*初始化 UART 驱动程序*/ #if TI_DRIVERS_UART_DMA EK_TM4C1294XL_initDMA (); #endif UART_INIT(); /*启用 UART FIFO */ UARTFIFOEnable (UART0_BASE); /*将 RX FIFO 中断设置为最大值、将 TX 中断设置为最小值*/ UARTFIFOLevelSet (UART0_BASE、UART_FIFO_RX7_8、UART_FIFO_TX1_8); /*绑定中断处理程序函数*/ UARTIntRegister (UART0_BASE、UART0InterruptHandler); /*启用中断*/ UARTIntEnable (UART0_BASE、UART_INT_RX); }
UART0InterruptHandler 函数在其他位置定义:
空 UART0InterruptHandler (空){ uint32_t intStatus = UARTIntStatus (UART0_BASE、false);//false = 0 UARTIntClear (UART0_BASE、UART_INT_RX); UARTIntDisable (UART0_BASE、UART_INT_RX); if (intStatus & UART_INT_RX){//Rx 中断 while (UARTCharsAvail (UART0_BASE)){ UART_buffer[UART_buffer_index]= UARTCharGet (UART0_BASE);//逐一提取字符 UART_buffer_index++; } } 返回; }
问题是、当我尝试使用包含 UARTIntRegister 函数的函数运行代码时、一旦代码加载到控制器中(即使在我点击"run"之前)、控制器就会运行到 loader_exit 函数、并且控制台会显示以下消息:
FSR = 0x0000
HFSR = 0x40000000
DFSR = 0x00000008
MMAR = 0x00016400
BFAR = 0x00016400
AFSR = 0x00000000
正在终止执行...
如果我不包含 UARTIntRegister 函数、那么一切都可以正常工作(很明显、没有中断)。 我出了什么问题? 是否有一个全局中断我在某个位置未启用? 或者、我是否需要对.cfg 文件进行一些更改才能使其正常工作?
谢谢、
svl123