#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; //Çå¿Õ¼ÆÊýÆ÷ }