久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

博客專欄

EEPW首頁 > 博客 > 可以在hardfault 中直接軟件復位

可以在hardfault 中直接軟件復位

發布人:電子禪石 時間:2019-10-12 來源:工程師 發布文章

重點:當時遇到一個安全芯片M4 核的,廠家資料比較少,其中就缺少軟件復位功能。

解決的問題就是進入hardfault 后可以軟件復位。直接用core_cm4.h 中的NVIC_SystemReset 就可以。


在嵌入式開發項目過程中,經常需要執行軟件復位,基于ARM cortex-M4核的芯片,通過控制系統控制模塊(System Control Block)的中斷和復位寄存器可以實現設備的軟件復位, 這種復位實現軟件從開始運行,復位CPU的主要組件,除過調試模塊。

寄存器介紹

基于ARM cortex-M4內核的芯片軟件復位功能的實現是通過應用中斷和復位控制寄存器(AIRCR)實現的,復位只與寄存器中的第2位,16~31位有關。下圖是寄存器位的詳細描述。

如果想寫這個寄存器,必須先給VECTKEY域寫0x5FA,負責寄存器將忽略寫操作。SYSRESETREQ位,為系統復位請求位,寫0,無復位請求,寫1請求復位。這一位是只寫位,讀為0。

實現方案

知道了寄存器的定義后,如何通過軟件來實現復位這一功能呢,有兩種方案。

一種是直接調用ARM公司提供的core_cm4.h文件中的復位函數。對照寄存器,這個函數應該很好理解,ARM公司提供的是內聯函數。

/** \brief  System Reset

The function initiates a system reset request to reset the MCU.

*/

__STATIC_INLINE void NVIC_SystemReset(void)

{

__DSB();      /* Ensure all outstanding memory accesses included

               buffered write are completed before reset */

SCB->AIRCR  = ((0x5FA << SCB_AIRCR_VECTKEY_Pos)|

         (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |

SCB_AIRCR_SYSRESETREQ_Msk); /* Keep priority group unchanged */

__DSB();    /* Ensure completion of memory access */

while(1);                   /* wait until reset */

}

這里主要說下__DSB(), DSB(Data Synchronization Barrier.)這里插入DSB的指令函數是為了確保內存操作訪問的完成。

另一種方案是自己按照數據手冊對寄存器的描述實現復位功能的函數。如果是自己寫函數實現,建議也插入DSB指令函數確保內存訪問安全。

#define SCB_AIRCR_VECTKEY_SHIFT         16

#define SCB_AIRCR_PRIGROUP_MASK         0x700u

#define SCB_AIRCR_SYSRESETREQ_MASK      0x4u

void System_vReset(void)

{

__DSB();/* Ensure all outstanding memory accesses included

                 buffered write are completed before reset */

SCB_AIRCR = ( (0x5FA << SCB_AIRCR_VECTKEY_SHIFT) |

                         SCB_AIRCR_PRIGROUP_MASK |

                         SCB_AIRCR_SYSRESETREQ_MASK);   

__DSB();             /* Ensure completion of memory access */

while(1);                   /* wait until reset */

  }

總結

由于芯片廠商的數據手冊都是基于自己芯片的描述,涉及ARM內核的知識需要參考ARM官方文檔,基于ARM cortex-M4內核的芯片,可以參考ARM官方文檔DUI0553A_cortex_m4_dgug,飛思卡爾kv4xMCU的復位同樣涉及到ARM cortex-M4內核的操作,在飛思卡爾參考手冊上是沒有詳細信息的,需要參考ARM的官方文檔,建議大家在學習ARM時候,需要熟悉下內核知識。 https://cloud.tencent.com/developer/article/1089441


*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。

二極管相關文章:二極管工作原理(史上最強二極管攻略)


模擬電路相關文章:模擬電路基礎


倍壓整流電路相關文章:倍壓整流電路原理




關鍵詞:

相關推薦

技術專區

關閉