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: uart dma interrupt flag cannot be clear

Part Number: CC3200

Dear Ti's engineer

In my code i want to send frames by the DMA , when the dma Tx done it raise the DMATXMIS flag in the register of UARTMIS. Then in the uart isr function i clear the flag by write 1 to the DMATXIC bit in the UARTTICR register., but i found that  the DMATXMIS flag is not be cleared. This is different with the description in the cc3200 user manual.  Below is my testing code, where ZIGBEECOMM is uart1

static void uartslkIsr(void)

{

unsigned long uiIntStat,i;

uiIntStat = MAP_UARTIntStatus(ZIGBEECOMM, 1);

       /*DMA Tx done interrupt*/
       if(uiIntStat & 0x00020000){
         MAP_UARTIntClear(ZIGBEECOMM, 0x00020000);
         i = MAP_UARTIntStatus(ZIGBEECOMM, 1);
         xSemaphoreGiveFromISR(waitUntilSendDone, &xHigherPriorityTaskWoken);
       }

      }

  • Hi,

    The DMATXMIS flag is set in hardware in response to the DMA controller interrupts, so it seems like the DMA controller is causing that flag to be repeatedly reasserted despite the DMA transfer being complete. This is probably because you didn't clear the DMA controller's interrupt using MAP_uDMAIntClear(). Once you are done with your transfer, you probably also want to disable the UART DMA through a MAP_UARTDMADisable() call.

    Let me know if that doesn't fix your issue and I can help you debug this further. There is also the uart_dma example in the CC3200 SDK that is a useful reference for UART+DMA.

    Regards,
    Michael
  • OK,I will try ,and make a response to you as soon as possible