圖1 STM32 的中斷服務
本文以STM32F1,F2,F3,F4 為例(采用Cortex-M3,M4 內核),內核支持中斷嵌套(最多可設置 256 個中斷優先級)。STM32 只使用其中的16 個優先級。
如圖 1 所示,RTOS 一般不會將優先級分組,但是會設置為 3 類,優先級最低的中斷(級別 15)由 SysTick,PendSV 所使用; 中斷級別8~14 的服務程序可以調用內核提供的進程間通信函數,但是此 類中斷服務程序會受到內核的影響,中斷響應可能被 推遲(在進入臨界區后,CPU 會設置為忽略為 8~15 的優先級中斷請求,但中斷控制器會鎖存這些請求,在告別臨界區后重新 打開中斷便可立即產生 中斷請求);級別0~7 的中斷服務程序不使用內核提供的任何函數,即內核不會影響這些中斷,因此 其中斷延遲時間是非常短的。
1. 測試簡介
初始化GPIO PA0 為EXTI 中斷,進入臨界區后按PA0(中斷源),中斷不會即時響應,離開臨界區 后此中斷會被響應。
/* 配置 PA0 為 EXTI 中斷 */ EXTILine0_Config(); CPU_SR_Save(); // 進入臨界區 for (i=0;i<200;i++) { for (j=0;j<50000;j++); } CPU_SR_Restore(); //離開臨界區 |
臨界區實現如下,此臨界區實現屏蔽掉所有中斷優先級的中斷,注意在M3/M4 內核下,可以屏蔽一定 級別的中斷。
__asm void CPU_SR_Save(void) { M RS R0, PRIMASK ; Set prio int mask to mask all (except faults) CPSID I BX LR } __asm void CPU_SR_Restore(void) { MSR PRIMASK, R0 BX LR } |
融創芯城與ST建立倉儲物流合作,亞太區ST MCU開發工具,融創芯城獨家負責倉儲、發放!親,這樣實力雄厚的企業,它的拉人注冊享豪禮,你還猶豫什么?抓緊拉人注冊,享受做小股東的樂趣!!
FreeRTOSConfig.h 中
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 0xf #define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 8 |
文章來源:微信公眾號 融創芯城(一站式電子元器件、PCB、PCBA購買服務平臺,項目眾包平臺,方案共享平臺)
歡迎光臨 電子工程網 (http://m.qingdxww.cn/) | Powered by Discuz! X3.4 |