查看: 2331|回复: 0

NXP S08P-LITE-V3开发板试用 5、MTIM定时器的使用

[复制链接]
  • TA的每日心情
    开心
    2024-10-25 14:50
  • 签到天数: 1071 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2018-11-20 14:40:23 | 显示全部楼层 |阅读模式
    分享到:
         MTIM是一个8位的modulo timer。     通过MTIM定时器中断,MTIM定时器有两组,MTIM1和MTIM0,这次使用MTIM0驱动LED取反例程来学习MTIM定时器的使用。


         一、硬件部分:
          2.1、LED指示灯硬件
                 MTIM0定时器中断驱动LED灯
           201.png
          2.2、MTIM定时器框图
           1.png



       二、软件部分
       
        2.1、MTIM定时器初始化部分
    1. <font size="3">//MTIM0初始化
    2. void MTIM0_Init( void )
    3. {
    4.     //MTIM interrupt interval: 4800, 16M/256/100
    5.     MTIM0_CLK_CLKS = 0x00;                //时钟源:总线时钟
    6.     MTIM0_CLK_PS = 0x8;                 //时钟分频值:256
    7.     MTIM0_MOD        = 100;                                   //modulo value:
    8.     MTIM0_SC_TRST = 1;                              //MTIM计数器重置
    9.     MTIM0_SC_TOIE = 1;                         //使能中断
    10.     MTIM0_SC_TSTP = 1;                         //停止计数
    11. }

    12. //启动MTIM0定时器
    13. void MTIM0_Start(void)
    14. {
    15.     MTIM0_SC_TSTP   = 0;      // start count
    16. }
    17. //停止MTIM0定时器
    18. void MTIM0_Stop(void)
    19. {
    20.     MTIM0_SC_TSTP   = 1;      // stop count
    21. }</font>
    复制代码
            2.2、MTIM定时器中断处理程序
            
    1. <font size="3">uint16_t mtim0_count = 0;
    2. interrupt VectorNumber_Vmtim0 void  Mtim0_ISR(void)
    3. {
    4.     if(MTIM0_SC_TOF)  // clear the flag
    5.     {
    6.         MTIM0_SC_TOF = 0;               
    7.     }

    8.     mtim0_count++;
    9.     if (mtim0_count > 62)
    10.     {
    11.         LED4_Toggle();
    12.         mtim0_count = 0;
    13.     }
    14. }</font>
    复制代码

            2.3、主程序部分
    1. <font size="3">void main(void)
    2. {
    3.         //Initialize MTIM0, 625Hz interrupt interval, used for toggle LED
    4.         MTIM0_Init();
    5.         MTIM0_Start();
    6.        
    7.         while (1);
    8. }</font>
    复制代码
            2.4、程序有关的寄存器
              101.png
             102.png
             103.png
             
        三、分析下程序定时器计算结果:
            MTIM0_CLK_CLKS = 0x00; //时钟源:总线时钟
            MTIM0_CLK_PS = 0x8; //时钟分频值:256
            MTIM0_MOD        = 100;        //modulo value:
            代码上,时钟选择总线时钟,总线时钟在系统初始化后,变成16M
           时钟的分频值选择是0x08(256分频)
           MTIM计数的模是100
           16000000/256=62500
           62500/100=625Hz,
           上面算出来的是Hz,转换成时间1/625=1.6ms
           MTIM定时器,1.6ms进一次中断。
           if (mtim0_count > 62)
            {
                LED4_Toggle();
                mtim0_count = 0;
            }
           中断程序是计数62次,反转一次LED指示灯。
          定时的时间是63*1.6ms=100.8ms。
          
       
        四、执行结果:
            
            板子上红色LED灯闪烁
            测量LED引脚上的波形:
             F0000TEK.png


            通过示波器看引脚的波形,时间在100ms,和设置的结果一致。










            


    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-19 22:53 , Processed in 0.115307 second(s), 16 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.