注册 登录
查看: 719|回复: 18

KL26是不是不能用DMA直接计数

[复制链接]
发表于 2014-5-30 21:13:59 | 显示全部楼层 |阅读模式
我是光电组,以前用k60的时候,是用DMA直接读取编码器的脉冲数,换KL26后找不到相应函数了,难道使用TPM计数吗?
回复

使用道具 举报

发表于 2014-5-30 21:15:12 | 显示全部楼层
KL26 按理也应该可以的,只不过我们没添加这功能。
回复 支持 反对

使用道具 举报

发表于 2014-6-8 11:28:44 | 显示全部楼层
山外メ雲ジ 发表于 2014-5-30 21:15
KL26 按理也应该可以的,只不过我们没添加这功能。

能不能试着编一个呢?我们会用到,谢谢啦
回复 支持 反对

使用道具 举报

发表于 2014-6-8 11:47:46 | 显示全部楼层
zhagsen 发表于 2014-6-8 11:28
能不能试着编一个呢?我们会用到,谢谢啦

自己动手,丰衣足食。

这里有K60的。
【发布DMA计数代码】重新整理&调试 - 智能车资料区 - 山外-vcan123论坛 http://www.vcan123.com/forum.php ... tid=1242&ctid=1

KL26,参考一下即可,注意一点,只能是 A口 或者 C和D口。
C和D只能二选一,不能同时用做DMA触发源。
回复 支持 反对

使用道具 举报

发表于 2014-6-10 14:19:18 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-8 11:47
自己动手,丰衣足食。

这里有K60的。

恩,谢谢大神。强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

发表于 2014-6-10 14:33:40 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-8 11:47
自己动手,丰衣足食。

这里有K60的。

我们需要计两路的数,那就选A端口两个引脚,通过两路DMA通道计数就可以了吧
回复 支持 反对

使用道具 举报

发表于 2014-6-10 14:34:52 | 显示全部楼层
zhagsen 发表于 2014-6-10 14:33
我们需要计两路的数,那就选A端口两个引脚,通过两路DMA通道计数就可以了吧

不行,A只能选择一个触发口、C和D两者也只能选择一个触发口
回复 支持 反对

使用道具 举报

发表于 2014-6-10 14:34:58 | 显示全部楼层
zhagsen 发表于 2014-6-10 14:33
我们需要计两路的数,那就选A端口两个引脚,通过两路DMA通道计数就可以了吧

不行,A只能选择一个触发口、C和D两者也只能选择一个触发口
回复 支持 反对

使用道具 举报

发表于 2014-6-10 17:26:48 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-10 14:34
不行,A只能选择一个触发口、C和D两者也只能选择一个触发口

就是说必须分开,一个接A,另一个接C或D吗?
还有就是KL26上那个寄存器完全不同于K60,那个用于计数的寄存器到底是哪个呀。。。看了半天,对比着看,没有找到。。
KL26 DMA是如何判断传输完毕的呢?
强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

发表于 2014-6-10 17:29:54 | 显示全部楼层
zhagsen 发表于 2014-6-10 17:26
就是说必须分开,一个接A,另一个接C或D吗?
还有就是KL26上那个寄存器完全不同于K60,那个用于计数的寄 ...

参考我们鹰眼代码里面用到的 dma驱动。基本上都是相同的
回复 支持 反对

使用道具 举报

发表于 2014-6-10 17:30:41 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-10 14:34
不行,A只能选择一个触发口、C和D两者也只能选择一个触发口

是BCR?每传输一个就减1?
强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

发表于 2014-6-10 17:31:14 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-10 17:29
参考我们鹰眼代码里面用到的 dma驱动。基本上都是相同的

好的强烈支持,非常感谢哥们
回复 支持 反对

使用道具 举报

发表于 2014-6-10 19:26:00 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-10 17:29
参考我们鹰眼代码里面用到的 dma驱动。基本上都是相同的

在K60里面,源地址与目的地址在计数时,设置为COUNTSADDR和COUNTDADDR,宏定义
#define COUNTSADDR   0x4004000C  //(&counttempaddr)
#define COUNTDADDR   0x4004000C  //(&counttempaddr)

这个4004000C取值是怎么取得?任意?还是?
回复 支持 反对

使用道具 举报

发表于 2014-6-10 19:35:36 来自手机 | 显示全部楼层
zhagsen 发表于 2014-6-10 19:26
在K60里面,源地址与目的地址在计数时,设置为COUNTSADDR和COUNTDADDR,宏定义
#define COUNTSADDR   0x4 ...

任意,只要不干扰程序运行即可
回复 支持 反对

使用道具 举报

发表于 2014-6-10 20:31:02 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-10 19:35
任意,只要不干扰程序运行即可

可以用了,谢谢大神
回复 支持 反对

使用道具 举报

发表于 2014-6-10 20:55:59 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-10 14:34
不行,A只能选择一个触发口、C和D两者也只能选择一个触发口

两路计数的必须分到A和(C或D)端口吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-12 15:11:27 | 显示全部楼层
zhagsen 发表于 2014-6-10 20:55
两路计数的必须分到A和(C或D)端口吗

请问你KL26的DMA计数模块成功了吗?
回复 支持 反对

使用道具 举报

发表于 2014-6-14 10:32:56 | 显示全部楼层
成功了,我发了一个帖子,附程序的
http://www.vcan123.com/forum.php?mod=viewthread&tid=4916
回复 支持 反对

使用道具 举报

发表于 2015-1-8 22:27:09 | 显示全部楼层
山外メ雲ジ 发表于 2014-6-10 19:35
任意,只要不干扰程序运行即可

用这个地址可把我害惨了,搞了一下午都不行,最后我定义一个变量,然后用他的地址,瞬间解决了 怎么没早想到呢
回复 支持 反对

使用道具 举报

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

本版积分规则

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