RobotHardware-UESTC/Hardware/Firmware/GeekRobotTiny_Firmware v1.0/DRV/delay.c

97 lines
2.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*
********************************************************************************************************
文件名delay.c
功 能延时函数us ms
备 注:
淘 宝https://shop60670850.taobao.com
作 者lilianhe
日 期: 2017-2-6
*********************************************************************************************************
*/
/*
********************************************************************************************************
更新日志:
1.2017-2-6修正了中断中调用出现死循环的错误防止延时不准确,采用do while结构!
*********************************************************************************************************
*/
#include "delay.h"
static u8 fac_us=0;//us延时倍乘数
static u16 fac_ms=0;//ms延时倍乘数
/*
********************************************************************************************************
函数名称Delay_Init(u8 SYSCLK)
函数功能:初始化延迟函数
硬件连接SYSTICK的时钟固定为HCLK时钟的1/8SYSCLK:系统时钟
备 注:
日 期: 2017-2-6
*********************************************************************************************************
*/
void Delay_Init(u8 SYSCLK)
{
// SysTick->CTRL&=0xfffffffb;//bit2清空,选择外部时钟 HCLK/8
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //选择外部时钟 HCLK/8
fac_us=SYSCLK/8;
fac_ms=(u16)fac_us*1000;
}
/*
********************************************************************************************************
函数名称Delay_ms(u16 nms)
函数功能延时nms
硬件连接://SysTick->LOAD为24位寄存器,所以,最大延时为:
//nms<=0xffffff*8*1000/SYSCLK
//SYSCLK单位为Hz,nms单位为ms
//对72M条件下,nms<=1864
备 注:
日 期: 2017-2-6
*********************************************************************************************************
*/
void Delay_ms(u16 nms)
{
u32 temp;
SysTick->LOAD=(u32)nms*fac_ms;//时间加载(SysTick->LOAD为24bit)
SysTick->VAL =0x00; //清空计数器
SysTick->CTRL=0x01 ; //开始倒数
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待时间到达
SysTick->CTRL=0x00; //关闭计数器
SysTick->VAL =0X00; //清空计数器
}
/*
********************************************************************************************************
函数名称void Delay_us(u32 nus)
函数功能延时nus
硬件连接:
备 注:
日 期: 2017-2-6
*********************************************************************************************************
*/
void Delay_us(u32 nus)
{
u32 temp;
SysTick->LOAD=nus*fac_us; //时间加载
SysTick->VAL=0x00; //清空计数器
SysTick->CTRL=0x01 ; //开始倒数
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待时间到达
SysTick->CTRL=0x00; //关闭计数器
SysTick->VAL =0X00; //清空计数器
}
//------------------End of File----------------------------