簡體   English   中英

清除STM32上中斷標志的正確方法

[英]The right way to clear an interrupt flag on STM32

我正在STM32L4上開發一個裸機項目,我從一個現有的代碼庫開始。

ISR已通過以下方式實施:

  1. 讀取外設中的中斷狀態,以了解引發中斷的事件
  2. 做一點事
  3. 清除開頭讀過的標志。

這是清除旗幟的正確方法嗎? 不應該在ISR開始時清除標志嗎? 我的理解是,如果在步驟2中第二次發生相同的外圍事件,它將不會引發第二個IRQ,因此它將丟失。 另一方面,如果您盡快清除該標志,則第二個事件將使CPU中的狀態將變為“掛起並激活”的中斷脈沖:將發生第二個IRQ。

PS:從STM32處理器編程手冊我讀到:“STM32中斷對電平敏感且對脈沖敏感”。

絕對在開始時(除非你在程序邏輯中有特殊原因)因為需要一些時間來實際寫入標志清除寄存器以通過總線傳播。

如果由於某種原因決定將其置於中斷結束時,則應在中斷例程返回之前保留一些指令,放置屏障指令或讀回寄存器,以確保清除操作已在總線上傳播。 否則,您可能會進行“幻像”重復例程調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM