打印

DMA中断问题

[复制链接]
3410|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yanggexiaosa|  楼主 | 2013-1-1 21:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

使用DMA实现串口发送。当我不使能DMA传输完成中断时能够正常发送,但是当我使能DMA全部发送完成中断时,串口就无法发送数据。这是什么问题呢。我串口这边接收到40个0。如果正常的话应该是50个字符。

void DMA_Initial(void)
{
        DMA_InitTypeDef DMA_InitStruct;
        DMA_DeInit(DMA1_Channel4);
        DMA_InitStruct.DMA_PeripheralBaseAddr=0x40013804;        //USART->DR
        DMA_InitStruct.DMA_MemoryBaseAddr=(uint32_t)TransBuffer;
        DMA_InitStruct.DMA_DIR=DMA_DIR_PeripheralDST;
        DMA_InitStruct.DMA_BufferSize=50;
        DMA_InitStruct.DMA_PeripheralInc=DMA_PeripheralInc_Disable;
        DMA_InitStruct.DMA_MemoryInc=DMA_MemoryInc_Enable;
        DMA_InitStruct.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;
        DMA_InitStruct.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;
        DMA_InitStruct.DMA_Mode=DMA_Mode_Normal;
        DMA_InitStruct.DMA_Priority=DMA_Priority_High;
        DMA_InitStruct.DMA_M2M=DMA_M2M_Disable;
        DMA_Init(DMA1_Channel4,&DMA_InitStruct);
        DMA_ITConfig(DMA1_Channel4,DMA_IT_TC,ENABLE);
}

以上是DMA配置函数。加上最后一句就出问题了。请问这是什么问题呢?

经过测试发现了如果使用半传输中断的话,串口可以正常发送,读取DMA发送数据的剩余个数返回正确的25。但是这样中断处理函数中的代码执行就有误了(中断里是使小灯闪烁)不灯不闪了。而配置成全部完成中断时,中断可以进,如果是循环模式数据剩余个数读出值为50,为正常模式时为0。也很正常,并且中断服务程序的代码可以正常执行,小灯闪烁。但是数据无法发送了。
我就纳闷了啊。这是怎么了啊。难不成中断占了系统总线使DMA无法传输?可是我先传输后中断的啊。还是DMA使中断服务程序无法执行?
沙发
yanggexiaosa|  楼主 | 2013-1-2 09:48 | 只看该作者
又要沉了,没人回答。自己再摸索下。。

使用特权

评论回复
板凳
csuzzp| | 2013-1-12 16:37 | 只看该作者
顶下  虽然我不会

使用特权

评论回复
地板
pattywu| | 2013-1-12 17:22 | 只看该作者
本帖最后由 pattywu 于 2013-1-12 17:23 编辑

    USART1的发送是否使能了?
    USART1的发送引脚是否正确配置了?
    USART1是否配置正确了?

使用特权

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

本版积分规则

3

主题

21

帖子

1

粉丝