打印
[Kinetis]

K21 UART DMA TX出现重复发送现象

[复制链接]
1694|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
molave20a|  楼主 | 2015-2-27 16:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DMA, UART, tc, CD, TE
本帖最后由 molave20a 于 2015-2-27 16:28 编辑

手上一个项目使用K21和GSM模块通过UART DMA通讯,发现UART DMA TX有重复发送现象(概率不大),即发送20byte,实际发送了40byte(前面20byte数据正常,后面是RAM中随后的20byte)。程序在STM32上跑的好好的,应该不是逻辑问题。代码如下:
配置
=============
        UART1->C2 |=(UART_C2_TE_MASK|UART_C2_RE_MASK| UART_C2_TIE_MASK| UART_C2_RIE_MASK  );
        UART1->C5 |=(UART_C5_RDMAS_MASK|UART_C5_TDMAS_MASK);
        SIM->SCGC6|=SIM_SCGC6_DMAMUX_MASK;
        SIM->SCGC7 |= SIM_SCGC7_DMA_MASK;
        //Enable DMA Channel0 for UART1_TX        
        DMAMUX->CHCFG[0] = DMAMUX_CHCFG_SOURCE(DMA_SOURCE_CHANNEL_TX);
        DMA0->TCD[0].SOFF =1 ;
        DMA0->TCD[0].NBYTES_MLNO =DMA_NBYTES_MLNO_NBYTES(1);
        DMA0->TCD[0].SLAST =0 ;
        DMA0->TCD[0].DADDR =(uint32_t)&(UART1->D);
        DMA0->TCD[0].DOFF =0 ;
        DMA0->TCD[0].ATTR =DMA_ATTR_SSIZE(0)+DMA_ATTR_DSIZE(0);
        DMA0->TCD[0].DLAST_SGA=0;
        DMA0->TCD[0].CSR = 0;
        DMA0->TCD[0].CSR|=DMA_CSR_INTMAJOR_MASK;
        DMA0->TCD[0].CSR|=DMA_CSR_DREQ_MASK;
        DMAMUX->CHCFG[0] |=DMAMUX_CHCFG_ENBL_MASK;
        NVIC_Init(DMA0_IRQn,NVIC_PriorityGroup_1,0,0);
        NVIC_EnableIRQ(DMA0_IRQn);

============================
DMA发送:
void DMA_SendData(uint8_t *ptr,uint16_t len)
{
        DMA0->TCD[0].SADDR = (uint32_t)ptr;
        DMA0->TCD[0].CITER_ELINKNO = len;
        DMA0->TCD[0].BITER_ELINKNO = len;
        DMA0->ERQ |= DMA_ERQ_ERQ0_MASK;
}

相关帖子

沙发
ccw1986| | 2015-2-28 08:44 | 只看该作者
谢谢分享

使用特权

评论回复
板凳
FSL_TICS_Jeremy| | 2015-2-28 09:29 | 只看该作者
从你的代码上看,应该是正确的,你在帖子中说发生概率不高,
也就说一般都是能正常发送数据的,你有没有发现错误发生现象发生的规律呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

7

帖子

1

粉丝