我已经使用 TivaWare 函数在 TM4C 上实现了 UART 中断。
该程序很简单:
-在 UART 上接收到数据时触发中断
接收到的每个字符都在小括号之间回显
因此、如果我要从我的计算机发送"A"、我将返回"{A}"。 示例:
问题是、当我一次测试发送更长的消息时:前几个字符被回显、然后在某一时刻缺少字符:
示例
请注意、这些示例中的消息是在下面的文本字段中完整写入的、并通过按 Enter 键立即发送。 我这样做是为了模拟通过串行方式以编程方式发送数据、这种情况应尽可能快。
在此示例中,我发送了句子“这是一个发送用于测试的较长句子”:
在此示例中、我发送了'123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-123456789-'
详细信息:
-硬件:使用 Tiva TM4C Launchpad
-在引脚 PA0和 PA1上使用 UART 0
波特率:115200,无奇偶校验,1个停止位,8位字
代码:
#include #include #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "driverlib/gpio.h" #include "driverlib/pin_map.h" #include "driverlib/sysctl.h" #include "driverlib/uart.h" #include "inc/hw_ints.h" (include void interrupt ) // //设置 // Setup(); while (1){ } } //********* // // UART 代码 // void UART0_IntHandler (void){ // // UART 中断状态 // uint32_t ui32Status; // //获取中断状态 // ui32Status = UARTIntStatus (UART0_BASE、TRUE); // //清除中断标志 // UARTIntClear (UART0_BASE、ui32Status); // //在有字符时循环 // while (UARTCharsAvail (UART0_BASE){ // //回显字符 // UARTCharPutNonBlocking (UART0_BASE、'{'); UARTCharPutNonBlocking (UART0_BASE、UARTCharGetNonBlocking (UART0_BASE)); UARTCharPutNonBlocking (UART0_BASE、'}); } } //********* // //系统设置代码 // //// UART 设置功能 // 空 UARTSetup (void){ //******** // // UART0设置 // // //启用 UART 0和 GPIO A 上的时钟 //(UART 0位于引脚 PA0和 PA1上) // SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA); SysCtlPeripheralEnable (SYSCTL_Periph_UART0); // //等待 UART0模块准备就绪。 // while (!SysCtlPeripheralReady (SYSCTL_Periph_UART0)) { } // //为 UART 配置引脚 PA0和 PA1 // GPIOPinConfigure (GPIO_PA0_U0RX); GPIOPinConfigure (GPIO_PA1_U0TX); GPIOPinTypeUART (GPIO_Porta_base、GPIO_PIN_0|GPIO_PIN_1); // //配置 UART 设置: // UART:0 //波特率:115200 //字长:8. //停止位:1. //奇偶校验:无 // UARTConfigSetExpClk (UART0_BASE、SysCtlClockGet ()、115200、UART_CONFIG_WLEN_8|UART_CONFIG_STOP_ONE|UART_CONFIG_PAR_NONE); //******** // // UART0中断代码 // // //启用 UART0中断 // IntEnable (INT_UART0); // //选择 UART0中断 // UARTIntEnable (UART0_BASE、UART_INT_RX | UART_INT_RT); } // 系统设置 // void setup (void){ // // UART 设置功能 // UARTSetup(); // //启用处理器中断 // IntMasterEnable(); }