SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
GPIOPinTypeUART(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1);
GPIOPinConfigure(GPIO_PB0_U1RX);
GPIOPinConfigure(GPIO_PB1_U1TX);
UARTConfigSetExpClk(UART1_BASE, SysCtlClockGet(), 9600, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));
ROM_IntEnable(INT_UART1);
UARTIntEnable(UART1_BASE, UART_INT_RX | UART_INT_RT);
ROM_IntMasterEnable();
UARTIntHandler(void)
{
unsigned long ulStatus;
ROM_IntMasterDisable();
ulStatus = UARTIntStatus(UART1_BASE,true);//保存屏蔽后中断状态
UARTIntClear(UART1_BASE,UART_INT_RX|UART_INT_RT|UART_INT_BE);//清除中断标志
uart0_send_int32_t(ulStatus,1);
//根据不同的中断标志执行不同的中断服务
if(ulStatus&UART_INT_RX)
{
uart0_send_char_string("UART_INT_RX\n", 13);
while(UARTCharGetNonBlocking(UART1_BASE));//将接收FIFO中字符读出
}
if(ulStatus&UART_INT_RT)
{
uart0_send_char_string("UART_INT_RT\n", 13);
} if(ulStatus&UART_INT_BE)
{
uart0_send_char_string("UART_INT_BE", 12);
}
ROM_IntMasterEnable();
}
user151383853:
通常是由于引起的引起的标志没有清掉引起的. 中断里应该检出所有中断因素, 并清除.
Michael Sun:
楼主你的串口接收RX脚在空闲的时候是低电平还是高电平?
串口的接收中断我们有例程,参考如下代码:
C:\ti\TivaWare_C_Series-2.1.0.12573\examples\boards\ek-tm4c123gxl\uart_echo