作者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/m.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