想把一个缓冲数组里面的数用发送中断连续发送出去,用查询可以实现,但是改成中断后,发现只有第一个字节0XFF发送出去后,并没有触发发送中断而继续发后面的数据 调试一天了,不知道怎么回事,有人知道吗?禁用 FIFO 就是相当于将 FIFO 深度设置为 1 个字节。 我也用ROM_UARTFIFODisable(INT_UART1);来禁止。
/********************************************************** 串口初始化设置 **********************************************************/
void UART_init(void)
{
//UART1 HART6
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
ROM_GPIOPinConfigure(GPIO_PB0_U1RX);
ROM_GPIOPinConfigure(GPIO_PB1_U1TX);
ROM_GPIOPinTypeUART(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1);//设定PB0 PB1为串口
ROM_UARTConfigSetExpClk(UART1_BASE, ROM_SysCtlClockGet(), 1200, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_ODD)); //设定 UART for 115,200, 8-ODD-1 operation
ROM_IntEnable(INT_UART1); //使能UART1中断
ROM_UARTIntEnable(UART1_BASE, UART_INT_RX | UART_INT_RT);
ROM_UARTFIFODisable(INT_UART1);//禁用 FIFO }
/********************************************************** 串口1中断 HART6 **********************************************************/
void UART1_Handler(void)
{ uint32_t ui32Status;
uint8_t bt;
ui32Status = ROM_UARTIntStatus(UART1_BASE, true); //获取中断状态 屏蔽中断状态
ROM_UARTIntClear(UART1_BASE, ui32Status); //清除UART中断源
if(ROM_UARTCharsAvail(UART1_BASE))
{
bt=ROM_UARTCharGetNonBlocking(UART1_BASE);//接收数据
RCV_Hart(bt,5); //接收处理
}else if(ROM_UARTSpaceAvail(UART1_BASE))
{ if(uSndFrmCnt[5]) //发送数据
{
ROM_UARTCharPutNonBlocking(UART1_BASE, HartSndFrm[5][SndFrmCnt[5]]);
SndFrmCnt[5]++;
uSndFrmCnt[5]--;
}else{
send_init(5);
ROM_GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_2,GPIO_PIN_2); //TXEN-1=1 接收
}
}
}
主程序发送命令
ROM_IntEnable(INT_UART1); //使能UART1中断
SndFrmCnt[5]=0;
ROM_UARTCharPutNonBlocking(UART1_BASE, 0xFF);
|