你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

手动修改CNT让定时器溢出是否产生中断?

[复制链接]
miraclexue 提问时间:2018-7-6 15:20 /
本帖最后由 miraclexue 于 2018-7-6 17:56 编辑

假设定时器设置为向上计数模式,设置为10us溢出:
1、关闭计数器CEN=0
2、手动设置CNT=10
以上两步是否会让定时器不断产生溢出中断?
收藏 评论17 发布时间:2018-7-6 15:20

举报

17个回答
随风飘扬 回答时间:2018-7-10 09:40:52
个人感觉应该不会, 捕获.PNG ,当CNT计数到达之后并不会马上溢出,而是在下一个计数来临时,CNT值变为0,同时产生溢出,你经CEN设置为0,已经禁止了CNT的计数,虽然讲CNT设置为溢出值,但下一个计数始终不会到来,因此CNT值不会自动变为0,也就不会溢出了

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

cloudcn 回答时间:2018-7-11 19:21:00
miraclexue 发表于 2018-7-10 16:52
我在计数器溢出中断中,先关闭计数器,后完成一些操作,然后 想重新打开计数器开启计数,为了确保是从0开 ...

如果是周期性的中断 在溢出中断中清除中断标志位即可,其它的操作硬件都帮你做了,不用关计数器,改CNT

注意的是溢出中断的执行可能比CNT的值延后一些(受压栈指令周期,高优先级中断等因素影响),在中断函数完成前CNT的值会大于零 如果你要求多少个计数周期进进入下次中断时 是可以这样操作的,

其实你可以这样理解 计数器以精确的 固定的 时间间隔置中断标记,但是有中断标记不是立即进入中断函数,会有些延迟,并且延迟时间可能不固定

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

miraclexue 回答时间:2018-7-10 16:44:32
wolfgang2015 发表于 2018-7-10 10:17
1、计数器为什么要手动控制中断?指令根本无法相应那么快;
2、看看计数器的用法是否有误解;
3、人为修改 ...

感谢回复,定时器配置成向上计数,我的程序需要不断地在定时器中断中反复运行,已保证优先级,执行如下:
1、手动设置CNT方式
tim中断()
{
cen = 0;//关闭计数器,此时cnt的值不固定
......
cnt = 0;//保证计数器从0开始计数
cen = 1;//打开计数器
}
2、采用定时器单脉冲模式onePulse
tim中断()
{
//计数器自动停止
......
cen = 1;//打开计数器
}

由于对于第二种方式不是太了解,在这请问以上两种方式哪个好呢?
miraclexue 回答时间:2018-7-6 17:55:44
wenyangzeng 回答时间:2018-7-10 09:37:36
定时器溢出中断条件:
1、CEN=1
2、允许定时器溢出中断,且系统总中断允许
3、CNT计数溢出

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

jakecumt 回答时间:2018-7-10 09:41:48
看下手册只要是可写的手动是可以设置,产生中断的,但是寄存器运行时间很快的,没必要人为设置吧?

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

wolfgang 回答时间:2018-7-10 10:17:27
1、计数器为什么要手动控制中断?指令根本无法相应那么快;
2、看看计数器的用法是否有误解;
3、人为修改计数器值都不时明智的。系统的周期与指令周期两个不同维度的东西,修改后不一定得到你想要的东西。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

xiajintaord 回答时间:2018-7-10 10:20:54
第一次见到有人这样操作计数器,不知道你要实现什么样的需求

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

cloudcn 回答时间:2018-7-10 12:55:14
估计不可能,ARM 的计数器也是数字逻辑电路
从这个理论讲你改了数据 改到 比目标值 小1 再打开CEN应该可以 触发中断
如果改大了感觉应该溢出 再从0计数 达到目标值才能触发中断

总结就是:计数器没你这么用的,你是在给自己挖坑

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

weiwei4 回答时间:2018-7-10 14:32:19
应该是不会的,要打开定时器才行吧,定时器不打开,那些溢出逻辑应该不会动作的

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

miraclexue 回答时间:2018-7-10 16:45:19
wenyangzeng 发表于 2018-7-10 09:37
定时器溢出中断条件:
1、CEN=1
2、允许定时器溢出中断,且系统总中断允许

感谢回复
miraclexue 回答时间:2018-7-10 16:48:30
yu0405jie 发表于 2018-7-10 09:40
个人感觉应该不会,,当CNT计数到达之后并不会马上溢出,而是在下一个计数来临时,CNT值变为0,同时产生溢 ...

感谢回复,那么请教一下定时器单脉冲模式:假设向上计数
cen = 1;
当计数器溢出(同时自动清除cen),请问此时cnt的值是不是变成0了呢
重新打开cen位,计数器是不是从0开始向上计数呢?
miraclexue 回答时间:2018-7-10 16:49:10
jakecumt 发表于 2018-7-10 09:41
看下手册只要是可写的手动是可以设置,产生中断的,但是寄存器运行时间很快的,没必要人为设置吧? ...

cnt计数器是rw属性,应该可以读写
miraclexue 回答时间:2018-7-10 16:52:02
cloudcn 发表于 2018-7-10 12:55
估计不可能,ARM 的计数器也是数字逻辑电路
从这个理论讲你改了数据 改到 比目标值 小1 再打开CEN应该可以  ...

我在计数器溢出中断中,先关闭计数器,后完成一些操作,然后 想重新打开计数器开启计数,为了确保是从0开始计数,我先将cnt赋值0,然后打开计数器,这样做有问题么?
miraclexue 回答时间:2018-7-10 16:52:27
weiwei4 发表于 2018-7-10 14:32
应该是不会的,要打开定时器才行吧,定时器不打开,那些溢出逻辑应该不会动作的 ...

感谢回复  应该是你说的这样子
12下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版