NXP M0+ 的LPC824SysTick使用,基于LPCXpresso

  • 汉云
  • LV6工程师
  • |      2017-05-10 22:50:07
  • 浏览量 1266
  • 回复:0
本帖最后由 汉云 于 2017-5-10 22:51 编辑 上一篇其实是LED闪烁的例程,闪烁就要有延时或是定时 ,这里使用的是定时,使用的是SysTick,即SysTick_Config函数;
__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 */

}

SysTick_Config函数是一个定义在头文件中的__STATIC_INLINE 修饰的函数。配置中断函数为SysTick_Handler();关于__STATIC_INLINE的含义可以摆渡一下吧,不再搬运。那么来看一下这个函数。SysTick->LOAD是重载寄存器,但是在数据手册中,它的名字是SYST_RVR,其值为SystemCoreClock / TICKRATE_HZ SystemCoreClock就是前面的的函数赋值的内核频率,后面的值为10,即100ms 其他相关寄存器,请注意这个寄存器的基地址与地址偏移。 从工程的头文件来看,其寄存器都是使用宏定义的方式,定义了其基地址。 SysTick->CTRL 即是SYST_CSR寄存器。通过SysTick_CTRL_CLKSOURCE_Msk |SysTick_CTRL_TICKINT_Msk|SysTick_CTRL_ENABLE_Msk;后,寄存器的低三位全部设置为1,即,寄存器的值为0x0007。通过下面寄存器的说明,分别是使能了SysTick、使能了SysTick中断,配置了时钟。
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:0
x
收藏成功!点击 我的收藏 查看收藏的全部帖子