女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于向上計數的單脈沖PWM模式

茶話MCU ? 來源:ST MCU 信息交流 ? 作者:ST MCU 信息交流 ? 2020-07-12 10:46 ? 次閱讀

有人說在MCU的開發應用過程中遇到過一次中斷事件觸發兩次中斷的奇怪事情。有這樣的事嗎?應該說有真有假,這里以STM32為例來聊聊該話題。

所謂假的,就是指基于誤會以為一次事件觸發了兩次甚至多次中斷。比方按鍵事件沒有做好消抖處理,或者中斷請求標志位沒有被及時清零等。順便說下,對于STM32芯片而言,如果中斷請求標志沒有被清零會沒完沒了的循環進相應中斷服務程序。

這里重點聊聊真的,即一次中斷事件進入兩次中斷服務程序,的確有機會碰到。偶爾也有人反映類似問題,比方做UART通信時,一個空閑事件進入兩次空閑中斷,感覺相關標志沒法清除;有人通過定時器觸發SPI傳輸,一個定時器事件竟然進入兩次中斷連續給SPI數據寄存器賦值兩次。

發生這種一次觸發事件進入兩次中斷的情況時,一般有個非常明顯的特征,那就是在中斷服務程序里對中斷請求標志的清零代碼往往放在中斷服務程序的最末尾。我們不妨弄個具體的實例感受下。

下面以一個定時器更新中斷為例。我讓定時器工作在基于向上計數的單脈沖PWM模式,即啟動計數器后,當發生溢出產生更新事件時即告停止。那么每次啟動定時器后按理有且只有一次進入更新中斷服務程序。我在中斷服務程序里放個計數變量,統計進入中斷的次數。我這里使用STM32F4的開發板測試的。

先看看中斷服務程序里清除中斷請求標志的代碼不是放在最后一行的情況。其中變量counterX用來統計進入中斷服務程序次數。

基于向上計數的單脈沖PWM模式

這次測試結果沒問題,一次更新事件對應進入一次中斷服務程序。我將上面的中斷服務程序稍微調整下代碼前后順序,讓清除中斷請求位的代碼放在最后,再看看下面結果。

基于向上計數的單脈沖PWM模式

嗯?counterX結果變為2了,一次觸發事件怎么進了兩次中斷服務程序呢?!

這時不同的人往往會有不同的判斷或結論。比方中斷請求標志一次清不掉啊;同樣的寫法別的系列或型號卻可以,認為太莫名其妙啦!【其實,到底是不是完全相同的寫法只是感覺,就像我上面的寫法不細究的話也可以說是一樣的寫法】,或者說芯片很奇葩啊云云。

怎么會這樣呢?原因就在于那行清除中斷請求位的代碼放在最后,在第一次退出中斷服務程序時該請求位尚未完成被清零的狀態。程序指令執行速度越快,這種可能性就越高。既然該中斷請求位依然保持置1的有效狀態,經硬件觸發再次進入中斷服務程序就順理成章了。

有人會問,我在退出中斷服務程序之前不是已經做了中斷請求位的清零操作嗎?怎么沒有立即生效呢?再怎么“立即”也是需要時間的,程序指令的執行完畢和指令執行后的狀態改變并不一定同步。比方你到包子鋪去跟老板說買3個饅頭,老板滿口應諾后,你不能立即扭頭就走啊。他還需要點時間來處理,不然一輩子都買不到3個饅頭。具體結合到stm32芯片,程序執行是基于哈佛結構的流水線形式,前面代碼執行時依然可以執行后序的指令代碼。

談到這里,有人或許想到在清除中斷請求位的代碼后面加上一句內存屏蔽指令,即DSB。應該說加這個DSB指令是有效的,即該指令前的所有內存訪問指令執行完畢后才執行后序指令代碼。不過,一般來講,在這個地方用不著它,我們只須注意別將清除中斷請求位的代碼放在服務程序的末尾,稍微給清零操作留點實現時間。就像上面打比方買饅頭一樣,給老板一點為你取饅頭的時間就行。

也許有人會說,我中斷服務程序里就只需做中斷請求位清零這一件事怎么辦呢?那你就隨便在清零操作代碼后面隨便一兩行無關緊要的代碼也行,確保不發生1次事件進兩次中斷即可。

剛才前面說了,當清除中斷請求位的代碼放在服務程序最后時,程序指令執行速度越快,一次觸發事件進入兩次中斷服務程序的可能性就越高。我們不妨看看下面基于STM32H7系列的一段中斷服務程序代碼。是TIM3的更新中斷服務程序,截圖里的兩行代碼為中斷服務程序的最末兩行。注意,清除中斷標志的代碼沒有在最末一行。

基于向上計數的單脈沖PWM模式

其基本功能就是每進一次更新中斷,先清中斷標志,然后給SPI數據寄存器賦值令其發送一個16位數據。顯然,結合我們前面的分析,如果代碼這樣寫一般來講是不太可能發生一次事件觸發2次中斷的,事實上當程序代碼在FLASH里運行時也的確沒有任何問題。

但當將中斷服務程序放到RAM里,比方放到DTCM里去運行時發生了功能異常。結果變成了每次更新事件發送的數據不是16位而是32位了。這個32位數據正是因為一次更新事件連續兩次進入中斷服務程序,兩次發送SPI數據。那為什么完全相同的代碼在FLASH里運行沒這個問題呢,因為代碼在DTCM的運行速率要比在FLASH里快,盡管在清中斷請求標志的代碼后面已經有了兼具延時功能的那句針對SPI數據寄存器的賦值語句,在退出中斷前該請求標志位還是未完成清零而再進了一次中斷。

看來,這里還得稍微加多點延時以保證中斷請求標志在退出中斷前被清零。為了避免加延時代碼的盲目性,即要么短了要么長了,我們可以使用對標志位的輪詢方式,將代碼稍加改動變成下面的樣子。

基于向上計數的單脈沖PWM模式

之后,再行驗證測試都是正常的。若有興趣的話,可以在清標志位的代碼后面加DSB指令驗證測試下。
責任編輯:pj

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 芯片
    +關注

    關注

    459

    文章

    52253

    瀏覽量

    437007
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17874

    瀏覽量

    361168
  • 計數器
    +關注

    關注

    32

    文章

    2287

    瀏覽量

    96088
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    開關電源三種控制模式PWM/PFM/PSM

    PWM/PFM/PSM 三種控制模式的定義通常來說,開關電源(DC-DC)有三種最常見的調制方式分別為: 脈沖寬度調制(PWM脈沖
    發表于 06-09 16:11

    MOSFET單脈沖雪崩擊穿能量的失效模式

    單脈沖雪崩擊穿能量(Energy during avalanche for single pulse),即 EAS。指的是MOSFET器件串聯感性負載時,在單次脈沖(工作到關斷)狀態下,所能承受的最大能量消耗,單位是焦耳(J),其值越大,器件在電路中遭遇瞬間過電壓或過電流
    的頭像 發表于 05-15 15:32 ?927次閱讀
    MOSFET<b class='flag-5'>單脈沖</b>雪崩擊穿能量的失效<b class='flag-5'>模式</b>

    MCU定時器/計數

    架構與功能特性? 定時器類型與配置? 高級控制定時器?:支持互補PWM輸出與剎車功能,適用于電機驅動等高精度控制場景。通用定時器?:集成輸入捕獲、輸出比較、單脈沖模式等基礎功能?。 系統定時器?:內置64位SysTick(MTIME)
    的頭像 發表于 04-27 13:54 ?189次閱讀

    STM32F103高級定時器中,開啟單脈沖模式是不是會立刻清除計數器使能位?

    、關閉單脈沖模式,將RCR寄存器寫入最高值255,軟件引發一次更新事件,使RCR的值生效,然后清除標志位并打開更新中斷。 2、將RCR的值設置為4,RCR的值只有在下一次更新事件后生效。使能計數器,計數
    發表于 03-10 07:34

    【RA-Eco-RA2L1-48PIN-V1.0開發板試用】——PWM

    PWM操作中生成死區時間。 11、可以同步啟動、停止和清除任意通道的計數器。 12、計數器可以根據最多4個ELC(Event Link Controller)事件來啟動、停止、清零、向上計數
    發表于 01-26 15:40

    微控制器中的PWM模塊介紹

    : 一、PWM模塊的工作原理 PWM模塊的工作原理基于脈沖寬度調制技術,通過控制信號脈沖的持續時間和頻率來產生一種模擬信號,即PWM信號。
    的頭像 發表于 11-28 17:21 ?1780次閱讀

    脈沖模式調制的優點是什么

    在現代通信和信號處理領域,脈沖模式調制(Pulse Modulation)技術扮演著至關重要的角色。這種技術通過將連續的模擬信號轉換為離散的脈沖序列,為信號的傳輸、處理和存儲提供了多種優勢。以下
    的頭像 發表于 11-26 10:02 ?996次閱讀

    MOSFET規格書中單脈沖雪崩能量EAS如何理解?電路設計咋用它計算MOS會損壞嗎?

    單脈沖雪崩能量簡稱是EAS,這一參數是描述MOSFET在雪崩模式下能承受的能量極限的參數,我們一般在電路設計中拿這個參數來評估MOSFET 的瞬態過壓耐受能力,進而來評估器件在異常瞬態過壓情況下不會失效,
    的頭像 發表于 11-25 11:31 ?5428次閱讀
    MOSFET規格書中<b class='flag-5'>單脈沖</b>雪崩能量EAS如何理解?電路設計咋用它計算MOS會損壞嗎?

    高級定時器PWM輸入模式的配置方法

    我們將向大家介紹高級定時器的另一個常見應用——PWM輸入模式。在本節課中,我們將先圍繞輸入捕獲模式展開,并重點描述PWM輸入模式和涉及的寄存
    的頭像 發表于 11-08 16:48 ?4130次閱讀
    高級定時器<b class='flag-5'>PWM</b>輸入<b class='flag-5'>模式</b>的配置方法

    數字單脈沖多普勒雷達與DSP教學

    電子發燒友網站提供《數字單脈沖多普勒雷達與DSP教學.pdf》資料免費下載
    發表于 10-28 10:17 ?0次下載
    數字<b class='flag-5'>單脈沖</b>多普勒雷達與DSP教學

    使用TMS320C40 DSP實現單脈沖雷達的數字跟蹤器

    電子發燒友網站提供《使用TMS320C40 DSP實現單脈沖雷達的數字跟蹤器.pdf》資料免費下載
    發表于 10-28 10:04 ?0次下載
    使用TMS320C40 DSP實現<b class='flag-5'>單脈沖</b>雷達的數字跟蹤器

    使用如下定時器配置PWM,直接卡死了是什么原因呢?

    stcTim2BaseCfg.enCntDir= BtCntUp;//向上計數,在三角波模式時只讀 stcTim2BaseCfg.enPWMTypeSel= BtIndependentPWM;//獨立輸出PWM
    發表于 09-27 06:21

    LMH6554放大200MHz的周期單脈沖信號,沒有起到放大的作用,反而縮小了,為什么?

    放大200MHz的周期單脈沖信號,沒有起到放大的作用,反而縮小了!
    發表于 09-14 07:57

    使用PWM生成模式驅動BLDC電機

    電子發燒友網站提供《使用PWM生成模式驅動BLDC電機.pdf》資料免費下載
    發表于 09-06 11:28 ?1次下載
    使用<b class='flag-5'>PWM</b>生成<b class='flag-5'>模式</b>驅動BLDC電機

    esp8266的脈沖計數問題求解

    我正在編寫 nodemcu esp8266 的代碼,它涉及脈沖計數、存儲和返回 nodemcu,使用 raspberry pi 作為服務器。為此,我使用了 3 個 nodemcu esp8266
    發表于 07-10 06:49