函数说明:
- /**
- * [url=home.php?mod=space&uid=247401]@brief[/url] Initialize and start the SysTick counter and its interrupt.
- *
- * @param ticks number of ticks between two interrupts
- * [url=home.php?mod=space&uid=266161]@return[/url] 1 = failed, 0 = successful
- *
- * Initialise the system tick timer and its interrupt and start the
- * system tick timer / counter in free running mode to generate
- * periodical interrupts.
- */
- static __INLINE uint32_t SysTick_Config(uint32_t ticks)
- {
- if (ticks > SysTick_LOAD_RELOAD_Msk) return (1);
- /* Reload value impossible */重装载值必须小于0XFF FFFF,为什么,这是一个24位的递减计数器。
-
- SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;
- /* set reload register */设置重装载值,SysTick_LOAD_RELOAD_Msk定义见后面
- NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);
- /* set Priority for Cortex-M0 System Interrupts */
- 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 */
- }
- #endif
- 与systick相关的寄存器定义
- /** @addtogroup CMSIS_CM3_SysTick CMSIS CM3 SysTick
- memory mapped structure for SysTick
- @{
- */
- typedef struct
- {
- __IO uint32_t CTRL; /*!< Offset: 0x00 SysTick Control and Status Register */
- __IO uint32_t LOAD; /*!< Offset: 0x04 SysTick Reload Value Register */
- __IO uint32_t VAL; /*!< Offset: 0x08 SysTick Current Value Register */
- __I uint32_t CALIB; /*!< Offset: 0x0C SysTick Calibration Register */
- } SysTick_Type;
-
- 与systick寄存器相关的寄存器及位的定义
-
- /* SysTick Control / Status Register Definitions */控制/状态寄存器
- #define SysTick_CTRL_COUNTFLAG_Pos 16 /*!< SysTick CTRL: COUNTFLAG Position */
- #define SysTick_CTRL_COUNTFLAG_Msk (1ul << SysTick_CTRL_COUNTFLAG_Pos)
- /*!< SysTick CTRL: COUNTFLAG Mask */ 溢出标志位
-
- #define SysTick_CTRL_CLKSOURCE_Pos 2 /*!< SysTick CTRL: CLKSOURCE Position */
- #define SysTick_CTRL_CLKSOURCE_Msk (1ul << SysTick_CTRL_CLKSOURCE_Pos)
- /*!< SysTick CTRL: CLKSOURCE Mask */时钟源选择位,0=外部时钟;1=内核时钟
-
- #define SysTick_CTRL_TICKINT_Pos 1 /*!< SysTick CTRL: TICKINT Position */
- #define SysTick_CTRL_TICKINT_Msk (1ul << SysTick_CTRL_TICKINT_Pos)
- /*!< SysTick CTRL: TICKINT Mask */异常请求位
-
- #define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */
- #define SysTick_CTRL_ENABLE_Msk (1ul << SysTick_CTRL_ENABLE_Pos)
- /*!< SysTick CTRL: ENABLE Mask */使能位
-
- /* SysTick Reload Register Definitions */
- #define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */
- #define SysTick_LOAD_RELOAD_Msk (0xFFFFFFul << SysTick_LOAD_RELOAD_Pos)
- /*!< SysTick LOAD: RELOAD Mask */
-
- /* SysTick Current Register Definitions */
- #define SysTick_VAL_CURRENT_Pos 0 /*!< SysTick VAL: CURRENT Position */
- #define SysTick_VAL_CURRENT_Msk (0xFFFFFFul << SysTick_VAL_CURRENT_Pos)
- /*!< SysTick VAL: CURRENT Mask */
-
- /* SysTick Calibration Register Definitions */
- #define SysTick_CALIB_NOREF_Pos 31 /*!< SysTick CALIB: NOREF Position */
- #define SysTick_CALIB_NOREF_Msk (1ul << SysTick_CALIB_NOREF_Pos)
- /*!< SysTick CALIB: NOREF Mask */
-
- #define SysTick_CALIB_SKEW_Pos 30 /*!< SysTick CALIB: SKEW Position */
- #define SysTick_CALIB_SKEW_Msk (1ul << SysTick_CALIB_SKEW_Pos)
- /*!< SysTick CALIB: SKEW Mask */
-
- #define SysTick_CALIB_TENMS_Pos 0 /*!< SysTick CALIB: TENMS Position */
- #define SysTick_CALIB_TENMS_Msk (0xFFFFFFul << SysTick_VAL_CURRENT_Pos) /*!< SysTick CALIB: TENMS Mask */
- /*@}*/ /* end of group CMSIS_CM3_SysTick */
-
|