看板 ASM 關於我們 聯絡資訊
因為想做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://www.ptt.cc/bbs/ASM/M.1491988890.A.80A.html ※ 編輯: asdrtyjkl925 (60.251.239.113), 04/12/2017 17:45:28
chuegou: 看起來是timer的中斷flag在isr裡沒清掉... 04/12 19:14
chuegou: 可是你又說gpio確定是1us 04/12 19:16
asdrtyjkl925: 對耶!!我真的沒清Flag!!卡住的原因應該是這個 04/12 19:57
asdrtyjkl925: 感謝提醒:) 不過也真的有量到1us,明天再看看是怎 04/12 19:59
asdrtyjkl925: 麼回事 04/12 19:59
m490521: tick就是很簡單的timer 04/12 20:58
m490521: 通常會拿來做RTOS的timebase 04/12 20:58
m490521: timer除了記時,通常還可以跟其他東西連動 04/12 21:02
m490521: 比如觸發adc轉換,pwm,capture等 04/12 21:04
asdrtyjkl925: 了解 感謝樓上:) 04/13 09:23
asdrtyjkl925: 昨天可能眼殘了,今天仔細一看timer沒清flag的話 04/13 11:52
asdrtyjkl925: 用gpio量每次的間隔才0.87us XD 04/13 11:52
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
chuegou: systick設定有問題吧? 差4倍不合理阿 04/13 12:48
asdrtyjkl925: 好喔 設定是直接Copy example的 還沒仔細去看 等 04/13 16:48
asdrtyjkl925: 等回去公司後來逐行突破:) 04/13 16:48
asdrtyjkl925: 近期要處理其它案子,這個問題要暫時先擱置了ˊˋ 04/17 19:28