forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

周巍
2024-04-11 91ef77c00ed797b1048c5187f416e351e646a009
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
 
/******************************************************************************
 * 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;       //Çå¿Õ¼ÆÊýÆ÷