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.

uDMA问题咨询

ROM_uDMAChannelAttributeDisable(UDMA_CHANNEL_UART0RX,                                     UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST |                                     UDMA_ATTR_HIGH_PRIORITY |                                     UDMA_ATTR_REQMASK);

其他的函数能看懂,就这一句,上来就disable了很多特性,这个有什么用?我不调用这句话会产生什么后果?

在uDma_demo例程里,我改了下把发送的屏蔽,就配置接收用那个的乒乓dma,结果就不能正常运行,接收中断也进不了。配置部分如下:

 

void InitUART0Transfer(void) {     uint_fast16_t ui16Idx;

    for(ui16Idx = 0; ui16Idx < UART_TXBUF_SIZE; ui16Idx++)     {         g_ui8TxBuf[ui16Idx] = ui16Idx;     }

    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);     ROM_SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_UART0);     ROM_UARTConfigSetExpClk(UART0_BASE, ROM_SysCtlClockGet(), 115200,                             UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |                             UART_CONFIG_PAR_NONE);                                 ROM_UARTFIFOLevelSet(UART0_BASE, UART_FIFO_TX4_8, UART_FIFO_RX4_8);     ROM_UARTEnable(UART0_BASE);     ROM_UARTDMAEnable(UART0_BASE, UART_DMA_RX);     ROM_IntEnable(INT_UART0);     ROM_uDMAChannelAttributeDisable(UDMA_CHANNEL_UART0RX,                                     UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST |                                     UDMA_ATTR_HIGH_PRIORITY |                                     UDMA_ATTR_REQMASK);

    ROM_uDMAChannelControlSet(UDMA_CHANNEL_UART0RX | UDMA_PRI_SELECT,                               UDMA_SIZE_8 | UDMA_SRC_INC_NONE | UDMA_DST_INC_8 |                               UDMA_ARB_4);

    ROM_uDMAChannelControlSet(UDMA_CHANNEL_UART0RX | UDMA_ALT_SELECT,                               UDMA_SIZE_8 | UDMA_SRC_INC_NONE | UDMA_DST_INC_8 |                               UDMA_ARB_4);

    ROM_uDMAChannelTransferSet(UDMA_CHANNEL_UART0RX | UDMA_PRI_SELECT,                                UDMA_MODE_PINGPONG,                                (void *)(UART0_BASE + UART_O_DR),                                g_ui8RxBufA, sizeof(g_ui8RxBufA));

    ROM_uDMAChannelTransferSet(UDMA_CHANNEL_UART0RX | UDMA_ALT_SELECT,                                UDMA_MODE_PINGPONG,                                (void *)(UART0_BASE + UART_O_DR),                                g_ui8RxBufB, sizeof(g_ui8RxBufB));

    ROM_uDMAChannelEnable(UDMA_CHANNEL_UART0RX); }

 

 

 

   

 

  • ROM_uDMAChannelAttributeDisable(UDMA_CHANNEL_UART0RX,                                     UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST |                                     UDMA_ATTR_HIGH_PRIORITY |                                     UDMA_ATTR_REQMASK);

    这些是进行DMA通道的配置,比如奇偶性校验之类的。如果看不懂的话,建议翻到宏定义的部分,对照着寄存器的定义看,就会清楚了。每个宏定义,对应寄存器的一个有效位的。