Thread 中讨论的其他器件:EK-TM4C129EXL
工具/软件:TI C/C++编译器
您好 Gurus、
我正在尝试实现 UART0 RX 中断、但尚未实现。 代码编译成功、没有任何错误。 但是、我面临两个奇怪的问题、
- 直到我发送第8个字符、它才会捕获任何中断。 当它接收到第8个字符时、它为中断处理程序 ISR 提供服务并成功返回
- 它只为中断提供一次服务、无论我发送多少宪章、它都不会再次中断。
我已经在 startup_css.c 文件中注册了中断处理程序并进行了声明。
// // //应用程序使用的中断处理程序的外部声明。 //// ***************** extern void xPortPendSVHandler (void); extern void vPortSVCHandler (void); extern void xPortSysTickHandler (void); extern void UART0ISR (void); //*********
和
IntDefaultHandler、 // GPIO 端口 B IntDefaultHandler、 // GPIO 端口 C IntDefaultHandler、 // GPIO 端口 D IntDefaultHandler、 // GPIO 端口 E UART0ISR、 // UART0 Rx 和 Tx IntDefaultHandler、 // UART1 Rx 和 Tx IntDefaultHandler、 // SSI0 Rx 和 Tx IntDefaultHandler、 // I2C0主机和从机
mymain.c;
#include #include include "main.h" #include "drivers/pinout.h" #include "utils/uartstdio.h" // TivaWare 包含 #include "driverlib/sysctl.h" #include "driverlib/debug.h" #include "driverlib/rom.h" #include "driverlib/rom_map#include "driver.h"#defintrl.ude/task#include "#include "driverlib.h"#include "#defintrabout.udpov.h"#include "#defintrab.trab.h #include "#tes#definu.tots.h #include "#include "driverlib/void #include "driverlib_rtos"#include "#def"#def"#def"#task.ipts"#include "#def"#def"#def"#def"#ts"#def"#ts"#def"#defintrl.ipts"#include "#include "#defintrab.ipts"#include "#def"#def"#ts.ts"#include "#ts" void LED3Task (void *pvParameters); void LED4Task (void *pvParameters); void SerialTask1 (void *pvParameters); void SerialTask2 (void *pvParameters); void UART0ISR (void); //主函数 int main (void) { //将系统时钟初始化为120 MHz uint32_t output_clock_rate_Hz; output_clock_rate _Hz = ROM_SysCtlClockFreqSet ( (SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、 System_clock); assert (output_clock_rate _Hz = system_clock); //初始化 Launchpad 的 GPIO 引脚 PinoutSet (false、false); //设置连接到虚拟 COM 端口的 UART //UARTStdioInit(0); //UARTStdioConfig (0、115200、system_clock); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 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、OUTPUT_CLOCK_RATE、115200、(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); UARTIntEnable (UART0_BASE、UART_INT_RX);//仅启用 RX 中断 //IntRegister (INT_UART0、UART0ISR); IntEnable (INT_UART0);//启用 UART 中断 IntMasterEnable();//启用处理器中断 UARTStdioConfig (0、115200、system_clock); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //创建演示任务 xTaskCreate (LED1Task、(const portCHAR *)"LED1"、 configMINIMAL_STACK_SIZE、NULL、1、NULL); //xTaskCreate (demLED2Task、(const portCHAR *)"LED2"、 //configMINIMAL_STACK_SIZE、NULL、1、NULL); xTaskCreate (LED3Task、(const portCHAR *)"LED3"、 configMINIMAL_STACK_SIZE、NULL、1、NULL); //xTaskCreate (LED4Task、(const portCHAR *)"LED4"、 //configMINIMAL_STACK_SIZE、NULL、1、NULL); xTaskCreate (SerialTask1、(const portCHAR *)"SerialTask1"、 configMINIMAL_STACK_SIZE、NULL、1、NULL); xTaskCreate (SerialTask2、(const portCHAR *)"SerialTask2"、 configMINIMAL_STACK_SIZE、NULL、1、NULL); vTaskStartScheduler(); ///调度程序永远不应到达此处/// while (1) { //UARTprintf ("调度程序错误!!\n\n"\}); GPIOPinWrite (CLP_D1_PORT、CLP_D1_PIN、CLP_D1_PIN); GPIOPinWrite (CLP_D2_PORT、CLP_D2_PIN、CLP_D2_PIN); GPIOPinWrite (CLP_D3_PORT、CLP_D3_PIN、CLP_D3_PIN); GPIOPinWrite (CLP_D4_PORT、CLP_D4_PIN、CLP_D4_PIN); 返回0; } }
和 UART0处理程序定义;
空 UART0ISR (空) { UARTIntClear (UART0_BASE、UART_INT_RX); UARTprintf ("UART0ISR 被调用..!\n\n"); }
我卡住了、无法识别问题。
任何帮助/提示都是值得注意的。
谢谢大家。