串口DMA传输配置完以后在while主循环里面要怎么操作串口啊 我看官方例程里面是串口中断里面重新配置uDMAChannelTransferSet,主循环里面就计计次数
官方例程是乒乓模式的 但是我没有这么大的数据量 就写了个基本模式的代码 功能是发送字节0xaa 串口调试助手什么也收不到
下面放代码
void UART_init(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART2);
HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;
HWREG(GPIO_PORTD_BASE + GPIO_O_CR) = 0xFF;
GPIOPinConfigure(GPIO_PD7_U2TX);
GPIOPinConfigure(GPIO_PD6_U2RX);
GPIOPinTypeUART(GPIO_PORTD_BASE,GPIO_PIN_7|GPIO_PIN_6);
UARTConfigSetExpClk(UART2_BASE,SysCtlClockGet(),115200,
UART_CONFIG_WLEN_8|
UART_CONFIG_STOP_ONE|UART_CONFIG_PAR_NONE);
UARTEnable(UART2_BASE);
UARTDMAEnable(UART2_BASE,UART_DMA_TX|UART_DMA_RX);
uDMAChannelAttributeDisable(UDMA_CH0_UART2RX,
UDMA_ATTR_ALTSELECT |
UDMA_ATTR_HIGH_PRIORITY |
UDMA_ATTR_REQMASK);
uDMAChannelControlSet(UDMA_CH0_UART2RX |
UDMA_PRI_SELECT,
UDMA_SIZE_8 |
UDMA_SRC_INC_NONE |
UDMA_DST_INC_NONE |
UDMA_ARB_1);
uDMAChannelTransferSet(UDMA_CH0_UART2RX |
UDMA_PRI_SELECT,
UDMA_MODE_BASIC,
(void *)(UART0_BASE + UART_O_DR),
RxBuf,
sizeof(RxBuf));
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART2);
HWREG(GPIO_PORTD_BASE + GPIO_O_LOCK) = GPIO_LOCK_KEY;
HWREG(GPIO_PORTD_BASE + GPIO_O_CR) = 0xFF;
GPIOPinConfigure(GPIO_PD7_U2TX);
GPIOPinConfigure(GPIO_PD6_U2RX);
GPIOPinTypeUART(GPIO_PORTD_BASE,GPIO_PIN_7|GPIO_PIN_6);
UARTConfigSetExpClk(UART2_BASE,SysCtlClockGet(),115200,
UART_CONFIG_WLEN_8|
UART_CONFIG_STOP_ONE|UART_CONFIG_PAR_NONE);
UARTEnable(UART2_BASE);
UARTDMAEnable(UART2_BASE,UART_DMA_TX|UART_DMA_RX);
uDMAChannelAttributeDisable(UDMA_CH0_UART2RX,
UDMA_ATTR_ALTSELECT |
UDMA_ATTR_HIGH_PRIORITY |
UDMA_ATTR_REQMASK);
uDMAChannelControlSet(UDMA_CH0_UART2RX |
UDMA_PRI_SELECT,
UDMA_SIZE_8 |
UDMA_SRC_INC_NONE |
UDMA_DST_INC_NONE |
UDMA_ARB_1);
uDMAChannelTransferSet(UDMA_CH0_UART2RX |
UDMA_PRI_SELECT,
UDMA_MODE_BASIC,
(void *)(UART0_BASE + UART_O_DR),
RxBuf,
sizeof(RxBuf));
uDMAChannelAttributeDisable(UDMA_CH1_UART2TX,
UDMA_ATTR_ALTSELECT |
UDMA_ATTR_HIGH_PRIORITY |
UDMA_ATTR_REQMASK);
uDMAChannelControlSet(UDMA_CH1_UART2TX |
UDMA_PRI_SELECT,
UDMA_SIZE_8 |
UDMA_SRC_INC_NONE |
UDMA_DST_INC_NONE |
UDMA_ARB_1);
uDMAChannelTransferSet(UDMA_CH1_UART2TX |
UDMA_PRI_SELECT,
UDMA_MODE_BASIC,
TxBuf,
(void *)(UART0_BASE + UART_O_DR),
sizeof(TxBuf));
UDMA_ATTR_ALTSELECT |
UDMA_ATTR_HIGH_PRIORITY |
UDMA_ATTR_REQMASK);
uDMAChannelControlSet(UDMA_CH1_UART2TX |
UDMA_PRI_SELECT,
UDMA_SIZE_8 |
UDMA_SRC_INC_NONE |
UDMA_DST_INC_NONE |
UDMA_ARB_1);
uDMAChannelTransferSet(UDMA_CH1_UART2TX |
UDMA_PRI_SELECT,
UDMA_MODE_BASIC,
TxBuf,
(void *)(UART0_BASE + UART_O_DR),
sizeof(TxBuf));
uDMAChannelEnable(UDMA_CH0_UART2RX);
uDMAChannelEnable(UDMA_CH1_UART2TX);
uDMAChannelRequest(UDMA_CH0_UART2RX);
uDMAChannelRequest(UDMA_CH1_UART2TX);
uDMAChannelEnable(UDMA_CH1_UART2TX);
uDMAChannelRequest(UDMA_CH0_UART2RX);
uDMAChannelRequest(UDMA_CH1_UART2TX);
UARTIntEnable(UART2_BASE, UART_INT_DMARX);
UARTIntEnable(UART2_BASE, UART_INT_DMATX);
IntEnable(INT_UART2);
}
UARTIntEnable(UART2_BASE, UART_INT_DMATX);
IntEnable(INT_UART2);
}
void UART2IntHandler(void)
{
uint32_t ui32Status;
uint32_t ui32Mode;
{
uint32_t ui32Status;
uint32_t ui32Mode;
ui32Status = UARTIntStatus(UART2_BASE, 1);
UARTIntClear(UART2_BASE, ui32Status);
UARTIntClear(UART2_BASE, ui32Status);
ui32Mode = uDMAChannelModeGet(UDMA_CH1_UART2TX | UDMA_PRI_SELECT);
if(ui32Mode == UDMA_MODE_STOP)
{
uDMAChannelTransferSet(UDMA_CH1_UART2TX | UDMA_PRI_SELECT,
UDMA_MODE_BASIC, TxBuf,
(void *)(UART2_BASE + UART_O_DR),
sizeof(TxBuf));
uDMAChannelEnable(UDMA_CH1_UART2TX);
uDMAChannelRequest(UDMA_CH1_UART2TX);
}
if(ui32Mode == UDMA_MODE_STOP)
{
uDMAChannelTransferSet(UDMA_CH1_UART2TX | UDMA_PRI_SELECT,
UDMA_MODE_BASIC, TxBuf,
(void *)(UART2_BASE + UART_O_DR),
sizeof(TxBuf));
uDMAChannelEnable(UDMA_CH1_UART2TX);
uDMAChannelRequest(UDMA_CH1_UART2TX);
}
if(!uDMAChannelIsEnabled(UDMA_CH0_UART2RX))
{
uDMAChannelTransferSet(UDMA_CH0_UART2RX | UDMA_PRI_SELECT,
UDMA_MODE_BASIC,
(void *)(UART2_BASE + UART_O_DR),RxBuf,
sizeof(RxBuf));
uDMAChannelEnable(UDMA_CH0_UART2RX);
uDMAChannelRequest(UDMA_CH0_UART2RX);
}
}
{
uDMAChannelTransferSet(UDMA_CH0_UART2RX | UDMA_PRI_SELECT,
UDMA_MODE_BASIC,
(void *)(UART2_BASE + UART_O_DR),RxBuf,
sizeof(RxBuf));
uDMAChannelEnable(UDMA_CH0_UART2RX);
uDMAChannelRequest(UDMA_CH0_UART2RX);
}
}
void UDMA_Init(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA);
IntEnable(INT_UDMAERR);
uDMAEnable();
uDMAControlBaseSet(pui8ControlTable);
uDMAChannelAssign(UDMA_CH0_UART2RX);
uDMAChannelAssign(UDMA_CH1_UART2TX);
}
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA);
IntEnable(INT_UDMAERR);
uDMAEnable();
uDMAControlBaseSet(pui8ControlTable);
uDMAChannelAssign(UDMA_CH0_UART2RX);
uDMAChannelAssign(UDMA_CH1_UART2TX);
}
uint8_t RxBuf[1];
uint8_t TxBuf[1]={0xaa};
uint8_t TxBuf[1]={0xaa};
int main()
{
FPULazyStackingEnable();
FPUEnable();
SysCtlClockSet(SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ);
UDMA_Init();
UART_init();
while(1)
{
}
{
FPULazyStackingEnable();
FPUEnable();
SysCtlClockSet(SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ);
UDMA_Init();
UART_init();
while(1)
{
}
}