/*! * COPYRIGHT NOTICE * Copyright (c) 2013,山外科技 * All rights reserved. * 技术讨论:山外论坛 http://www.vcan123.com * * 除注明出处外,以下所有内容版权均属山外科技所有,未经允许,不得用于商业用途, * 修改内容时必须保留山外科技的版权声明。 * * @file MK60_dwt.h * @brief flash函数库 * @author 山外科技 * @version v5.0 * @date 2013-10-22 */ #include "common.h" #define DWT_CLK_HHZ (core_clk_khz ) #define DEM_CR_TRCENA_MASK (1 << 24) #define DWT_CTRL_CYCCNTENA (1 << 0) /*! * @brief 延时(us) * @param us 延时时间 * @since v5.0 */ void dwt_delay_us(uint32 us) { uint32 st,et,ts; DEMCR |= DEM_CR_TRCENA_MASK; //使能 调试时钟 (默认已经打开) DWT_CTRL |= DWT_CTRL_CYCCNTENA; st = DWT_CYCCNT; ts = us * (DWT_CLK_HHZ /(1000)); et = st + ts; if(et < st) { //溢出,需要转动一周 while(DWT_CYCCNT > et); //等待 DWT_CYCCNT 溢出 返回0 } while(DWT_CYCCNT < et); //等待 DWT_CYCCNT 到底计数值 } /*! * @brief 延时(ms) * @param ms 延时时间 * @since v5.0 */ void dwt_delay_ms(uint32 ms) { while(ms--) { dwt_delay_us(1000); } }