作者asdrtyjkl925 (阿斯拉)
看板ASM
标题[问题] timer和tick有何不同?
时间Wed Apr 12 17:21:28 2017
因为想做delay 1us的功能
目前用的MCU(TI MSP432P401R)
没办法让用类似直接数cpu cycle的方式来delay
本想说只好用timer来达成
但是看到官方提供的example里有个东西叫做"SysTick"
看它的机制和timer很像,可以说是功能精简的timer吧
然後做了个实验
tick和timer都设定每间隔1us就产生一次interrupt
(tick和timer有用gpio toggle的方式量过都确定是1us)
然後在ISR里都只执行i++这一行指令
分别跑一次程式,看结果有何差异
开timer、关tick的时候,只要enable timer interrupt
程式就会陷在timer interrupt ISR里,再也没办法跑回到main
而关timer、开tick时,即使enable tick interrupt
程式依然能回到main,继续跑之後的while(1) loop都没问题
请问这两者一样都是间隔1us产生interrupt
为什麽用timer程式就会被卡死
而tick则是无影响呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.251.239.113
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/ASM/M.1491988890.A.80A.html
※ 编辑: asdrtyjkl925 (60.251.239.113), 04/12/2017 17:45:28
1F:推 chuegou: 看起来是timer的中断flag在isr里没清掉... 04/12 19:14
2F:→ chuegou: 可是你又说gpio确定是1us 04/12 19:16
3F:→ asdrtyjkl925: 对耶!!我真的没清Flag!!卡住的原因应该是这个 04/12 19:57
4F:→ asdrtyjkl925: 感谢提醒:) 不过也真的有量到1us,明天再看看是怎 04/12 19:59
5F:→ asdrtyjkl925: 麽回事 04/12 19:59
6F:推 m490521: tick就是很简单的timer 04/12 20:58
7F:→ m490521: 通常会拿来做RTOS的timebase 04/12 20:58
8F:推 m490521: timer除了记时,通常还可以跟其他东西连动 04/12 21:02
9F:推 m490521: 比如触发adc转换,pwm,capture等 04/12 21:04
10F:→ asdrtyjkl925: 了解 感谢楼上:) 04/13 09:23
11F:→ asdrtyjkl925: 昨天可能眼残了,今天仔细一看timer没清flag的话 04/13 11:52
12F:→ asdrtyjkl925: 用gpio量每次的间隔才0.87us XD 04/13 11:52
13F:→ asdrtyjkl925: 有清flag就真的是1us,感谢大大指点迷津:D 04/13 11:52
因为我也有用OLED(控制的IC是SSD1305)
timer清了flag之後
肉眼感觉上画面更新速率比用tick还快
所以另外做了量测:
tick和timer在设定间隔1us
将OLED画面填满
分别计算两者情况下所需要的时间
开timer,关tick,所需时间为22.8ms
关timer,开tick,所需时间为99.0ms
两者都关掉,所需时间为22.6ms
这样看来用tick会比较影响系统效能
是因为这颗MCU的特性吗?
是否若换了另一颗MCU,可能就会有不同的结果?
※ 编辑: asdrtyjkl925 (60.251.239.113), 04/13/2017 11:53:33
14F:推 chuegou: systick设定有问题吧? 差4倍不合理阿 04/13 12:48
15F:→ asdrtyjkl925: 好喔 设定是直接Copy example的 还没仔细去看 等 04/13 16:48
16F:→ asdrtyjkl925: 等回去公司後来逐行突破:) 04/13 16:48
17F:→ asdrtyjkl925: 近期要处理其它案子,这个问题要暂时先搁置了ˊˋ 04/17 19:28