OpenEdv-开源电子网

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

DCMI+DMA+FPGA 接收 线阵传感器 无法获取数据

[复制链接]

36

主题

124

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-28
在线时间
263 小时
发表于 2017-4-4 00:01:10 | 显示全部楼层 |阅读模式
20金钱
本帖最后由 orta 于 2017-4-4 00:04 编辑

原子大大好,大家好,最近小弟有个项目,是用STM32+FPGA 获取线阵传感器数据。目前架构如下:

(1) FPGA通过DCMI接口与STM32相连接, 数据流为:
1秒1帧图像,一帧图像为 8192个字节,这一秒中 HREF 数量只有一行(因为是线阵)。PCLK为6MHZ, HREF低有效,长度8192个CLK, VSYNC低有效,长度比HREF多一点。

(2) 然后我在STM32中进行调试,首先申请数组
u16 CCD_DATA[4096]; (8192个字节对应4096个像素,每个像素16bit,不使用外部SRAM)

(3) 然后进行DCMI和DMA初始化,并启动
My_DCMI_Init();            
DCMI_DMA_Init((u32)CCD_DATA,1,DMA_MemoryDataSize_HalfWord,DMA_MemoryInc_Disable); (这里我学原子大大教程)
DCMI_Start();

(4) 然后在DCMI的中断中加入
void DCMI_IRQHandler(void)
{
    if(DCMI_GetITStatus(DCMI_IT_FRAME)==SET)
    {
        DCMI_ClearITPendingBit(DCMI_IT_FRAME);
        LED0=!LED0;
        ccd_frame++;  
    }
}

(5) 最后,在MAIN主循环中,用LCD不停刷 CCD_FRAME(观察是否进入中断),以及 CCD_DATA数组的某几个值。


此时,发现问题,首先 LED翻转正确,CCD_FREAM++ 正确(一秒增加一,与实际FPGA发送过来的同步信号吻合),说明DCMI的中断成功不停地进入。
但是,在刷新观察CCD_DATA数组的值发现,只有第一个u16数据有变化(ccd_data[0] 数值在更新),其余所有的数值都是 0,没有任何变化。

找了半天原因,怎么也没明白是哪里配置有问题呢?

谢谢大家!~~~






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

使用道具 举报

36

主题

124

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-28
在线时间
263 小时
 楼主| 发表于 2017-4-4 00:01:57 | 显示全部楼层
另外,我就是用的战舰板子
回复

使用道具 举报

36

主题

124

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-28
在线时间
263 小时
 楼主| 发表于 2017-4-4 00:16:38 | 显示全部楼层
FPGA给STM32的数据协议,我用逻辑分析仪看过,没有问题,发出来的信号与 普通CMOS传感器是一样的,只是普通CMOS传感器在VSYNC有效里有多个 HREF,我这个发的信号只有一个HREF,仅此区别。

所以我觉得应该不是DCMI无法获取这种信号,因为DCMI成功中断,说明是可以获取的,但是这一行HREF 8192个字节,是否真的进入了DMA,我不知道怎么测量。
回复

使用道具 举报

36

主题

124

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-28
在线时间
263 小时
 楼主| 发表于 2017-4-4 08:44:12 | 显示全部楼层
本帖最后由 orta 于 2017-4-4 12:13 编辑

自顶。。。.....
回复

使用道具 举报

36

主题

124

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-28
在线时间
263 小时
 楼主| 发表于 2017-4-4 12:13:58 | 显示全部楼层
orta 发表于 2017-4-4 08:44
自顶。。。.....

求问。。。。
回复

使用道具 举报

36

主题

124

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-28
在线时间
263 小时
 楼主| 发表于 2017-4-4 18:27:27 | 显示全部楼层
自己再顶一下。。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-4-5 20:53:15 | 显示全部楼层
帮顶
回复

使用道具 举报

36

主题

124

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-28
在线时间
263 小时
 楼主| 发表于 2017-4-6 13:10:45 | 显示全部楼层
别沉啊。。。。。
回复

使用道具 举报

14

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
450
金钱
450
注册时间
2017-3-31
在线时间
118 小时
发表于 2017-4-6 15:32:31 | 显示全部楼层
帮顶,感觉我碰到的问题和你这有点像
我用DMA接USART的数据,接收DMA数据的数组只有最一开始会更新一次数据,然后就一直不变,不知道问什么
回复

使用道具 举报

36

主题

124

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-28
在线时间
263 小时
 楼主| 发表于 2017-4-6 21:54:30 | 显示全部楼层
Owen 发表于 2017-4-6 15:32
帮顶,感觉我碰到的问题和你这有点像
我用DMA接USART的数据,接收DMA数据的数组只有最一开始会更新一次数 ...

嗯嗯是哦,哎,DMA这种很不好调试,出问题都不知道是哪里的错
回复

使用道具 举报

14

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
450
金钱
450
注册时间
2017-3-31
在线时间
118 小时
发表于 2017-4-7 09:54:57 | 显示全部楼层

原子哥,我用DMA+USART总线空闲中断接收数据,可是每次开机只能接收到一次数据,再就接收不到了,传输计数的DMA_NDTR寄存器一直是初值。我想不到是什么导致的,能不能给我提供一个调试的思路?
回复

使用道具 举报

36

主题

124

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-28
在线时间
263 小时
 楼主| 发表于 2017-4-8 13:23:18 | 显示全部楼层
自顶。。。
回复

使用道具 举报

14

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
450
金钱
450
注册时间
2017-3-31
在线时间
118 小时
发表于 2017-4-10 13:27:09 | 显示全部楼层
楼主你调试好了么
回复

使用道具 举报

36

主题

124

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-28
在线时间
263 小时
 楼主| 发表于 2017-4-11 23:23:39 | 显示全部楼层
Owen 发表于 2017-4-10 13:27
楼主你调试好了么

还没有呢,这两天有点忙,在调试别的,哎,郁闷
回复

使用道具 举报

14

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
450
金钱
450
注册时间
2017-3-31
在线时间
118 小时
发表于 2017-4-12 08:41:09 | 显示全部楼层
orta 发表于 2017-4-11 23:23
还没有呢,这两天有点忙,在调试别的,哎,郁闷

你试试别打断点,让程序全速运行,在WATCH里看数组的值
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 07:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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