#include "delay.h"
|
|
static uint8_t fac_us=0;//usÑÓʱ±¶³ËÊý
|
static uint16_t fac_ms=0;//msÑÓʱ±¶³ËÊý
|
|
void delay_init(uint32_t sysclkfre)
|
{
|
// 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; //Çå¿Õ¼ÆÊýÆ÷
|
}
|
|
void delay_us(uint32_t us)
|
{
|
uint32_t temp;
|
SysTick->LOAD=us*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; //Çå¿Õ¼ÆÊýÆ÷
|
}
|