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