當前位置:編程學習大全網 - 腳本源碼 - 中斷優先級如何設置?

中斷優先級如何設置?

設置中斷優先級的函數,CMISIS已經寫好,並嵌入到了編譯器中,例如,我們用KEIL開發的話,設置中斷優先級的函數位於core_cm0.h文件當中,函數如下所示:

/** \brief Set Interrupt Priority

The function sets the priority of an interrupt.

\note The priority cannot be set for every core interrupt.

\param [in] IRQn Interrupt number.

\param [in] priority Priority to set.

*/

__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)

{

if(IRQn < 0) {

SCB->SHP[_SHP_IDX(IRQn)] = (SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) |

(((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); }

else {

NVIC->IP[_IP_IDX(IRQn)] = (NVIC->IP[_IP_IDX(IRQn)] & ~(0xFF << _BIT_SHIFT(IRQn))) |

(((priority << (8 - __NVIC_PRIO_BITS)) & 0xFF) << _BIT_SHIFT(IRQn)); }

}

從上面函數可以看出,該函數有兩個參數,IRQn是指要設置的中斷向量,priority是中斷優先級,優先級可以是0 1 2 3四個數,0的優先級最大,3的優先級最小。假設妳要設置GPIO1中斷的優先級最高,那麽就是:

NVIC_SetPriority(EINT1_IRQn, 0);

這時,有人會問,”EINT1_IRQn”

答:這個可以在LPC11xx.h文件當中找到,如下所示:

/*

* ==========================================================================

* ---------- Interrupt Number Definition -----------------------------------

* ==========================================================================

*/

typedef enum IRQn

{

/****** Cortex-M0 Processor Exceptions Numbers ***************************************************/

Reset_IRQn = -15, /*!< 1 Reset Vector, invoked on Power up and warm reset */

NonMaskableInt_IRQn = -14, /*!< 2 Non maskable Interrupt, cannot be stopped or preempted */

HardFault_IRQn = -13, /*!< 3 Hard Fault, all classes of Fault */

SVCall_IRQn = -5, /*!< 11 System Service Call via SVC instruction */

PendSV_IRQn = -2, /*!< 14 Pendable request for system service */

SysTick_IRQn = -1, /*!< 15 System Tick Timer */

/****** LPC11Cxx or LPC11xx Specific Interrupt Numbers *******************************************************/

WAKEUP0_IRQn = 0, /*!< All I/O pins can be used as wakeup source. */

WAKEUP1_IRQn = 1, /*!< There are 13 pins in total for LPC11xx */

WAKEUP2_IRQn = 2,

WAKEUP3_IRQn = 3,

WAKEUP4_IRQn = 4,

WAKEUP5_IRQn = 5,

WAKEUP6_IRQn = 6,

WAKEUP7_IRQn = 7,

WAKEUP8_IRQn = 8,

WAKEUP9_IRQn = 9,

WAKEUP10_IRQn = 10,

WAKEUP11_IRQn = 11,

WAKEUP12_IRQn = 12,

CAN_IRQn = 13, /*!< CAN Interrupt */

SSP1_IRQn = 14, /*!< SSP1 Interrupt */

I2C_IRQn = 15, /*!< I2C Interrupt */

TIMER_16_0_IRQn = 16, /*!< 16-bit Timer0 Interrupt */

TIMER_16_1_IRQn = 17, /*!< 16-bit Timer1 Interrupt */

TIMER_32_0_IRQn = 18, /*!< 32-bit Timer0 Interrupt */

TIMER_32_1_IRQn = 19, /*!< 32-bit Timer1 Interrupt */

SSP0_IRQn = 20, /*!< SSP0 Interrupt */

UART_IRQn = 21, /*!< UART Interrupt */

Reserved0_IRQn = 22, /*!< Reserved Interrupt */

Reserved1_IRQn = 23,

ADC_IRQn = 24, /*!< A/D Converter Interrupt */

WDT_IRQn = 25, /*!< Watchdog timer Interrupt */

BOD_IRQn = 26, /*!< Brown Out Detect(BOD) Interrupt */

FMC_IRQn = 27, /*!< Flash Memory Controller Interrupt */

EINT3_IRQn = 28, /*!< External Interrupt 3 Interrupt */

EINT2_IRQn = 29, /*!< External Interrupt 2 Interrupt */

EINT1_IRQn = 30, /*!< External Interrupt 1 Interrupt */

EINT0_IRQn = 31, /*!< External Interrupt 0 Interrupt */

} IRQn_Type;

  • 上一篇:求壹臺3500元左右的主機配置表
  • 下一篇:如何查詢魔獸世界裏我賬號近幾天的登陸IP?
  • copyright 2024編程學習大全網