我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 337|回复: 2

System Tick设置

[复制链接]

该用户从未签到

2

主题

1

回帖

0

积分

一级逆天

积分
0

终身成就奖

发表于 2022-4-6 17:13:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
const static S_TICK_FUNC  cs_ScmFunc =
{
    .Init    = TickInit,
    .TimerMs = TickTimerMs,
    .DelayMs = TickDelayMs,
    .DelayUs = TickDelayUs,
    .Delay   = TickDelay,
};

/* Public variables ----------------------------------------------------------*/
S_TICK_HANDLE  Tick =
{
    .c_pScmFunc = &cs_ScmFunc,
};


/* Private functions ---------------------------------------------------------*/
/**
*  @brief    TickInit
*  @param    None
*  @return   None
*  @details  Interrupt for 50us.
**/
static void TickInit(void)
{
    if (SysTick_Config(SystemCoreClock / 20000))
    {
        while (1);
    }
    else{}
   
    NVIC_SetPriority(SysTick_IRQn, 0x00);
}

/**
*  @brief    TickTimerMs
*  @param    None
*  @return   None
*  @details  None
**/
static uint32_t TickTimerMs(uint32_t *pwTime, const uint32_t wMaskBit)
{
    if (*pwTime)
    {
        if (READ_BIT(Tick.ScmParam.wEvent, wMaskBit))
        {
            CLR_BIT(Tick.ScmParam.wEvent, wMaskBit);
            if (!(-- *pwTime))
            {
                return (true);
            }
            else{}
        }
        else{}
       }
    else{}

    return (false);
}

/**
*  @brief    TickDelayMs
*  @param    None
*  @return   None
*  @details  None
**/
static void TickDelayMs(uint32_t wTime)
{
    while (1)
    {
        if (TickTimerMs(&wTime, TICK_EVENT_PUBLIC))
        {
            return;
        }
        else{}
    }
}

/**
*  @brief    TickDelayUs
*  @param    None
*  @return   None
*  @details  None
**/
static void TickDelayUs(const uint32_t wTime)
{
    uint32_t  wStartCnt = SysTick->VAL;
    uint32_t  wStopCnt  = 0;
    uint32_t  wDeltaCnt = wTime * 72 - 1;
   
   
    while (1)
    {
        wStopCnt = SysTick->VAL;
        
        if ((wStartCnt - wStopCnt) > wDeltaCnt)
        {
            return;
        }
        else{}
    }
}

/**
*  @brief    TickDelay
*  @param    None
*  @return   None
*  @details  None
**/
static void TickDelay(volatile uint32_t wTime)
{
    while (wTime --);
}
回复

使用道具 举报

  • TA的每日心情
    开心
    前天 09:26
  • 签到天数: 86 天

    [LV.6]常住居民II

    51

    主题

    3999

    回帖

    3146

    积分

    二级逆天

    积分
    3146

    终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

    QQ
    发表于 2022-4-7 08:52:14 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 127 天

    [LV.7]常住居民III

    0

    主题

    3494

    回帖

    3773

    积分

    二级逆天

    积分
    3773

    社区居民终身成就奖优秀斑竹奖特殊贡献奖原创先锋奖

    QQ
    发表于 2022-4-7 09:03:46 | 显示全部楼层
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    每日签到,有金币领取。


    Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

    本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

    ( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

    平平安安
    TOP
    快速回复 返回顶部 返回列表