///////////////////////////////////////////////////////////////////////////////////////////// SysTick.c #include "common.h"
#include "SysTick.h"
static volatile u32 TimingDelay;
extern u32 core_clk_mhz;
/**********************************************
* 函数名:SysTick_Init
* 描述 :启动系统滴答定时器 SysTick
* 输入 :无
* 输出 :无
* 调用 :外部调用
**********************************************/
void SysTick_Init(void)
{
/* core_clk_mhz*1000 1ms中断一次
* core_clk_mhz*10 10us中断一次
* core_clk_mhz 1us中断一次
T = ticks * (1/f)
*/
if (SysTick_Config(core_clk_mhz))
{
/* Capture error */
while (1);
}
// 关闭滴答定时器
SYST_CSR &= ~ SysTick_CSR_ENABLE_MASK;
}
/**********************************************
* 函数名:TimingDelay_Decrement
* 描述 :获取节拍程序
* 输入 :无
* 输出 :无
* 调用 :在 SysTick 中断函数 SysTick_Handler()调用
**********************************************/
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
/**********************************************
* 函数名:Delay_us
* 描述 :us延时程序,1us为一个单位
* 输入 :- nTime
* 输出 :无
* 调用 :Delay_us( 1 ) 则实现的延时为 1us
* :外部调用
**********************************************/
void Delay_us(volatile u32 nTime)
{
TimingDelay = nTime;
// 使能滴答定时器
SYST_CSR |= SysTick_CSR_ENABLE_MASK;
while(TimingDelay != 0);
}
///////////////////////////////////////////////////////////////////////////////////////////// SysTick.h #ifndef __SYSTICK_H
#define __SYSTICK_H
#include "include.h"
void SysTick_Init(void);
void Delay_us(volatile u32 nTime);
void TimingDelay_Decrement(void); //中断调用
#endif /* __SYSTICK_H */
/////////////////////////////////////////////////////////////////////////////////////////////////
|