我将 UART 配置为折页:
GPIO_CMUartInit ();
SCI_performSoftwareReset (SCIA_BASE);
SCI_setConfig (SCIA_BASE、DEVICE_LSPCLK_FREQ、57600、(SCI_CONFIG_WLEN_8 |
SCI_CONFIG_STOP_ONE |
SCI_CONFIG_PAR_NONE);
SCI_resetChannels ( SCIA_BASE );
SCI_enableFIFO (SCIA_BASE);
SCI_enableModule ( SCIA_BASE );
SCI_enableInterrupt (SCIA_BASE、SCI_INT_TXFF);
SCI_disableInterrupt (SCIA_BASE、SCI_INT_RXERR);
SCI_setFIFOInterruptLevel (SCIA_BASE、SCI_FIFO_TX0、SCI_FIFO_RX1);
//SCI_performSoftwareReset (SCIA_BASE);
interrupt_register (INT_SCIA_TX、UART_TxInterrupt);
SCI_clearInterruptStatus (SCIA_BASE、SCI_INT_TXFF);
interrupt_clearACKGroup (interrupt_ack_group9);
/*********
*函数名称:UART_TxInterrupt *
*说明:*
(三 /
_interrupt void UART_TxInterrupt (void){
if (UART.Length >= 16){
UART.Length -= 16;
UART.Index += 16;
}
否则 UART.Length = 0;
if (UART.Length){
SCI_writeCharArray (SCIA_BASE、&UART.pData[UART.Index]、(UART.Length >= 16)? 16:UART.Length );
}
否则{
PailotCamPosCom_TxFinish();
interrupt_disable (INT_SCIA_TX);
}
SCI_clearInterruptStatus (SCIA_BASE、SCI_INT_TXFF);
interrupt_clearACKGroup (interrupt_ack_group9);
}
/*********
*函数名称:UART_CMGetChar *
*说明:*
(三 /
Result_e UART_SendArray( U16 Length,U8 *pData ){
if (UART.Length) return (RES_IN_Progress);
UART.Index = 0;
UART.Length =长度;
UART.pData = pData;
SCI_writeCharArray (SCIA_BASE、&UART.pData[UART.Index]、(UART.Length >= 16)? 16:UART.Length );
INTERRUPT_ENABLE (INT_SCIA_TX);
SCI_clearInterruptStatus (SCIA_BASE、SCI_INT_TXFF);
interrupt_clearACKGroup (interrupt_ack_group9);
return (RES_SUCCESS);
}
调用 UART_SendArray 时、即使 FIFO 已满、也会立即中断
我出了什么问题?