找到了SysTick设置优先级的函数,默认设置优先级为0xF0,但是没找到调用的地方?
__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks){
if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */
SysTick->LOAD = ticks - 1; /* set reload register */
NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); /* set Priority for Systick Interrupt */
SysTick->VAL = 0; /* Load the SysTick Counter Value */
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
SysTick_CTRL_TICKINT_Msk |
SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */
return (0); /* Function successful */
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
你好。这个好像不是设置滴答定时器的,而是设置PendSV的优先级的。
因为NVIC_SYSPRI14 EQU 0xE000ED22 这句话中, 0xE000ED22是PendSV优先级寄存器。而STRB R1, [R0] 这句话用于从R1中一个低8 位的字节数据传送到地址为0xE000ED22寄存器中。
把NVIC_PENDSV_PRI 改为0XFFFF,然后指令改为STRH,滴答定时器的优先级就是最低了,如下图
一周热门 更多>