野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15615|回复: 3

DMA传输完成标志位不能清除,求助

[复制链接]
发表于 2018-1-16 16:33:02 | 显示全部楼层 |阅读模式
2火花
1.问题描述:我通过DMA方式传送数据,模式是单次传送,仿真时候查看传输完成标志位TCIF7已经被置位(我用的是DMA1的通道7作为请求通道)。
数据手册上讲,通过在DMA_IFCR寄存器的相应位写入1,就可以清除对应的标志位。
传输完成标志位对应是DMA_IFCR 的第13位,因此我在DMA_IFCR第13位写1,但是代码并没有被判断执行(因为LED0没有闪动,详见图中代码),
也就是说DMA1 -> ISR & (1 << 13)这个判断没有成立,但是仿真时候寄存器明明置位了呀。这些位是中断标志位,难道必须开启中断才能清除吗?我不知道问题出在哪里,大家帮忙分析下,谢谢!
2.涉及到的代码片段在下面的图片,描述有不清楚的地方可以回帖提出来我再补充。
111.png

回复

使用道具 举报

发表于 2018-1-16 16:34:30 | 显示全部楼层
直接调用库函数来清理试试
回复

使用道具 举报

 楼主| 发表于 2018-1-16 16:54:29 | 显示全部楼层
黎月天 发表于 2018-1-16 16:34
直接调用库函数来清理试试

我将图中的判断代码换成库函数:
while(DMA_GetFlagStatus(DMA1_FLAG_TC7) == RESET)
{
       
}
DMA_ClearFlag(DMA1_FLAG_TC7);
这样子就可以清除了,可是为什么寄存器无法清除标志呢?
回复

使用道具 举报

 楼主| 发表于 2018-1-16 20:24:19 | 显示全部楼层
结贴,问题解决了,通道7的标志位是在25位,不是13位,将移位13改成25
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-6-2 01:24 , Processed in 0.049550 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表