想把一个缓冲数组里面的数用发送中断连续发送出去,用查询可以实现,但是改成中断后,发现只有第一个字节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);
|