This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC3200串口接收中断问题

Other Parts Discussed in Thread: CC3200

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);
}