搜索

[技术问答] NUC029SGE 定时器设置问题

[复制链接]
890|4
手机看帖
扫描二维码
随时随地手机跟帖
zzz5858662|  楼主 | 2021-9-10 11:23 | 显示全部楼层 |阅读模式
库文件提供的
uint32_t TIMER_Open(TIMER_T *timer, uint32_t u32Mode, uint32_t u32Freq)
{
    uint32_t u32Clk = TIMER_GetModuleClock(timer);
    uint32_t u32Cmpr = 0, u32Prescale = 0;

    // Fastest possible timer working freq is (u32Clk / 2). While cmpr = 2, pre-scale = 0.
    if(u32Freq > (u32Clk / 2))
    {
        u32Cmpr = 2;
    }
    else
    {
        if(u32Clk > 64000000)
        {
            u32Prescale = 7;    // real prescaler value is 8
            u32Clk >>= 3;
        }
        else if(u32Clk > 32000000)
        {
            u32Prescale = 3;    // real prescaler value is 4
            u32Clk >>= 2;
        }
        else if(u32Clk > 16000000)
        {
            u32Prescale = 1;    // real prescaler value is 2
            u32Clk >>= 1;
        }

        u32Cmpr = u32Clk / u32Freq;
    }

    timer->CTL = u32Mode | u32Prescale;
    timer->CMP = u32Cmpr;

    return(u32Clk / (u32Cmpr * (u32Prescale + 1)));
}
这个函数的u32Freq参数官方解释为目标工作频率。这个是如何定义的。比如我目标工作频率72M,是不是这样设置:TIMER_Open(TIMER0, TIMER_PERIODIC_MODE, 72000000);
我的本意是想设置一个2.5ms的定时中断。但好像不行。我的设置如下:
void IMR0_Init(void)
{
        //Timer0选择HXT做时钟源,并且不除频
        CLK_SetModuleClock(TMR0_MODULE, CLK_CLKSEL1_TMR0SEL_HXT,0);
        //使能Timer0的时钟
        CLK_EnableModuleClock(TMR0_MODULE);
        //初始化Timer0,周期模式,每秒发生一次中断
        TIMER_Open(TIMER0, TIMER_PERIODIC_MODE, 72000000);
        TIMER_SET_CMP_VALUE(TIMER0, 180000);//修改比较寄存器的值 180000-2.5ms prescale/72*cmp = 25000(us)
        TIMER_SET_PRESCALE_VALUE(TIMER0, 0x0);//修改预分频的值
        //使能中断
        TIMER_EnableInt(TIMER0);
        NVIC_EnableIRQ(TMR0_IRQn);
        //启动Timer0
        TIMER_Start(TIMER0);
}
不知道为啥就是没有实现?

使用特权

评论回复
chenqianqian| | 2021-9-10 18:12 | 显示全部楼层
看下官方例程吧

使用特权

评论回复
xinpian101| | 2021-9-12 17:44 | 显示全部楼层
这个头文件的说明是怎么解释的

使用特权

评论回复
jasontu| | 2021-9-13 08:22 | 显示全部楼层
NUC029xGE_BSP/SampleCode/StdDriver/TIMER_PeriodicINT
CLK_EnableModuleClock(TMR0_MODULE);
CLK_SetModuleClock(TMR0_MODULE,  CLK_CLKSEL1_TMR0SEL_PCLK0, 0);
TIMER_Open(TIMER0, TIMER_PERIODIC_MODE, 400); =>1/400=0.0025 sec
TIMER_EnableInt(TIMER0);
NVIC_EnableIRQ(TMR0_IRQn);
TIMER_Start(TIMER0);

使用特权

评论回复
kiwis66| | 2021-9-13 09:55 | 显示全部楼层
不知道新唐的是不是通用的
7889613eaf71b3a2a.png
上面的是471

使用特权

评论回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

本版热帖

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 1 火星国务卿 得到打赏 ¥425.00
  • 2 yanzhengxin1 得到打赏 ¥350.00
  • 3 gaoyang9992006 得到打赏 ¥265.00
  • 4 Gavin3389 得到打赏 ¥225.00
  • 5 13426257085 得到打赏 ¥200.00
  • 6 呐咯密密 得到打赏 ¥185.00
  • 7 qbwww 得到打赏 ¥160.00
  • 8 两只袜子 得到打赏 ¥155.00
  • 9 yangjiaxu 得到打赏 ¥155.00
  • 10 elephant00 得到打赏 ¥150.00
在线客服 快速回复 返回顶部 返回列表