TI中文支持网
TI专业的中文技术问题搜集分享网站

看了很多UDMA的例程 写了下代码 结果压根儿不能用 仿真还出现encounter an improper argument

先是串口初始化

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_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);
 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);
}
没有串口中断和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调通的,逛了不少帖子

赞(0)
未经允许不得转载:TI中文支持网 » 看了很多UDMA的例程 写了下代码 结果压根儿不能用 仿真还出现encounter an improper argument
分享到: 更多 (0)