forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

wujiazhi
2024-06-13 72def895431ad7a08e635b11f3da738e2b2c4618
HARDWARE/DELAY/Delay.c
@@ -1,44 +1,38 @@
/******************************************************************************
 * 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ÑÓʱ±¶³ËÊý
static uint8_t  fac_us=0;//usÑÓʱ±¶³ËÊý
static uint16_t fac_ms=0;//msÑÓʱ±¶³ËÊý
//³õʼ»¯ÑÓ³Ùº¯Êý
//SYSTICKµÄʱÖӹ̶¨ÎªHCLKʱÖÓµÄ1/8
//SYSCLK:ϵͳʱÖÓ
void Delay_init()
void delay_init(uint32_t sysclkfre)
{
//   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ʱÖÓÊý
}
//   CMU->SYSCLKCR &= SYSTICK_CLOCK_SOURCE_SYSCLK;//systick¹¤×÷ʱÖÓÑ¡Ôñsysclk
//   CMU_SYSCLKCR_STCLKSEL_Set(0x00000003);//¿âº¯Êý
   CMU->SYSCLKCR &= ~SYSTICK_CLOCK_SOURCE_U_SYSCLK;
   CMU->SYSCLKCR |= SYSTICK_CLOCK_SOURCE_U_SYSCLK;
   fac_us=sysclkfre/1000000;;   //ΪϵͳʱÖÓµÄ1/12
   fac_ms=(uint16_t)fac_us*1000;//ÿ¸ömsÐèÒªµÄsystickʱÖÓÊý
}
void delay_ms(uint32_t ms)
{
   uint32_t temp;
   SysTick->LOAD=(uint32_t)ms*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;       //Çå¿Õ¼ÆÊýÆ÷
}
//ÑÓʱnus
//nusΪҪÑÓʱµÄusÊý.
void delay_us(u32 nus)
{
   u32 temp;
   SysTick->LOAD=nus*fac_us; //ʱ¼ä¼ÓÔØ
void delay_us(uint32_t us)
{
   uint32_t temp;
   SysTick->LOAD=us*fac_us; //ʱ¼ä¼ÓÔØ
   SysTick->VAL=0x00;        //Çå¿Õ¼ÆÊýÆ÷
   SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;          //¿ªÊ¼µ¹Êý    
   do
@@ -49,30 +43,3 @@
   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;       //Çå¿Õ¼ÆÊýÆ÷
}