SysTick优先级在哪定义的

2019-07-20 11:24发布

找到了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 */
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
taizonglai
1楼-- · 2019-07-20 11:38
没调用说明代码中不使用滴答定时器中断!
wuxp1993
2楼-- · 2019-07-20 13:29
 精彩回答 2  元偷偷看……
taizonglai
3楼-- · 2019-07-20 15:13
 精彩回答 2  元偷偷看……
wuxp1993
4楼-- · 2019-07-20 20:38
zuozhongkai 发表于 2016-10-21 16:43
那就说清楚什么例程,你直接一个函数提出来谁知道你有没有用滴答定时器。UCOS的话用汇编设置的滴答定时器 ...

你好。这个好像不是设置滴答定时器的,而是设置PendSV的优先级的。
因为NVIC_SYSPRI14   EQU     0xE000ED22   这句话中, 0xE000ED22是PendSV优先级寄存器。而STRB    R1, [R0]  这句话用于从R1中一个低8 位的字节数据传送到地址为0xE000ED22寄存器中。        
taizonglai
5楼-- · 2019-07-21 02:33
wuxp1993 发表于 2016-10-21 22:51
你好。这个好像不是设置滴答定时器的,而是设置PendSV的优先级的。
因为NVIC_SYSPRI14   EQU     0xE000 ...

把NVIC_PENDSV_PRI  改为0XFFFF,然后指令改为STRH,滴答定时器的优先级就是最低了,如下图
BKFV09}CW)}QO{_~$Y6IIWE.png
wuxp1993
6楼-- · 2019-07-21 05:43
 精彩回答 2  元偷偷看……

一周热门 更多>