TI工程师,你们好
我在使用串口时,把FIFO禁止,并且不使用DMA方式,只是单纯的中断方式,为何接收中断的触发还是以1/8 FIFIO来触发,也就是说每次一定要发送偶数个数据中断才触发,我看到DATASHEET上说明,如果禁止FIFO了,他会有个前置1字节的寄存器来保存接收到的数据,请问有什么办法来触发只要来数据了就出发接收中断呢?
以下是我初始化串口的代码片段:
MAP_PRCMPeripheralClkEnable(PRCM_UARTA0, PRCM_RUN_MODE_CLK); MAP_PinTypeUART(PIN_55, PIN_MODE_3); MAP_PinTypeUART(PIN_57, PIN_MODE_3); MAP_UARTFIFODisable(UARTA0_BASE); MAP_UARTConfigSetExpClk(UARTA0_BASE, MAP_PRCMPeripheralClockGet(PRCM_UARTA0), UART0_BAUD_RATE, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE)); MAP_UARTIntRegister(UARTA0_BASE, UARTIntHandler); MAP_UARTTxIntModeSet(UARTA0_BASE, UART_TXINT_MODE_EOT); MAP_UARTIntEnable(UARTA0_BASE, UART_INT_RX); MAP_UARTIntEnable(UARTA0_BASE, UART_INT_TX); MAP_UARTEnable(UARTA0_BASE); ...
这里是我检测和处理中断的代码片段:
static void UARTIntHandler(void){
long temp_data;
unsigned long ulStatus = MAP_UARTIntStatus(UARTA0_BASE, true);
if(UART_INT_RX & ulStatus){//Receive Interrupt
ulStatus ^= UART_INT_RX;
MAP_UARTIntClear(UARTA0_BASE, UART_INT_RX);
temp_data = HWREG(UARTA0_BASE + UART_O_DR);
...
}
if(UART_INT_OE & ulStatus){//Overrun Error Interrupt
ulStatus ^= UART_INT_OE;
MAP_UARTIntClear(UARTA0_BASE, UART_INT_OE);
temp_data = HWREG(UARTA0_BASE + UART_O_DR);
}
if(UART_INT_TX & ulStatus){//Transmit Interrupt
ulStatus ^= UART_INT_TX;
MAP_UARTIntClear(UARTA0_BASE, UART_INT_TX);
...
}
MAP_UARTIntClear(UARTA0_BASE, ulStatus);
}