我已经使用 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();
}




