我正在处理 TM4C123GXL 的 UART1、在此之前、我尝试使用 "TivaWare_C_Series-2.2.0.295\examples\boards\ek-tm4c123gxl\UART_echo "对 UART0上的字符进行回显、这是成功的。 然后、我对 UART1尝试了相同的代码、只 做了一些小改动、但仍然无法打印字符。
此外、在调试时、我将断点放置在此行"ui32Status = MAP_UARTIntStatus (UART1_base、true)"上;"我观察到我在"ui32Status"中得到0x40值、这意味着每当我们将数据放在 UART1上时、"MIS"寄存器"RTMIS"位就会被置位。 这到底意味着什么? 我阅读 了数据表、但我没有任何想法。
当我通过串行终端发送字符"G"时、我看到 UART1的数据寄存器发生了变化。
每当我们进入任何字符控制 时、我观察到的另一件事是进入 UART 处理程序。 那么,不在终端上打印的原因应该是什么?
我要附加代码以及寄存器 PICS。 任何帮助都是真的
谢谢。 谢谢你。
#include
#include
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "driverlib/debug.h"
#include "driverlib/fpu.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/driverlib.rom"#include"#driverlib/driverlib/rom.rom.include"
#include "driverlib/driverlib"#driverlib_rom.intrate.h"#include"#include "driverlib_rom.ine.h"
//
// UART 中断处理程序。
////
*****************
空
UARTIntHandler (void)
{
uint32_t ui32Status;
//
//获取中断状态。
//
ui32Status = MAP_UARTIntStatus (UART1_BASE、TRUE);
//
//清除已发出的中断。
//
MAP_UARTIntClear (UART1_BASE、ui32Status);
//
//在接收 FIFO 中有字符时循环。
//
while (MAP_UARTCharsAvail (UART1_BASE))
{
//
//从 UART 读取下一个字符并将其写回 UART。
//
MAP_UARTCharPutNonBlocking (UART1_base、MAP_UARTCharGetNonBlocking (UART1_base));
//
//闪烁 LED 以显示字符传输正在发生。
//
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、GPIO_PIN_2);
//
//延迟1毫秒。 每个 SysCtlDelay 大约为3个时钟。
//
SysCtlDelay (SysCtlClockGet ()/(1000 * 3));
//
//关闭 LED
//
GPIOPinWrite (GPIO_PORTF_BASE、GPIO_PIN_2、0);
}
}
//*********
//
//向 UART 发送字符串。
////
*****************
void
UARTSend (const uint8_t * pui8Buffer、uint32_t ui32Count)
{
//
//循环,同时有更多字符要发送。
//
while (ui32Count---)
{
//
//将下一个字符写入 UART。
//
MAP_UARTCharPutNonBlocking (UART1_base、* pui8Buffer++);
}
}
//*********
//
//此示例演示了如何将一串数据发送到 UART。
////
*****************
int
main (void)
{
//
//为中断处理程序启用怠惰堆栈。 这允许使用浮点
//在中断处理程序中使用的指令,但代价是
//额外的堆栈用法。
//
MAP_FPUEnable();
MAP_FULazyStackingEnable();
//
//将时钟设置为直接从晶体运行。
//
MAP_SysCtlClockSet (SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_16MHz);
//
//启用用于板载 LED 的 GPIO 端口。
//
MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
//
//为 LED 启用 GPIO 引脚(PF2)。
//
MAP_GPIOPinTypeGPIOOutput (GPIO_PORTF_BASE、GPIO_PIN_2);
//
//启用此示例使用的外设。
//
MAP_SysCtlPeripheralEnable (SYSCTL_Periph_UART1);
MAP_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);
//
//启用处理器中断。
//
MAP_IntMasterEnable();
//
//将 GPIO A0和 A1设置为 UART 引脚。
//
GPIOPinConfigure (GPIO_PC5_U1TX);
GPIOPinConfigure (GPIO_PC4_U1RX);
MAP_GPIOPinTypeUART (GPIO_PORTC_BASE、GPIO_PIN_5 | GPIO_PIN_4);
//
//将 UART 配置为115、200、8-N-1操作。
//
MAP_UARTConfigSetExpClk (UART1_base、MAP_SysCtlClockGet ()、115200、
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE));
//
//启用 UART 中断。
//
MAP_IntEnable (INT_UART1);
MAP_UARTIntEnable (UART1_BASE、UART_INT_RX | UART_INT_RT);
//
//提示输入文本。
//
UARTSend ((uint8_t *)"\033[2JEnter 文本:"、16);
//
//循环通过 UART 永久回显数据。
//
while (1)
{
}
}