查看: 12714|回复: 0

PIT模块详解与使用示例

[复制链接]
  • TA的每日心情
    开心
    2025-7-11 08:53
  • 签到天数: 301 天

    连续签到: 2 天

    [LV.8]以坛为家I

    3916

    主题

    7534

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    39870
    最后登录
    2025-8-15
    发表于 2020-1-9 14:10:43 | 显示全部楼层 |阅读模式
    为方便参加恩智浦大学生智能车设计竞赛的同学们,成都逐飞科技设计制作了i.MX RT1064核心板,并配套开发了相应的函数库。

    本文为逐飞科技来稿,在此分享给大家,对不参加智能车竞赛的朋友也有很大的帮助作用。

    点此回顾往期内容:
    GPIO详解
    FAST GPIO模块详解与使用示例
    ADC模块和QTIMER模块

    各位朋友好,逐飞科技连载的“基于RT1064的智能车应用入门指导”开发分享又来投稿啦!今天分享PIT(Periodic Interrupt Timer)模块的使用,感谢来自恩智浦的支持,感谢梁平老师帮忙检查修改文中错误,感谢关注“逐飞科技”。

    接下来进入我们今天分享的主题----“PIT(Periodic Interrupt Timer)模块详解与使用示例”。

    1. PIT功能
    PIT(Periodic Interrupt Timer)是周期中断定时器,主要的功能如下:
    • 周期中断:需要周期执行的代码可以放在PIT中断里面,这样可以保证代码执行周期是固定的。
    • 延时:可以使用PIT定时器来精准延时。
    • 计时:可以使用PIT定时器来测量一段程序的运行时间。

    2. PIT库函数
    以下函数均位于zf_pit.c和zf_pit.h:
    35.png

    pit_init函数参数
    36.png
    pit_interrupt函数参数
    37.png
    pit_delay函数参数
    38.png
    pit_start函数参数
    39.png
    pit_get函数参数
    40.png
    pit_close函数参数
    41.png
    PIT_FLAG_GET函数参数
    42.png
    PIT_FLAG_CLEAR函数参数
    43.png
    pit_interrupt_ms函数参数
    44.png
    pit_interrupt_us函数参数
    45.png
    pit_interrupt_ns函数参数
    46.png
    pit_delay_ms函数参数
    47.png
    pit_delay_us函数参数
    48.png
    pit_delay_ns函数参数
    49.png
    pit_get_ms函数参数与返回值
    50.png
    pit_get_us函数参数与返回值
    51.png
    pit_get_ns函数参数与返回值
    52.png

    3. PIT使用示例

    PIT周期中断模式
    1. #include "headfile.h"       //包含头文件  
    2. uint32 pit_time;
    3. void PIT_IRQHandler(void)
    4. {
    5.     if(PIT_FLAG_GET(PIT_CH0))
    6.     {
    7.         //通道0发生中断  
    8.         PIT_FLAG_CLEAR(PIT_CH0);
    9.         pit_time++;
    10.     }
    11.       
    12.     if(PIT_FLAG_GET(PIT_CH1))
    13.     {
    14.         //通道1发生中断  
    15.         PIT_FLAG_CLEAR(PIT_CH1);
    16.     }
    17.       
    18.     if(PIT_FLAG_GET(PIT_CH2))
    19.     {
    20.         //通道2发生中断  
    21.         PIT_FLAG_CLEAR(PIT_CH2);
    22.     }
    23.       
    24.     if(PIT_FLAG_GET(PIT_CH3))
    25.     {
    26.         //通道3发生中断  
    27.         PIT_FLAG_CLEAR(PIT_CH3);
    28.     }
    29.   
    30.     __DSB();
    31. }
    32.   
    33. int main(void)
    34. {
    35.     DisableGlobalIRQ();
    36.     board_init();//务必保留,本函数用于初始化MPU 时钟 调试串口  
    37.   
    38.     pit_init(); //PIT周期定时器初始化 在使用PIT前务必初始化  
    39.     pit_interrupt_ms(PIT_CH0,1);//初始化周期定时器通道0  周期时间为1毫秒  
    40.   
    41.     //总中断最后开启
    42.     EnableGlobalIRQ(0);
    43.     while(1)
    44.     {
    45.          
    46.     }
    47. }
    复制代码
    编程要点1:在使用PIT前务必先调用pit_init函数对PIT模块进行初始化。
    编程要点2:在使用PIT周期中断时,请使用带有单位的宏函数而不是直接使用pit_interrupt函数。
    编程要点3:四个PIT定时器的通道都共用一个中断函数(PIT_IRQHandler函数),在函数内部通过判断中断标志位来判断是哪个定时器触发的中断。
    编程要点4:进入中断之后务必使用PIT_FLAG_CLEAR宏函数来清除中断标志位。

    PIT计时模式
    1. #include "headfile.h"       //包含头文件  
    2. uint32 pit_time;
    3. int main(void)
    4. {
    5.     DisableGlobalIRQ();
    6.     board_init();//务必保留,本函数用于初始化MPU 时钟 调试串口  
    7.   
    8.     pit_init(); //PIT周期定时器初始化 在使用PIT前务必初始化
    9.     //总中断最后开启  
    10.     EnableGlobalIRQ(0);
    11.   
    12.     while(1)
    13.     {
    14.         pit_start(PIT_CH0);             //开始计时  
    15.         systick_delay_ms(100);          //使用滴答定时器延时100毫秒  
    16.         pit_time = pit_get_ms(PIT_CH0); //获取PIT计时时间  
    17.         pit_close(PIT_CH0);             //停止PIT定时器  
    18.     }
    19. }
    复制代码
    编程要点1:在使用PIT前务必先调用pit_init函数对PIT模块进行初始化。
    编程要点2:在使PIT计时时,请使用带有单位的宏函数而不是直接使用pit_get函数。
    编程要点3:在获取计时时间之后,如果想定时器清零则可以将PIT停止以清零定时器的数值。

    本期逐飞科技“PIT(Periodic Interrupt Timer)模块详解与使用示例”专题分享就到这里,大家在使用库的过程中如果遇到什么问题、或发现不足、或对库有什么建议请及时联系“逐飞科技”,我们将尽快完善。
    PS:通过QQ群(逐飞科技__智能车③部:824575535)可以联系到我们,群里也方便大家讨论交流,也可与管理员私信,保障该开源库有问题时可以及时得到解决。然后再分享给各位使用,形成良性循环。接下来我们将会分章节详细介绍多个模块的使用。感谢关注“逐飞科技”,下期再见。


    作者:范兵@逐飞科技          文章出处:恩智浦MCU加油站

    qiandao qiandao
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-8-16 02:59 , Processed in 0.068458 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表