OpenEdv-开源电子网

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

有没有大大知道DMA2半传送是什么啊??

[复制链接]

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2016-8-28
在线时间
20 小时
发表于 2016-10-6 22:18:48 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 爬上阁楼的鱼 于 2016-10-7 10:15 编辑

如题    本来好不容易调好了TIM1捕获加DMA采摄像头  可是出去洗个澡吃个饭回来就挂了   总是半传送中断而没有传输完成中断   有大大遇到过吗??    跪求指点 啊

STM32F4xx_DSP_StdPeriph_Lib_V1.7.1.001.zip (19.8 MB, 下载次数: 121)

最佳答案

查看完整内容[请看2#楼]

莫名其妙的解决了 把dma一次传输一行改成一次一副图像就好了 原来的方法每次一行,dma中断后再关闭dma再等待dma可配置再配好的时间好像太长了,所以总有错过没采集到的地方于是就出现了半传输中断(貌似),只要把一次传输的数据改为一帧的分辨率就可以一次传输一整张画面 然后dma中断后直接用就好啦
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2016-8-28
在线时间
20 小时
 楼主| 发表于 2016-10-6 22:18:49 | 显示全部楼层
莫名其妙的解决了   把dma一次传输一行改成一次一副图像就好了
原来的方法每次一行,dma中断后再关闭dma再等待dma可配置再配好的时间好像太长了,所以总有错过没采集到的地方于是就出现了半传输中断(貌似),只要把一次传输的数据改为一帧的分辨率就可以一次传输一整张画面   然后dma中断后直接用就好啦
回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2016-8-28
在线时间
20 小时
 楼主| 发表于 2016-10-6 22:46:18 | 显示全部楼层
本帖最后由 爬上阁楼的鱼 于 2016-10-7 10:03 编辑

各位+ @正点原子
初始化没有打开半传送   只是仿真的时候看到标志位置一了  而且照样进了中断  所以我就在中断里检测了一下那个标志并清零了
这是我的中断函数
  if((DMA2->LISR&0x800)==0x800)
  {
    DMA2->LIFCR|=1<<11;                     //清除传输完成中断
    now_row++;
    if(now_row<ROW)   
    {
      //while((USART1->SR&0X40)==0);
      //USART_SendData(USART1,0xa0);
      DMA2_Stream1->CR&=~(1<<0);            //关闭DMA传输  
      while(DMA2_Stream1->CR&0X1);         //确保DMA可以被设置   
      DMA2_Stream1->M0AR=(u32)&image[now_row][0];
      DMA2_Stream1->NDTR=188;               //传输长度为jpeg_buf_size*4字节
      DMA2_Stream1->CR|=1<<0;               //重新传输
    }
    if(now_row >= ROW)        
    {
      //__disable_irq();
      mt9v032_finish_flag = 1;
      GPIOC->BSRRH|=1<<13;                  //初始化在MT9V032_Init();   
      display_188_60();
      while((USART1->SR&0X40)==0);
      USART_SendData(USART1,image[20][29]);   
      //__enable_irq();     
    }
  }
  if((DMA2->LISR&0x200)==0x200)
  {
    DMA2->LIFCR|=1<<9;
   
    while((USART1->SR&0X40)==0);
    USART_SendData(USART1,0xee);
  }
  if((DMA2->LISR&0x400)==0x400)
  {
    DMA2->LIFCR|=1<<10;
    DMA2_Stream1->CR|=1<<0;                   //重新传输
    while((USART1->SR&0X40)==0);
    USART_SendData(USART1,0xea);   
  }



最后串口一直在收0xea
回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2016-8-28
在线时间
20 小时
 楼主| 发表于 2016-10-7 09:53:01 | 显示全部楼层
现在大概是一半传输完成   一半半传输  主频提高到192M或者降低到16M都是一半半传送中断,一半传送完成中断  )
回复

使用道具 举报

3

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2016-8-28
在线时间
20 小时
 楼主| 发表于 2016-10-7 11:13:27 | 显示全部楼层
现在场行中断全部配合一下60行还是有6次传输半传输中断
求各位大大  and  @正点原子  大大
就是不太清除半传输中断到底是什么  
回复

使用道具 举报

16

主题

139

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1299
金钱
1299
注册时间
2016-10-18
在线时间
211 小时
发表于 2016-12-21 15:04:08 | 显示全部楼层
你好 我也在改总钻风的摄像头 能交流一下吗
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-22 10:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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