先是串口初始化
void UART_init(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART2);
{
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_RX|UART_DMA_TX);
uDMAChannelAssign(UDMA_CH1_UART2TX);
IntEnable(INT_UART2);
IntMasterEnable();
}
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_RX|UART_DMA_TX);
uDMAChannelAssign(UDMA_CH1_UART2TX);
IntEnable(INT_UART2);
IntMasterEnable();
}
再是DMA初始化
void UDMA_Init(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA);
SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_UDMA);
uDMAEnable();
uDMAControlBaseSet(pui8ControlTable);
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_8|
UDMA_DST_INC_NONE|UDMA_ARB_4);
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_UDMA);
SysCtlPeripheralSleepEnable(SYSCTL_PERIPH_UDMA);
uDMAEnable();
uDMAControlBaseSet(pui8ControlTable);
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_8|
UDMA_DST_INC_NONE|UDMA_ARB_4);
uDMAChannelEnable(UDMA_CH1_UART2TX);
}
}
DMA发送
void UART2DMA_Send(void *p,uint32_t length)
{
uDMAChannelDisable(UDMA_CH1_UART2TX);
uDMAChannelTransferSet(UDMA_CH1_UART2TX|UDMA_PRI_SELECT,
UDMA_MODE_BASIC,(void*)p,(void*)(UART2_BASE+UART_O_DR),
length);
}
{
uDMAChannelDisable(UDMA_CH1_UART2TX);
uDMAChannelTransferSet(UDMA_CH1_UART2TX|UDMA_PRI_SELECT,
UDMA_MODE_BASIC,(void*)p,(void*)(UART2_BASE+UART_O_DR),
length);
}
没有串口中断和DMA中断,因为要发送的数据帧不止一个 中断里面还要改地址
这段代码是一个字节都没发出来。。。不知道什么问题
Susan Yang:
请问您现在使用的是什么板子?自己制作的还是TI的开发板?是使用的什么仿真软件呢?
关于您的仿真错误,您可以看一下下面的说明
www.keil.com/…/4036.htm
user5813287:
回复 Susan Yang:
自己做的板子 串口能正常发送 用DMA搞不定 肯定是代码出错了 keil的jtag仿真
xyz549040622:
回复 user5813287:
官方不是有DMA的例程吗?用官方的例程也没用吗
user5362198:
你DMA发送函数每次配置完了没加ROM_uDMAChannelEnable
user5362198:
回复 user5362198:
我也是最近才把串口的DMA调通的,逛了不少帖子