OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4778|回复: 6

DMA中断问题

[复制链接]

10

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2012-12-27
在线时间
0 小时
发表于 2014-4-12 16:12:47 | 显示全部楼层 |阅读模式
小弟在写程序,遇到这个问题好几天了,不得解,还望大神赐教,主程序仿真显示一直死在while(!Finish_Flag);这一句。但是再DMA的中断函数中已明显执行了Finish_Flag=1。
 while(1)
  {
    PDout(2)=0;
while((bDeviceState != CONFIGURED)||(buffer_out[0]!=0x55)||(buffer_out[4]!=0x0D));
  while(!Finish_Flag); // 等待上一次结束
start();
Finish_Flag=0;
// 执行到这了
while(!Finish_Flag); // 等待一次采集结束
//    没有执行到这
  }
程序流程是:等待串口数据,判断,开始定时器,在定时器的中断里开启AD与DMA,DMA传送了N个数据之后进中断,在DMA中断函数中虚拟串口发送数据,并且Finish_Flag=1。我已经收到了一次数据,但是发送完之后应该跳到程序的开头等待下一次的指令,可是程序一直死在while(!Finish_Flag);DMA中断服务函数如下
void DMAChannel1_IRQHandler(void)
{

   u16 i,j;
disable();                                         //关闭定时器与AD
for(i=0;i<5;i++)
buffer_out=0;                               //将判断条件置零
for(j=0;j<3694;j++)
{
CCD_Buf[2*j]=(u8)(ADC_Buf[j] & 0x00FF);
CCD_Buf[2*j+1]=(u8)((ADC_Buf[j] & 0xFF00)>>8);//d字节在前,高字节在后
    }
pbuffer_in_usb=CCD_Buf;
usart_2_usb_send();                   //发送采集的数据,已经收到一次数据
Finish_Flag=1;                             //标志位改变,使能重新开始接受指令
PDout(2)=1;
                //执行到这了       
         DMA1->IFCR|=0x0F;   // 清DMA中断标志 PDout(2)=1;
}
用PD2标记执行
请大神们多多指点。


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2012-12-27
在线时间
0 小时
 楼主| 发表于 2014-4-12 16:13:04 | 显示全部楼层
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-4-12 17:05:49 | 显示全部楼层
DMA需要重新设置才能再次开启
回复 支持 反对

使用道具 举报

10

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2012-12-27
在线时间
0 小时
 楼主| 发表于 2014-4-12 17:24:11 | 显示全部楼层
回复【3楼】ricefat:
---------------------------------
应该不是这个问题,我是在第一次DMA中断中发送数据,然后程序一直在while(!Finish_Flag);
回复 支持 反对

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-4-12 18:09:09 | 显示全部楼层
回复【4楼】BULELJ:
---------------------------------
Finish_Flag=0;
这句放到start();前面
回复 支持 反对

使用道具 举报

10

主题

70

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2012-12-27
在线时间
0 小时
 楼主| 发表于 2014-4-12 18:17:42 | 显示全部楼层
回复【5楼】ricefat:
---------------------------------
唉,试过了,也不是啊
回复 支持 反对

使用道具 举报

13

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
235
金钱
235
注册时间
2012-11-17
在线时间
18 小时
发表于 2014-4-12 20:47:52 | 显示全部楼层
要贴就贴完整点吧,光是从这部分内容好像看不出问题
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-12 14:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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