注册 登录
查看: 523|回复: 9

[K60] DMA模块脉冲计数

[复制链接]
发表于 2014-2-20 20:03:01 | 显示全部楼层 |阅读模式
请问,用DMA模块进行脉冲计数,是属于硬件不占用CPU,  还是每发生一次中断计一个数?
DMA_count_Init(DMA_CH4, PTC5 , 0x7FFF, DMA_rising);
还有0x7FFF是代表计数到0x7fff发生中断,再清零?还是工中断0x7fff次?

回复

使用道具 举报

发表于 2014-2-20 20:20:40 | 显示全部楼层
属于硬件不占用CPU,计数的最大值是0x7FFF,如果达到0x7FFF就溢出,如果使能了中断,那溢出时会发生中断。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-21 09:51:51 | 显示全部楼层
说不得 发表于 2014-2-20 20:20
属于硬件不占用CPU,计数的最大值是0x7FFF,如果达到0x7FFF就溢出,如果使能了中断,那溢出时会发生中断。

哦,谢谢啊,再问一下,那如果是0x01,会不会中断过于频繁,占用大量的cpu?
回复 支持 反对

使用道具 举报

发表于 2014-2-21 11:22:15 | 显示全部楼层
逝去的星光 发表于 2014-2-21 09:51
哦,谢谢啊,再问一下,那如果是0x01,会不会中断过于频繁,占用大量的cpu?

如果你没开中断,那么是不会进入中断的,只不过是计数到1的时候就停止计数
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-21 13:50:43 | 显示全部楼层
onlyfly 发表于 2014-2-21 11:22
如果你没开中断,那么是不会进入中断的,只不过是计数到1的时候就停止计数

谢谢,那就是这样会占用CPU,那怎样不进入中断,但可以计数
回复 支持 反对

使用道具 举报

发表于 2014-2-21 13:51:54 | 显示全部楼层
逝去的星光 发表于 2014-2-21 13:50
谢谢,那就是这样会占用CPU,那怎样不进入中断,但可以计数

默认是没开中断的,你自己手动开dma中断,才会触发中断
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-21 14:27:27 | 显示全部楼层
说不得 发表于 2014-2-21 13:51
默认是没开中断的,你自己手动开dma中断,才会触发中断

u32 DMA_count_get(DMA_CHn CHn)
{
    u32 temp =  count_init[CHn] - DMA_CITER_ELINKNO(CHn)  ;
    return temp;
}
不开中断,用上升沿触发,是不是每接受一个上升沿,这个计数器就减一?
回复 支持 反对

使用道具 举报

发表于 2014-2-21 14:28:49 | 显示全部楼层
逝去的星光 发表于 2014-2-21 14:27
u32 DMA_count_get(DMA_CHn CHn)
{
    u32 temp =  count_init[CHn] - DMA_CITER_ELINKNO(CHn)  ;

自己试试就知道,是减1
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-21 19:01:54 | 显示全部楼层
格拉姆 发表于 2014-2-21 14:28
自己试试就知道,是减1

嗯,谢谢
回复 支持 反对

使用道具 举报

发表于 2014-3-21 10:55:52 来自手机 | 显示全部楼层
格拉姆 发表于 2014-2-21 14:28
自己试试就知道,是减1

请问DMA脉冲计数,可以同时对两路脉冲计数吗?[两个编码器]
回复 支持 反对

使用道具 举报

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

本版积分规则

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