金牌会员
- 积分
- 2447
- 威望
- 985
- 贡献
- 750
- 兑换币
- 660
- 注册时间
- 2014-2-21
- 在线时间
- 356 小时
|
- void DTIM3_Init()//配置DMA Timer
- {
- MCF_INTC0_IMRL&=~MCF_INTC_IMRL_MASKALL;
- MCF_INTC0_IMRL|=MCF_INTC_IMRL_INT_MASK22;//DTIM3
-
- MCF_INTC0_ICR22=MCF_INTC_ICR_IP(6)+MCF_INTC_ICR_IL(2);
- MCF_DTIM_DTMR(3)=0; //清空dtmr寄存器
- MCF_DTIM_DTER(3)|=MCF_DTIM_DTER_REF;//DMA标志位清零
- MCF_DTIM_DTMR(3)=MCF_DTIM_DTMR_CE_NONE
- |MCF_DTIM_DTMR_PS(0)//系统时钟的1分频;
- |MCF_DTIM_DTMR_OM
- |MCF_DTIM_DTMR_CLK_DIV1 //使用系统时钟sysclk;
- |MCF_DTIM_DTMR_ORRI//输出触发的使能
- |MCF_DTIM_DTMR_FRR;//每次计数到后清零
- MCF_DTIM_DTXMR(3)|=MCF_DTIM_DTXMR_DMAEN; //DMA询问使能,中断无效
-
- }
- void DMA_Init()
- {
- MCF_GPIO_PTJPAR = 0x00; // 配置PTJ为普通IO
- MCF_GPIO_DDRTJ = 0x00; // 设置PTJ为输入
- MCF_GPIO_PTCPAR |= MCF_GPIO_PTCPAR_DTIN3_DTIN3 ;
- MCF_DMA_DSR(3) |= MCF_DMA_DSR_DONE;//清除中断标志位
- MCF_SCM_MPR = MCF_SCM_MPR_MPR(0x05);//允许DMA在用户和特权模式下作为主设备
- MCF_SCM_DMAREQC = MCF_SCM_DMAREQC_DMAC3(0x7);//DMA timer3 对应 DMA通道3;
- MCF_DMA_SAR(3)=PTJ_ADDRESS;//源地址
- //MCF_DMA_DAR(3)=(uint32)(&IMG[0][0]);
- //MCF_DMA_BCR(3)=100;
- MCF_DMA_DCR(3)=//MCF_DMA_DCR_INT
- MCF_DMA_DCR_DSIZE(1)
- |MCF_DMA_DCR_SSIZE(1)//byte
- |MCF_DMA_DCR_DINC//目的地址自增
- |MCF_DMA_DCR_D_REQ//EEXT bit is cleared when the BCR is exhausted.
- |MCF_DMA_DCR_CS//周期窃取
- |MCF_DMA_DCR_EEXT;
- //interrupt enable
- MCF_INTC0_IMRL&=~MCF_INTC_IMRL_MASKALL;
- MCF_INTC0_IMRL&=~MCF_INTC_IMRL_INT_MASK12;//cannel 3
- MCF_INTC0_ICR12=MCF_INTC_ICR_IP(6)+MCF_INTC_ICR_IL(6);
- DTIM3_Init();//配置DMA Timer,设置为PCLK触发
- }
- void DMA_start(uint8 line)
- {
- MCF_DMA_DSR(3) |= MCF_DMA_DSR_DONE;//清除中断标志位
- //MCF_DMA_SAR(3)=PTJ_ADDRESS;
- MCF_DMA_DAR(3)=(uint32)(&IMG[line][0]);//目的地址
- MCF_DMA_BCR(3)=100;//采集个数
- MCF_DTIM_DTRR(3)=28;//调这个参数相当于调定时采集的延时,具体效果可以调这个参数,用上位机看图像效果,如果发现右边都是黑的,那就说明这个数值大了,如果发现仅采到图像的左边部分,那就说明这个数值小了
- MCF_DTIM_DTMR(3)|=MCF_DTIM_DTMR_RST;
- MCF_DMA_DCR(3)|= MCF_DMA_DCR_EEXT;
-
- }
- 上面这个是定时触发采集DMA的。
复制代码
这个是外部脉冲触发采集DMA的- //外部脉冲连接到P4引脚,定时读取MCF_DTIM_DTCN(2),读取后可清零
- void DTIM2_Init()
- {
- MCF_GPIO_PTCPAR |= MCF_GPIO_PTCPAR_DTIN2_DTIN2;
- MCF_DTIM_DTMR(2)=0;
- MCF_DTIM_DTMR(2)|=MCF_DTIM_DTMR_CE_NONE //不进行捕捉
- |MCF_DTIM_DTMR_CLK_DTIN //外部时钟源
- |MCF_DTIM_DTMR_FRR;//触发事件之后计数值清零
- MCF_DTIM_DTRR(2)=0xFFFFFFFF;//计数器基准值,32位,可以计到0xFFFFFFFF
- MCF_DTIM_DTMR(2)|=MCF_DTIM_DTMR_RST;
- }
-
复制代码 这个是采集脉冲的,这样使用冷火单片机的电磁组跟摄像头组的同学们就能实现GPT+DTIM测速了
|
|