|
/******************************************************************************
|
* Copyright (C) 2014-2015 HangZhou SiZhu Co.,LTD.
|
*
|
*-----------------------------------------------------------------------------
|
* File: Delay.c
|
* Description: time delay: delay_us & delay_ms
|
* Author: Lishoujian (867693272@qq.com)
|
* Date: Jan 8, 2015
|
*****************************************************************************/
|
|
/* ----------------------- Platform includes --------------------------------*/
|
|
#include "delay.h"
|
#include "sys.h"
|
//////////////////////////////////////////////////////////////////////////////////
|
|
static u8 fac_us=0;//usÑÓʱ±¶³ËÊý
|
static u16 fac_ms=0;//msÑÓʱ±¶³ËÊý
|
|
|
|
//³õʼ»¯ÑÓ³Ùº¯Êý
|
//SYSTICKµÄʱÖӹ̶¨ÎªHCLKʱÖÓµÄ1/8
|
//SYSCLK:ϵͳʱÖÓ
|
void Delay_init()
|
{
|
// SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //Ñ¡ÔñÍⲿʱÖÓ HCLK/8
|
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK); //Ñ¡ÔñÍⲿʱÖÓ HCLK/8
|
fac_us=12*SystemCoreClock/HSE_VALUE; //ΪϵͳʱÖÓµÄ1/8
|
fac_ms=(u16)fac_us*1000;//ÿ¸ömsÐèÒªµÄsystickʱÖÓÊý
|
}
|
|
|
|
//ÑÓʱnus
|
//nusΪҪÑÓʱµÄusÊý.
|
void delay_us(u32 nus)
|
{
|
u32 temp;
|
SysTick->LOAD=nus*fac_us; //ʱ¼ä¼ÓÔØ
|
SysTick->VAL=0x00; //Çå¿Õ¼ÆÊýÆ÷
|
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //¿ªÊ¼µ¹Êý
|
do
|
{
|
temp=SysTick->CTRL;
|
}
|
while(temp&0x01&&!(temp&(1<<16)));//µÈ´ýʱ¼äµ½´ï
|
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //¹Ø±Õ¼ÆÊýÆ÷
|
SysTick->VAL =0X00; //Çå¿Õ¼ÆÊýÆ÷
|
}
|
|
|
|
//ÑÓʱnms
|
//×¢ÒânmsµÄ·¶Î§
|
//SysTick->LOADΪ24λ¼Ä´æÆ÷,ËùÒÔ,×î´óÑÓʱΪ:
|
//nms<=0xffffff*8*1000/SYSCLK
|
//SYSCLKµ¥Î»ÎªHz,nmsµ¥Î»Îªms
|
//¶Ô72MÌõ¼þÏÂ,nms<=1864
|
|
void delay_ms(u16 nms)
|
{
|
u32 temp;
|
SysTick->LOAD=(u32)nms*fac_ms;//ʱ¼ä¼ÓÔØ(SysTick->LOADΪ24bit)
|
SysTick->VAL =0x00; //Çå¿Õ¼ÆÊýÆ÷
|
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //¿ªÊ¼µ¹Êý
|
do
|
{
|
temp=SysTick->CTRL;
|
}
|
while(temp&0x01&&!(temp&(1<<16)));//µÈ´ýʱ¼äµ½´ï
|
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //¹Ø±Õ¼ÆÊýÆ÷
|
SysTick->VAL =0X00; //Çå¿Õ¼ÆÊýÆ÷
|
}
|