智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 11077|回复: 61
打印 上一主题 下一主题

分享冷火单片机DMA采集摄像头与DTIM采集外部脉冲

    [复制链接]

17

主题

306

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2447
威望
985
贡献
750
兑换币
660
注册时间
2014-2-21
在线时间
356 小时
跳转到指定楼层
1#
发表于 2014-4-9 09:39:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. void DTIM3_Init()//配置DMA Timer
  2. {
  3.         MCF_INTC0_IMRL&=~MCF_INTC_IMRL_MASKALL;
  4.         MCF_INTC0_IMRL|=MCF_INTC_IMRL_INT_MASK22;//DTIM3
  5.        
  6.         MCF_INTC0_ICR22=MCF_INTC_ICR_IP(6)+MCF_INTC_ICR_IL(2);

  7.         MCF_DTIM_DTMR(3)=0;    //清空dtmr寄存器
  8.         MCF_DTIM_DTER(3)|=MCF_DTIM_DTER_REF;//DMA标志位清零
  9.         MCF_DTIM_DTMR(3)=MCF_DTIM_DTMR_CE_NONE
  10.                                         |MCF_DTIM_DTMR_PS(0)//系统时钟的1分频;
  11.                                         |MCF_DTIM_DTMR_OM
  12.                                         |MCF_DTIM_DTMR_CLK_DIV1 //使用系统时钟sysclk;
  13.                                         |MCF_DTIM_DTMR_ORRI//输出触发的使能
  14.                                         |MCF_DTIM_DTMR_FRR;//每次计数到后清零
  15.         MCF_DTIM_DTXMR(3)|=MCF_DTIM_DTXMR_DMAEN;   //DMA询问使能,中断无效
  16.        
  17. }
  18. void DMA_Init()
  19. {
  20.         MCF_GPIO_PTJPAR = 0x00;      // 配置PTJ为普通IO   
  21.         MCF_GPIO_DDRTJ = 0x00;    // 设置PTJ为输入

  22.         MCF_GPIO_PTCPAR |= MCF_GPIO_PTCPAR_DTIN3_DTIN3  ;
  23.         MCF_DMA_DSR(3) |= MCF_DMA_DSR_DONE;//清除中断标志位
  24.         MCF_SCM_MPR = MCF_SCM_MPR_MPR(0x05);//允许DMA在用户和特权模式下作为主设备
  25.         MCF_SCM_DMAREQC = MCF_SCM_DMAREQC_DMAC3(0x7);//DMA timer3 对应 DMA通道3;
  26.         MCF_DMA_SAR(3)=PTJ_ADDRESS;//源地址
  27.         //MCF_DMA_DAR(3)=(uint32)(&IMG[0][0]);
  28.         //MCF_DMA_BCR(3)=100;
  29.         MCF_DMA_DCR(3)=//MCF_DMA_DCR_INT
  30.                                 MCF_DMA_DCR_DSIZE(1)
  31.                                 |MCF_DMA_DCR_SSIZE(1)//byte
  32.                                 |MCF_DMA_DCR_DINC//目的地址自增
  33.                                 |MCF_DMA_DCR_D_REQ//EEXT bit is cleared when the BCR is exhausted.
  34.                                 |MCF_DMA_DCR_CS//周期窃取
  35.                                 |MCF_DMA_DCR_EEXT;

  36.         //interrupt enable       
  37.         MCF_INTC0_IMRL&=~MCF_INTC_IMRL_MASKALL;
  38.         MCF_INTC0_IMRL&=~MCF_INTC_IMRL_INT_MASK12;//cannel 3
  39.         MCF_INTC0_ICR12=MCF_INTC_ICR_IP(6)+MCF_INTC_ICR_IL(6);
  40.         DTIM3_Init();//配置DMA Timer,设置为PCLK触发
  41. }
  42. void DMA_start(uint8 line)
  43. {
  44.         MCF_DMA_DSR(3) |= MCF_DMA_DSR_DONE;//清除中断标志位
  45.         //MCF_DMA_SAR(3)=PTJ_ADDRESS;
  46.         MCF_DMA_DAR(3)=(uint32)(&IMG[line][0]);//目的地址
  47.         MCF_DMA_BCR(3)=100;//采集个数
  48.         MCF_DTIM_DTRR(3)=28;//调这个参数相当于调定时采集的延时,具体效果可以调这个参数,用上位机看图像效果,如果发现右边都是黑的,那就说明这个数值大了,如果发现仅采到图像的左边部分,那就说明这个数值小了
  49.         MCF_DTIM_DTMR(3)|=MCF_DTIM_DTMR_RST;
  50.         MCF_DMA_DCR(3)|= MCF_DMA_DCR_EEXT;       
  51.        
  52. }

  53. 上面这个是定时触发采集DMA的。
复制代码

这个是外部脉冲触发采集DMA的
  1. //外部脉冲连接到P4引脚,定时读取MCF_DTIM_DTCN(2),读取后可清零
  2. void DTIM2_Init()
  3. {
  4.         MCF_GPIO_PTCPAR |= MCF_GPIO_PTCPAR_DTIN2_DTIN2;
  5.         MCF_DTIM_DTMR(2)=0;
  6.         MCF_DTIM_DTMR(2)|=MCF_DTIM_DTMR_CE_NONE //不进行捕捉
  7.                                         |MCF_DTIM_DTMR_CLK_DTIN //外部时钟源
  8.                                         |MCF_DTIM_DTMR_FRR;//触发事件之后计数值清零
  9.         MCF_DTIM_DTRR(2)=0xFFFFFFFF;//计数器基准值,32位,可以计到0xFFFFFFFF                               
  10.         MCF_DTIM_DTMR(2)|=MCF_DTIM_DTMR_RST;       
  11. }
  12.        
复制代码
这个是采集脉冲的,这样使用冷火单片机的电磁组跟摄像头组的同学们就能实现GPT+DTIM测速了

回复

使用道具 举报

17

主题

306

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2447
威望
985
贡献
750
兑换币
660
注册时间
2014-2-21
在线时间
356 小时
2#
 楼主| 发表于 2014-4-9 09:42:29 | 只看该作者

  1. void DTIM3_Init()//频率80M,配置DMA Timer
  2. {
  3. /********************PCLK触发DMA**********************************/

  4.         MCF_INTC0_IMRL&=~MCF_INTC_IMRL_MASKALL;
  5.         MCF_INTC0_IMRL|=MCF_INTC_IMRL_INT_MASK22;//DTIM3
  6.        
  7.         MCF_INTC0_ICR22=MCF_INTC_ICR_IP(7)+MCF_INTC_ICR_IL(2);
  8.         //MCF_DTIM0_DTMR&=~MCF_DTIM_DTMR_RST;
  9.         MCF_DTIM_DTMR(3)=0;    //清空dtmr寄存器
  10.         MCF_DTIM_DTER(3)|=MCF_DTIM_DTER_CAP;//输入捕捉
  11.         MCF_DTIM_DTER(3)|=MCF_DTIM_DTER_REF;//
  12.         MCF_DTIM_DTMR(3)|=MCF_DTIM_DTMR_CE_RISE;//捕捉上升沿
  13.                                         //|MCF_DTIM_DTMR_CLK_DIV1//使用系统时钟sysclk;
  14.                                         //|MCF_DTIM_DTMR_ORRI//达到基准值,触发DMA或中断
  15.                                         //|MCF_DTIM_DTMR_FRR;//每次计数到后清零
  16.         MCF_DTIM_DTXMR(3)|=MCF_DTIM_DTXMR_DMAEN;//DMA询问使能,中断无效
  17.         MCF_DTIM_DTRR(3)=0xFFFFFFFF;//计数器基准值
  18.         //MCF_DTIM_DTMR(3) |= MCF_DTIM_DTMR_PS(0x5);
  19.         //MCF_DTIM_DTMR(3)|=MCF_DTIM_DTMR_RST;
  20. }
  21. void DMA_Init()
  22. {
  23.         MCF_GPIO_PTJPAR = 0x00;      // 配置PTJ为普通IO   
  24.         MCF_GPIO_DDRTJ = 0x00;    // 设置PTJ为输入

  25.         MCF_GPIO_PTCPAR |= MCF_GPIO_PTCPAR_DTIN3_DTIN3  ;  //输入捕捉
  26.         MCF_DMA_DSR(3) |= MCF_DMA_DSR_DONE;//清除中断标志位
  27.         MCF_SCM_MPR = MCF_SCM_MPR_MPR(0x05);//允许DMA在用户和特权模式下作为主设备
  28.         MCF_SCM_DMAREQC = MCF_SCM_DMAREQC_DMAC3(0x7);//DMA timer3 对应 DMA通道3;
  29.         MCF_DMA_SAR(3)=PTJ_ADDRESS;//源地址
  30.         //MCF_DMA_DAR(3)=(uint32)(&IMG[0][0]);//目的地址
  31.         //MCF_DMA_BCR(3)=100;
  32.         MCF_DMA_DCR(3)=//MCF_DMA_DCR_INT
  33.                                 MCF_DMA_DCR_DSIZE(1)
  34.                                 |MCF_DMA_DCR_SSIZE(1)//byte
  35.                                 |MCF_DMA_DCR_DINC//目的地址自增
  36.                                 |MCF_DMA_DCR_D_REQ//EEXT bit is cleared when the BCR is exhausted.
  37.                                 |MCF_DMA_DCR_CS//周期窃取
  38.                                 |MCF_DMA_DCR_EEXT;

  39.         //interrupt enable       
  40.         MCF_INTC0_IMRL&=~MCF_INTC_IMRL_MASKALL;
  41.         MCF_INTC0_IMRL&=~MCF_INTC_IMRL_INT_MASK12;//cannel 3
  42.         MCF_INTC0_ICR12=MCF_INTC_ICR_IP(6)+MCF_INTC_ICR_IL(6);
  43.         DTIM3_Init();//配置DMA Timer,设置为PCLK触发
  44. }
  45. //每次进行中断后调用这个函数,传入参数为数组第line_counter行的的首地址

  46. void DMA_start(uint8 line)
  47. {
  48. /********************PCLK触发DMA**********************************/       

  49.         MCF_DMA_DSR(3) |= MCF_DMA_DSR_DONE;//清除中断标志位
  50.         //MCF_DMA_SAR(3)=PTJ_ADDRESS;//在该函数中不必更改源地址了,因为一直都是相同的
  51.         MCF_DMA_DAR(3)=(uint32)(&IMG[line][0]);//目的地址
  52.         MCF_DMA_BCR(3)=100;//采集个数
  53.         MCF_DMA_DCR(3)|= MCF_DMA_DCR_EEXT;
  54.         MCF_DTIM_DTMR(3)|=MCF_DTIM_DTMR_RST;       
  55. }



复制代码
回复 支持 反对

使用道具 举报

17

主题

306

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2447
威望
985
贡献
750
兑换币
660
注册时间
2014-2-21
在线时间
356 小时
3#
 楼主| 发表于 2014-4-9 09:43:08 | 只看该作者
2楼是脉冲触发的,大家可以对比一下定时触发跟脉冲触发的程序
回复 支持 反对

使用道具 举报

17

主题

306

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2447
威望
985
贡献
750
兑换币
660
注册时间
2014-2-21
在线时间
356 小时
4#
 楼主| 发表于 2014-4-9 09:44:59 | 只看该作者
中断级别可以不配置,因为没有允许中断服务子程序,所以不会进入中断
回复 支持 反对

使用道具 举报

4

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
321
威望
167
贡献
96
兑换币
89
注册时间
2013-10-14
在线时间
29 小时
毕业学校
常州大学
5#
发表于 2014-4-10 17:11:53 | 只看该作者
我拿回去试试哈
回复 支持 反对

使用道具 举报

4

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
321
威望
167
贡献
96
兑换币
89
注册时间
2013-10-14
在线时间
29 小时
毕业学校
常州大学
6#
发表于 2014-4-10 17:24:29 | 只看该作者
你用的冷火哪一种单片机啊,是MCF52255吗
回复 支持 反对

使用道具 举报

17

主题

306

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2447
威望
985
贡献
750
兑换币
660
注册时间
2014-2-21
在线时间
356 小时
7#
 楼主| 发表于 2014-4-10 17:45:15 | 只看该作者
雷克斯丶LUX 发表于 2014-4-10 17:24
你用的冷火哪一种单片机啊,是MCF52255吗


回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2145
威望
1025
贡献
630
兑换币
654
注册时间
2013-7-2
在线时间
245 小时
8#
发表于 2014-4-10 18:32:28 | 只看该作者
能加个好友吗我扣扣2861539354
回复 支持 反对

使用道具 举报

5

主题

65

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1161
威望
477
贡献
292
兑换币
305
注册时间
2013-11-17
在线时间
196 小时
毕业学校
河南理工大学
9#
发表于 2014-4-11 14:26:23 | 只看该作者
大神,你的测速成功了吗
回复 支持 反对

使用道具 举报

4

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
321
威望
167
贡献
96
兑换币
89
注册时间
2013-10-14
在线时间
29 小时
毕业学校
常州大学
10#
发表于 2014-4-11 17:26:36 | 只看该作者
有用MCF52255采集摄像头的吗,QQ448182268加好友
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-6 13:30 , Processed in 0.053010 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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