智能车制作

标题: kenites DMA [打印本页]

作者: 月下听蝉    时间: 2012-2-16 13:43
标题: kenites DMA
有谁的kenites DMA可以用了,自己搞了很久都不可以,求分享

补充内容 (2012-2-16 16:15):
打错了,是kinetis

补充内容 (2012-2-17 16:33):
唉。。。DMA还是不能连续触发,没方法来,改用GPIO触发了,可以用了,可以连续触发,效果应该也不会差,不过感觉很不专业,本来是可以直接触发的,我却要先用GPIO触发,然后再中断函数里用软件开启DMA。。。
作者: 荔枝糖葫芦    时间: 2012-2-16 17:37
[attach]17961[/attach]
用DMA采到不知道为何物的路过……

作者: 月下听蝉    时间: 2012-2-16 17:44
荔枝糖葫芦 发表于 2012-2-16 17:37
用DMA采到不知道为何物的路过……

能不能分享一下你的代码啊,我的不能硬件触发,只能软件触发{:soso_e154:}
作者: 荔枝糖葫芦    时间: 2012-2-16 17:46
月下听蝉 发表于 2012-2-16 17:44
能不能分享一下你的代码啊,我的不能硬件触发,只能软件触发

DMA_ERQ                 |=  (1 << channel);                  /* Enable DMA request. Important! */

我已开始也是只能软件触发,加了这一句之后就可以了,不知道情况一不一样

话说软件触发能采到有效数据不?

作者: 月下听蝉    时间: 2012-2-16 17:53
荔枝糖葫芦 发表于 2012-2-16 17:46
DMA_ERQ                 |=  (1

可以。其实硬件触发也可以,不过只能传一个数(可以连续触发,可以连续传),如果传数组的话,就只能有效地传一次,而不能连续有效地传,不知道是什么问题,会不会是目标地址指针变了?
作者: 月下听蝉    时间: 2012-2-16 17:56
荔枝糖葫芦 发表于 2012-2-16 17:46
DMA_ERQ                 |=  (1

程序里有这个
DMA_ERQ                 |=  (1 << channel);                  /* Enable DMA request. Important! */

DMA_ERQ和DMA_SERQ有什么区别?


作者: 荔枝糖葫芦    时间: 2012-2-16 18:00
月下听蝉 发表于 2012-2-16 17:56

没什么区别……后者可以快速对某一通道进行设置,前者可以一次性对所有通道进行设置。

作者: 荔枝糖葫芦    时间: 2012-2-16 18:03
月下听蝉 发表于 2012-2-16 17:53
可以。其实硬件触发也可以,不过只能传一个数(可以连续触发,可以连续传),如果传数组的话,就只能有效 ...

我感觉我也是地址那里没有设置好,minor loop和major loop,dlast、citer与nbytes的关系还没搞太清楚……

作者: 月下听蝉    时间: 2012-2-16 18:03
荔枝糖葫芦 发表于 2012-2-16 18:00
没什么区别……后者可以快速对某一通道进行设置,前者可以一次性对所有通道进行设置。

能加QQ聊吗?
作者: 月下听蝉    时间: 2012-2-16 18:07
荔枝糖葫芦 发表于 2012-2-16 18:03
我感觉我也是地址那里没有设置好,minor loop和major loop,dlast、citer与nbytes的关系还没搞太清楚…… ...

唉。。。我也是啊,你的程序能有效连续地传数组吗
作者: 月下听蝉    时间: 2012-2-16 18:09
荔枝糖葫芦 发表于 2012-2-16 18:03
我感觉我也是地址那里没有设置好,minor loop和major loop,dlast、citer与nbytes的关系还没搞太清楚…… ...

能不能连续触发并有效地传数组
作者: 荔枝糖葫芦    时间: 2012-2-16 18:11
月下听蝉 发表于 2012-2-16 18:09
能不能连续触发并有效地传数组

连续触发没问题,但是数据有没有效不知道……数组里的数据全满了,其他的就不知道了……

作者: 月下听蝉    时间: 2012-2-16 18:13
荔枝糖葫芦 发表于 2012-2-16 18:11
连续触发没问题,但是数据有没有效不知道……数组里的数据全满了,其他的就不知道了……

求代码参考{:soso_e154:}
作者: 荔枝糖葫芦    时间: 2012-2-16 18:17
月下听蝉 发表于 2012-2-16 18:13
求代码参考

队长说只能给参考代码……


void DMA1_Init(void)
{
        SIM_SCGC6|=SIM_SCGC6_DMAMUX_MASK;//打开DMA多路复用器时钟
        SIM_SCGC7|=SIM_SCGC7_DMA_MASK;//打开DMA模块时钟
        DMAMUX_CHCFG1=DMAMUX_CHCFG_SOURCE(52);//DMA通道1对应52号DMA请求,即PORTD
        DMA_ERQ|=DMA_ERQ_ERQ1_MASK;//使能通道1硬件DMA请求
       
        DMA_TCD1_CITER_ELINKNO=DMA_CITER_ELINKNO_CITER(10);//当前主循环次数
        DMA_TCD1_BITER_ELINKNO=DMA_BITER_ELINKNO_BITER(10);//起始主循环次数
        DMA_TCD1_SADDR=(uint32)&GPIOB_PDIR;//设置源地址GPIO口
        DMA_TCD1_SOFF=0;//源地址不变
        //DMA_TCD1_NBYTES_MLOFFYES=DMA_NBYTES_MLOFFYES_NBYTES(1)+DMA_NBYTES_MLOFFNO_SMLOE_MASK+DMA_NBYTES_MLOFFYES_MLOFF(-4);//传送4字节
        DMA_TCD1_NBYTES_MLNO=DMA_NBYTES_MLNO_NBYTES(1);//每次读取一字节
        DMA_TCD1_SLAST=0;//主循环结束后源地址0回写tcd
        DMA_TCD1_DLASTSGA=0;//主循环结束后目的地址-10回写tcd
        DMA_TCD1_DADDR=(uint32)PORTB_BUFF;//设置目的地址
        DMA_TCD1_DOFF=1;//每次写目的地址加1
        DMA_TCD1_ATTR=DMA_ATTR_SSIZE(0)+DMA_ATTR_DSIZE(0);//源数据宽度8bit,目的数据宽度8bit
        DMA_TCD1_CSR=0;
        DMAMUX_CHCFG1|=DMAMUX_CHCFG_ENBL_MASK;//DMA通道使能
        //DMA_TCD1_CSR|=DMA_CSR_INTMAJOR_MASK;//使能DMA中断
        //DMA_TCD0_CSR|=DMA_CSR_START_MASK;
}



作者: 月下听蝉    时间: 2012-2-16 18:19
好的,谢谢啦
作者: 月下听蝉    时间: 2012-2-16 18:20
荔枝糖葫芦 发表于 2012-2-16 18:17
队长说只能给参考代码……

不过这个我也有
作者: 月下听蝉    时间: 2012-2-16 18:25
荔枝糖葫芦 发表于 2012-2-16 18:17
队长说只能给参考代码……

要不我发代码给你,你帮我看看哪里错
作者: 荔枝糖葫芦    时间: 2012-2-16 18:34
月下听蝉 发表于 2012-2-16 18:25
要不我发代码给你,你帮我看看哪里错

估计咱们水平都差不多……邮箱通过消息发给你了~
作者: 月下听蝉    时间: 2012-2-16 18:56
荔枝糖葫芦 发表于 2012-2-16 18:34
估计咱们水平都差不多……邮箱通过消息发给你了~

程序发过去了
作者: AK47-CTBU    时间: 2012-2-22 13:12

作者: zy317409314    时间: 2012-3-6 18:15
还再用xs呢,还没移值至K60呢,感觉好难啊,看你们提取图像的中断都弄那么久
作者: BlackFire531    时间: 2013-1-29 10:28
看起来很神奇,感谢lz分享!




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2