Red de conocimiento del abogados - Respuesta jurídica de la empresa - ¿Cómo configurar la prioridad de interrupción?

¿Cómo configurar la prioridad de interrupción?

La función para establecer la prioridad de interrupción ha sido escrita por CMISIS e integrada en el compilador. Por ejemplo, si usamos KEIL para desarrollar, la función para establecer la prioridad de interrupción se encuentra en el archivo core_cm0.h. La función es la siguiente:

/** \brief Establecer prioridad de interrupción

La función establece la prioridad de una interrupción.

\note La prioridad. no se puede configurar para cada interrupción central.

\param [in] IRQn Número de interrupción.

\param [in] prioridad Prioridad a configurar.

*/

__STATIC_INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t prioridad)

{

if(IRQn < 0) {

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

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

else {

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

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

Como se puede ver en la función anterior, esta función tiene dos parámetros, IRQn se refiere al vector de interrupción que se configurará y la prioridad es la prioridad de interrupción. La prioridad puede ser cuatro números: 0 1. 2 3. 0 tiene la prioridad más alta. 3 tiene la prioridad más baja.

Supongamos que desea establecer la prioridad más alta de la interrupción GPIO1, entonces es:

NVIC_SetPriority(EINT1_IRQn, 0);

En este momento, alguien preguntará: "EINT1_IRQn"

Respuesta: Esto se puede encontrar en el archivo LPC11xx.h, como se muestra a continuación:

/*

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

* ---------- Definición del número de interrupción --------------- --- ---------------

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

*/

typedef enum IRQn

{

/****** Números de excepciones del procesador Cortex-M0 *** *** **********************************************/

Reset_IRQn = -15, /*!< 1 Restablecer vector, invocado al encender y restablecer en caliente */

NonMaskableInt_IRQn = -14, /*!< 2 Interrupción no enmascarable, no se puede ser detenido o reemplazado */

HardFault_IRQn = -13, /*!< 3 Fallo grave, todas las clases de fallo */

SVCall_IRQn = -5, /*!< 11 Sistema Llamada de servicio mediante instrucción SVC */

PendSV_IRQn = -2, /*!< 14 Solicitud pendiente de servicio del sistema */

SysTick_IRQn = -1, /*!< 15 Tick del sistema Temporizador */

/****** LPC11Cxx o LPC11xx Números de interrupción específicos *************************** * *************************/

WAKEUP0_IRQn = 0, /*!< Se pueden utilizar todos los pines de E/S como fuente de activación */

WAKEUP1_IRQn = 1, /*!< Hay 13 pines en total para 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,

WAKEUP

UP11_IRQn = 11,

WAKEUP12_IRQn = 12,

CAN_IRQn = 13, /*!< CAN Interrupción */

SSP1_IRQn = 14, /*!< SSP1 Interrupción */

I2C_IRQn = 15, /*!< Interrupción I2C */

TIMER_16_0_IRQn = 16, /*!< Interrupción Timer0 de 16 bits */

TIMER_16_1_IRQn = 17, /*!< Interrupción del temporizador 1 de 16 bits */

TIMER_32_0_IRQn = 18, /*!< Interrupción del temporizador 0 de 32 bits */

TIMER_32_1_IRQn = 19, / *!< Interrupción del temporizador 1 de 32 bits */

SSP0_IRQn = 20, /*!< Interrupción SSP0 */

UART_IRQn = 21, /*!< Interrupción UART */

Reservado0_IRQn = 22, /*!< Interrupción reservada */

Reservado1_IRQn = 23,

ADC_IRQn = 24, /*!< Interrupción del convertidor A/D */

WDT_IRQn = 25, /*!< Interrupción del temporizador de vigilancia */

BOD_IRQn = 26, /*!< Interrupción de detección de apagón (BOD) */

FMC_IRQn = 27, /*!< Interrupción del controlador de memoria flash */

EINT3_IRQn = 28, /*!< Interrupción externa 3 Interrupción */

EINT2_IRQn = 29, /*! < Interrupción externa 2 Interrupción */

EINT1_IRQn = 30, /*!< Interrupción externa 1 Interrupción */

EINT0_IRQn = 31, /*!< Interrupción externa 0 Interrupción */

}IRQn_Type;