我将 UART0配置 为通过 DMA 从外部器件发送和接收字节帧
然后、我还配置了 UART1、用于从 不同的外部器件发送和接收字节帧
57600
有时 UART1传输一个没有某些字节的帧。 停止 UART0时、所有字节始终被发送。
每个 UART 都是以相同的方式配置的...这是 UART1
#define DMA_UART1_RX (22)// RX
#define DMA_UART1_TX (23)// TX
SysCtlPeripheralEnable (SYSCTL_Periph_UART1);
GPIOPinConfigure (GPIO_PC4_U1RX);
GPIOPinConfigure (GPIO_PC5_U1TX);
GPIOPinTypeUART (GPIO_PORTC_BASE、GPIO_PIN_4 | GPIO_PIN_5);
UARTConfigSetExpClk (UART1_base、SysCtlClockGet ()、57600、
(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE);
UARTFIFOLevelSet (UART1_base、UART_FIFO_TX4_8、UART_FIFO_RX4_8);
UARTTxIntModeSet (UART1_base、UART_TXINT_MODE_EOT);
UARTEnable (UART1_BASE);
UARTDMAEnable (UART1_BASE、UART_DMA_RX | UART_DMA_TX);
uDMAChannelAssign (UDMA_CH22_UART1RX);
uDMAChannelAssign (UDMA_CH23_UART1TX);
IntPrioritySet (INT_UART1、INT_PRIORY_LEVEL_5);
IntEnable (INT_UART1);
uDMAChannelAttributeDisable (EVO_DMA_UART1_RX、UDMA_ATTR_ALTSELECT |
uDMA_attr_USEBURST | uDMA_attr_high_priority | uDMA_attr_REQMASK);
uDMAChannelControlSet (EVO_DMA_UART1_RX | UDMA_PRI_SELECT、
UDMA_SIZE_8 | UDMA_SRC_INC_NONE | UDMA_DST_INC_8 | UDMA_ARC_4);
START_RX();
uDMAChannelAttributeDisable (EVO_DMA_UART1_TX、UDMA_ATTR_ALTSELECT |
uDMA_attr_USEBURST | uDMA_attr_high_priority | uDMA_attr_REQMASK);
uDMAChannelControlSet (EVO_DMA_UART1_TX | UDMA_PRI_SELECT、
UDMA_SIZE_8 | UDMA_SRC_INC_8 | UDMA_DST_INC_NONE | UDMA_ARC_4);
空 IntHandler_UART1 (空)
{
uint32_t ulStatus;
uint32_t ulMode;
ulStatus = UARTIntStatus (UART1_base、1);
UARTIntClear (UART1_base、ulStatus);
ulMode = uDMAChannelModeGet (DMA_UART1_RX | UDMA_PRI_SELECT);
如果(ulMode = UDMA_MODE_STOP)
{
START_RX1 ();
}
其他
;
if ((HWREG (UART1_BASE + UART_O_RIS)& UART_RIS_TXRIS)== UART_RIS_TXRIS)
{
uDMAChannelDisable (DMA_UART1_TX);
}
其他
;
uDMAIntClear ((1 << DMA_UART1_RX)|(1 << DMA_UART1_TX));
}
静态空 start_RX1 (空)
{
uDMAChannelDisable (EVO_DMA_UART1_RX);
UDMA_MODE_BASIC、
(void*)(UART1_base + UART_O_DR)、
rx1_bytes、
DIM_MAX_TXRX_Bytes);
uDMAChannelEnable (DMA_UART1_RX);
}
静态空 start_TX1 (uint32_t dim)
{
uDMAChannelTransferSet (DMA_UART1_TX | UDMA_PRI_SELECT、
UDMA_MODE_BASIC、
Tx1_bytes、
(void*)(UART1_base + UART_O_DR)、
DIM);
uDMAChannelEnable (DMA_UART1_TX);
}