CH579中断优先级怎么设置?

CH579文档有说中断优先级可设置,但却没有相关寄存器说明。

例程中有关于中断优先级函数,但也没有相关设置说明,有多少个等级,以及嵌套中断等信息。


/** \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)); }

}


关于priority值的定义没有注释。


你好我们579的手册对优先级是有确切的说明的

emobile_2022-12-12_16-21-13.pngCortex-M0处理器的任何中断都有一个固定或者可编程的中断优先级。当外部中断之类的异常发生时,NVIC将该异常的优先级与当前的优先级进行比较,如果新的优先级更高,当前的任务会被暂定,一些寄存器的值被压栈处理,然后处理器开始处理新的异常程序,这个过程也被称为“抢占”。高优先级的中断完成后,异常返回就会执行,处理器自动进行出栈操作恢复刚才寄存器的值,并继续运行刚才的任务。


只有登录才能回复,可以选择微信账号登录