在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

一個有關SYSTICK好奇的問題

麥辣雞腿堡 ? 來源:茶話MCU ? 作者:茶話MCU ? 2023-06-21 15:48 ? 次閱讀

前不久在研究SYSTICK有關問題閱讀相關技術資料時,無意間產生了個小疑惑。

問題是這樣的,我們知道SYSTICK定時器是個24位向下計數(shù)器,每當發(fā)生從1記到0時會讓一個名為COUNTFLAG的標志位置1,如果此時SYSTICK的滴答中斷請求使能了的話,可以對CPU發(fā)起中斷請求。

根據(jù)我們平常STM32的開發(fā)經驗,通常各種外設事件發(fā)起中斷請求時,往往有相應的事件標志跟中斷響應關聯(lián),在中斷服務程序里并將相關事件標志做清零操作,否則它會沒完沒了地發(fā)起中斷請求。基于這點,我想這個COUNTFLAG標志應該也是跟SYSTICK中斷密切相關,溢出時被置位,在SYSTICK中斷服務程序里將其清零。

可是,我們平常的SYSTICK的中斷服務程序里根本沒看到哪里有對COUNTFLAG標志做清零。ARM

Cortex內核手冊針對COUNTFLAG標志的描述中涉及它可以清零的地方有兩處:

第一個地方是在SYSTICK控制寄存器【SYST_CSR】里有介紹,讀它可以清零。說實在的,這點我是通過咨詢ARM公司才理解到位的。第二個地方是在介紹SYSTCIK的當前計數(shù)器寄存器時提到,即對當前計數(shù)器寄存器進行寫操作時也會將COUNTFLAG標志清零。

問題是平常的SYSTICK的中斷服務程序里根本就沒有涉及到上面提到的可能對COUNTFLAG標志清零的操作???!既沒有讀SYSTICK控制寄存器,也沒有對計數(shù)器做寫操作。那這個標志啥時候被清零的呢?如果不清零的話,難道不會沒完沒了地申請中斷,可現(xiàn)在的實踐結果又不是這樣的!

后來,找同事咨詢、討論,有同事說他印象中計數(shù)器重裝時會將該標志清零。如果說重裝可以清COUNTFLAG的話,這樣可以很好地解釋目前的結果。因為既然每次重裝可以清零,自然用不著到中斷服務程序里再做清零,那么在中斷服務程序里見不到對COUNTFLAG的清零操作也就再正常不過了。也因此一時以為找到了答案??珊髞硪幌?,還是有些不對勁的地方。至少有2點說不通。

第一、如果是重裝時清零,該標志是溢出時被置1的,而溢出和重裝兩個動作可以看成同一時刻完成,即置位后馬上被清零。這樣的話,用戶永遠沒有機會見到該標志為1的時候。何時能被軟件用得上呢?定義這個標志意義何在呢?

第二、關于這個標志,在ARM 內核手冊里還說了一句話

意思就是說用戶軟件可以通過查看COUNTFLAG標志來確認SYSTICK之前有發(fā)生過溢出。如果重裝可以清零的話,用戶軟件是不可能有機會讀到該標志為1的時候。也就是說重裝清零結論跟這句話是矛盾的。

經過與同事的來回討論,以及查找其它相關信息,后來認為這個標志可能跟中斷沒有必然關系。這個過程中我也意識到我提出這個標志哪里清零的問題,可能是先入為主的慣性思維在作怪。具體點說,我們認為這個COUNTFLAG標志在發(fā)生溢出時置位沒問題,前面提到的兩種情形下會被清零也沒問題。但是,SYSTICK的滴答中斷不跟這個標志位關聯(lián),它只與計數(shù)器發(fā)生從1計到0的事件有關,即手冊中下面綠色方框框住的這句話。

說實在的,這句話我老早就看到了,只是覺得溢出做為中斷觸發(fā)條件沒錯,但一門心思老糾結著哪個地方對COUNTFLAG清零了。

如果說COUNTFLAG只是個溢出事件標志,滴答中斷不跟它關聯(lián)也是可以理解和接受的。首先,根據(jù)ARM手冊描述來理解這個結論沒有問題,沒有說不通的地方,然后,實現(xiàn)邏輯上也沒啥問題,反正溢出一次就申請一次中斷。

聊到這里,很多STM32用戶【包括本人在內】可能會覺得有點別扭或不習慣,這點我們下面繼續(xù)聊。我就我們針對COUNTFLAG標志跟SYSTICK中斷的關系的理解,說得直白點就是SYSTICK中斷跟COUNTFLAG有無關系、服務程序里要不要清零再次找ARM公司做了確認,他們完全認同我們的理解。即COUNTFLAG只是個溢出事件標志,SYSTICK中斷不跟它關聯(lián),只與計數(shù)器溢出事件本身關聯(lián),并不關心COUNTFLAG的值是0還是1。到此,關于COUNTFLAG要不要在服務程序里清零的疑惑算是塵埃落定。

但是------

用過STM32外設事件申請中斷的人應該很清晰地知道,要想各個外設事件中斷申請能得到響應的話,除了NVIC端接受響應、外設端允許申請中斷外,還得有相應的事件發(fā)生【包括軟件方式】以及對應的事件標志被置位【或者說應該有效】,中斷服務程序跟相應事件標志直接相關,即發(fā)生中斷響應時中斷事件標志必須有效,并需在中斷服務程序里對標志清零,否則會沒完沒了地申請中斷、響應中斷。顯然,這個過程跟前面SYSTICK中斷有點不一樣。SYSTICK中斷雖然設置了溢出事件標志,但其中斷并沒有跟該標志關聯(lián)起來。事實上這樣運行起來也沒有任何問題,那么ST設計的外設申請中斷怎么非要跟標志位關聯(lián)在一起呢?我們平常做STM32開發(fā)時,有時因為疏忽或原理不夠清晰,沒及時清零中斷請求標志讓CPU沒完沒了地進中斷而陷入異常。

why?

整體上,STM32微控制器是由ARM處理器和ST外設集成而來,ARM

處理器又包括內核、核外設【以示區(qū)別于ST公司設計的外設】。其中SYSTICK、FPU、MPU、NVIC等均屬于核外設。也就是說,SYSTICK是ARM的外設,不是ST設計的。既然這樣,難道只是設計思路上的差異?但是,SYSTICK中斷可以不跟事件標志關聯(lián)起來,可以行得通,為什么ST不也這樣設計呢?

一起來看看,嘗試找找原因。

原因在于SYSTICK外設就一個溢出事件可以申請中斷,在NVIC那邊獨立對應一個中斷請求號【IRQ#],所以CPU在響應SYSTICK中斷時根本無需關注那個溢出標志,有那個溢出事件就夠了,因為除了這個溢出事件沒別的事件來申請TICK中斷。
而ST的外設申請中斷時就沒有SYSTICK那么好的福分了。往往是一個外設的多個事件共用1個中斷請求。比方以上面STM32G4系列ADC3的中斷來看,因為它只有1個中斷申請?zhí)枺贑PU看來就一個中斷入口,即所有ADC3相關事件觸發(fā)的中斷共用一個中斷服務程序入口,但可以申請中斷的事件可多了,見下圖【我后面把能觸發(fā)同一中斷請求的事件稱之為兄弟事件】:

再以SPI3和LPTIM1的中斷為例,它倆也各只有一個中斷請求號,同樣可以申請中斷的事件也不少。

顯然,ST設計的外設不能照搬SYSTICK的玩法。如果中斷服務程序不跟觸發(fā)事件標志關聯(lián)起來,進了中斷就不知該基于哪個事件來運行程序;基于某個事件運行了中斷服務程序若不對它清零【包括讀清零、寫清零等】,等兄弟事件觸發(fā)再進來時如何分得清哪是過時事件、哪是新觸發(fā)的即時事件?

或許有人會說,為什么不給每個ST外設事件都安排一個中斷請求號呢?這要考慮到必要性和中斷請求號的有限性。不難理解必要性并不強,目前ST的設計其實沒有啥不合理的地方。另外,內核開放的中斷請求號數(shù)目是也有限的,視不同內核而定。

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

    關注

    2272

    文章

    10924

    瀏覽量

    357604
  • 控制
    +關注

    關注

    4

    文章

    1014

    瀏覽量

    122774
  • Systick
    +關注

    關注

    0

    文章

    62

    瀏覽量

    13150
收藏 人收藏

    評論

    相關推薦

    有關systick問題

    按照3.5庫函數(shù)測試systick,發(fā)現(xiàn)所設置的延時與預期的不對。原本預期是1s燈轉換次狀態(tài),但實際上是9s左右轉換次。程序如下,求指點:void
    發(fā)表于 06-09 21:50

    請問有關SysTick的幾個函數(shù)在哪個文件里?

    請問有關SysTick的幾個函數(shù)在哪個文件里?只在misc.c文件里看到SysTick_CLKSourceConfig();函數(shù)源代碼,謝謝!
    發(fā)表于 11-01 16:51

    有關SysTick定時器基礎知識

    SysTick定時器基礎知識SysTick定時器是簡單的定時器,CM3和CM4內核芯片都有SysTick定時器。
    發(fā)表于 08-19 07:35

    有關SysTick相關的介紹

    SysTick定時器是內核級別的,這個定時器很簡單,主要用來延時和用作實時系統(tǒng)里面的心跳時鐘可以節(jié)省單片機資源,SysTick定時器就是系統(tǒng)滴答定時器,是24位的倒計數(shù)定時器,當
    發(fā)表于 08-19 06:26

    系統(tǒng)節(jié)拍定時(SysTick)

    SysTick簡單的系統(tǒng)時鐘節(jié)拍計數(shù)器,它屬于 ARM Cortex-M3 內核嵌套向量中斷 控制器 NVIC 里的功能單元,
    發(fā)表于 01-13 16:34 ?8次下載

    如何使用STM32實現(xiàn)systick的精確延時

    SYSTICK寄存器初始化 void SysTick_Configuration(void) { if (SysTick_Config(SystemCoreClock / 100
    發(fā)表于 11-21 15:54 ?5978次閱讀

    STM32—關于SYSTICK系統(tǒng)時鐘的詳解及學習筆記

    /*配置SYSTICK很簡單,只需在SySTick_Config中寫入不大于2^24次方的數(shù),就可以產生systick中斷1.無需對NV
    發(fā)表于 11-30 15:51 ?15次下載
    STM32—關于<b class='flag-5'>SYSTICK</b>系統(tǒng)時鐘的詳解及學習筆記

    SysTick 定時器

    11.1關于 SysTick 定時器SysTick定時器(又名系統(tǒng)滴答定時器)是存在于Cortex-M3的定時器,只要是ARM Cotex-M系列內核的MCU都包含這個定時器。使用
    發(fā)表于 12-05 14:51 ?9次下載
    <b class='flag-5'>SysTick</b> 定時器

    STM32_SysTick—系統(tǒng)定時器

    SysTick 的簡介和寄存器的詳細描述。因為 SysTick 是屬于CM3 內核的外設,有關寄存器的定義和部分庫函數(shù)都在 core_CM3.h 這個頭文件中實現(xiàn)。所以學習 SysTick
    發(fā)表于 12-23 19:56 ?2次下載
    STM32_<b class='flag-5'>SysTick</b>—系統(tǒng)定時器

    systick定時器 延時計時

    是cortex M內核的單片機,都擁有這個24位的systick定時器。systick定時器是24位遞減計時器,用戶至于要掌握CMSIS包中的S
    發(fā)表于 01-18 10:28 ?7次下載
    <b class='flag-5'>systick</b>定時器 延時計時

    stm32之SysTick的理解(NVIC)

    1、SysTick的介紹 SysTick定時器被捆綁在NVIC中,用于產生SYSTICK異常(異常號:15)。在以前,大多操作系統(tǒng)需要
    發(fā)表于 02-11 15:39 ?6次下載
    stm32之<b class='flag-5'>SysTick</b>的理解(NVIC)

    文詳解STM32的嘀嗒時鐘(SysTick)

    嘀嗒時鐘(SysTick)是簡單的系統(tǒng)時鐘節(jié)拍計數(shù)器,它屬于Cortex-M4內核嵌套向量中斷控制器(NVIC)里的功能單元。他是
    的頭像 發(fā)表于 01-19 18:11 ?1.4w次閱讀
    <b class='flag-5'>一</b>文詳解STM32的嘀嗒時鐘(<b class='flag-5'>SysTick</b>)

    SysTick時鐘

    Cortex-M3內核的處理器,內部包含了SysTick定時器,SysTick24位的
    的頭像 發(fā)表于 03-01 17:40 ?887次閱讀
    <b class='flag-5'>SysTick</b>時鐘

    關于SYSTICK的COUNTFLAG標志的小疑惑

    前不久在研究SYSTICK有關問題閱讀相關技術資料時,無意間產生了小疑惑。
    的頭像 發(fā)表于 03-26 14:48 ?1640次閱讀

    systick_handler無法進入怎么解決

    在嵌入式系統(tǒng)中,SysTick用于定時器和延時的模塊,通常用于處理實時任務、中斷和延時等。然而,在某些情況下,SysTick中斷處理函數(shù)(sy
    的頭像 發(fā)表于 12-01 15:36 ?5276次閱讀
    主站蜘蛛池模板: 美女网站色视频 | 伊人网综合在线观看 | 亚洲 欧美 自拍 卡通 综合 | 第四色亚洲 | 午夜毛片免费观看视频 | 在线电影天堂 | 国产精品嫩草影院人体模特 | 爱爱帝国亚洲一区二区三区 | 国产成人永久在线播放 | 国产片一区二区三区 | 久久婷五月综合 | 美女扒开尿口给男人爽的视频 | 五月天婷婷网址 | 国产色综合天天综合网 | 欧美极品第1页专区 | 欧美色综合高清免费 | 最新在线视频 | 成年片色大黄全免费 | 日韩一二三级 | 免费观看视频高清www | 亚洲人免费视频 | 中国videos偷窥 | avhd101天天看新片 | 成人三级在线播放线观看 | 91av在线视频观看 | 欧美日韩精品一区二区另类 | 一级做a爱片特黄在线观看 一级做a爱片特黄在线观看免费看 | 成人中文字幕一区二区三区 | www.日本免费| 午夜精品久久久久久99热 | 欧美不卡视频在线 | 亚洲综合日韩欧美一区二区三 | 免费啪啪网站 | 四虎国产成人亚洲精品 | 一级精品视频 | 亚洲高清免费视频 | 亚洲第一色视频 | 激情综合六月 | 韩国床戏合集三小时hd中字 | 亚洲第一视频网 | 91啦视频在线 |