当前位置: 首页 > news >正文

S32K144入门笔记(十三):LPIT的API函数解读

目录

1. SDK中的函数

2. API函数的释义

2.1 获取默认参数

2.2 初始化

2.3 启动与停止

2.4 计数值的设置于读取

2.5 中断API


1. SDK中的函数

        在使用SDK的非抽象驱动函数时,函数的定义与声明在文件lpit_driver.c和lpit_driver.h中,一共有19个函数:

void LPIT_DRV_GetDefaultConfig(lpit_user_config_t * const config);
void LPIT_DRV_GetDefaultChanConfig(lpit_user_channel_config_t * const config);
void LPIT_DRV_Init(uint32_t instance,
                   const lpit_user_config_t * userConfig);
void LPIT_DRV_Deinit(uint32_t instance);
status_t LPIT_DRV_InitChannel(uint32_t instance,
                              uint32_t channel,
                              const lpit_user_channel_config_t * userChannelConfig);
void LPIT_DRV_StartTimerChannels(uint32_t instance,
                                 uint32_t mask);
void LPIT_DRV_StopTimerChannels(uint32_t instance,
                                uint32_t mask);
status_t LPIT_DRV_SetTimerPeriodByUs(uint32_t instance,
                                     uint32_t channel,
                                     uint32_t periodUs);
status_t LPIT_DRV_SetTimerPeriodInDual16ModeByUs(uint32_t instance,
                                                 uint32_t channel,
                                                 uint16_t periodHigh,
                                                 uint16_t periodLow);
uint64_t LPIT_DRV_GetTimerPeriodByUs(uint32_t instance,
                                     uint32_t channel);
uint64_t LPIT_DRV_GetCurrentTimerUs(uint32_t instance,
                                    uint32_t channel);

void LPIT_DRV_SetTimerPeriodByCount(uint32_t instance,
                                    uint32_t channel,
                                    uint32_t count);
void LPIT_DRV_SetTimerPeriodInDual16ModeByCount(uint32_t instance,
                                                uint32_t channel,
                                                uint16_t periodHigh,
                                                uint16_t periodLow);
uint32_t LPIT_DRV_GetTimerPeriodByCount(uint32_t instance,
                                        uint32_t channel);
uint32_t LPIT_DRV_GetCurrentTimerCount(uint32_t instance,
                                       uint32_t channel);
void LPIT_DRV_EnableTimerChannelInterrupt(uint32_t instance,
                                          uint32_t mask);
uint32_t LPIT_DRV_GetInterruptFlagTimerChannels(uint32_t instance,
                                                uint32_t mask);
void LPIT_DRV_ClearInterruptFlagTimerChannels(uint32_t instance,
                                              uint32_t mask);

2. API函数的释义

2.1 获取默认参数

void LPIT_DRV_GetDefaultConfig(lpit_user_config_t * const config)

        获取默认的全局设置参数,获取的参数通过形参指针实现,具体的参数只有两个:是否使能debug模式下运行和是否使能在打盹模式下运行。

void LPIT_DRV_GetDefaultChanConfig(lpit_user_channel_config_t * const config)

        获取默认的通道参数,获取的参数通过形参指针实现,具体的参数与配置工具的通道设置参数类型一一对应。

        以上两个API函数笔者只是测试SDK库的默认参数时用了一次,平时使用率特别低。

2.2 初始化

void LPIT_DRV_Init(uint32_t instance,
                   const lpit_user_config_t *userConfig)

        初始化LPIT模块参数,参数正式通过配置工具生成的宏定义和初始化结构体,通过调用该API函数来设置模块的时钟、debug时的运行模式、打盹时的运行模式等。

void LPIT_DRV_Deinit(uint32_t instance)

        该API函数时用来禁止模块,如果想再次启用LPIT,则需要调用LPIT_DRV_Init。

status_t LPIT_DRV_InitChannel(uint32_t instance,
                              uint32_t channel,
                              const lpit_user_channel_config_t * userChannelConfig)

         初始化定时器通道,有关于通道的设置参数通过配置工具生成的结构体作为形参传递并设置。调用该API只是设置了通道的参数并不会启动定时器。如果想要启动通道定时器则需要调用LPIT_DRV_StartTimerChannels。如果想要更改计数周期则需要调用LPIT_DRV_SetTimerPeriodByUs或者LPIT_DRV_SetTimerPeriodByCount。

2.3 启动与停止

void LPIT_DRV_StartTimerChannels(uint32_t instance,
                                 uint32_t mask)

        该API的作用比较单纯,就是通过形参来选型具体通道和设置以启动通道计数器。

void LPIT_DRV_StopTimerChannels(uint32_t instance,
                                uint32_t mask)

        停止通道计数器,如果是脉冲累加模式,当有脉冲来临时会加载初值。

2.4 计数值的设置于读取

status_t LPIT_DRV_SetTimerPeriodByUs(uint32_t instance,
                                     uint32_t channel,
                                     uint32_t periodUs)

         设置定时器的周期计数值,单位为微妙。此处需要注意计数值溢出的问题,需要用户自己计算好,此函数只能作用于单个通道。

status_t LPIT_DRV_SetTimerPeriodInDual16ModeByUs(uint32_t instance,
                                                 uint32_t channel,
                                                 uint16_t periodHigh,
                                                 uint16_t periodLow)

        设置定时器通道处于双16位周期计数器模式时的周期值,单位为微秒。同样需要注意溢出问题。 

uint64_t LPIT_DRV_GetTimerPeriodByUs(uint32_t instance,
                                     uint32_t channel)

         获取定时器的周期值,单位为微秒。如果定时器通道的操作模式为 32 位周期计数器或双 16 位周期计数器,那么这里返回的周期是有意义的。

uint64_t LPIT_DRV_GetCurrentTimerUs(uint32_t instance,
                                    uint32_t channel)

获取当前计时器通道以微秒为单位的计数值。

  • 此函数以微秒为单位返回一个绝对时间戳。
  • 此函数的一个常见用途是测量一段代码的运行时间。在代码的开头和结尾调用此函数。这两个时间戳之间的时间差即为运行时间。
  • 只有当计时器通道的操作模式为 32 位周期计数器或双 16 位周期计数器或 32 位触发输入捕获时,此处返回的计数值才有意义。
  • 需要确保运行时间不会超过计时器通道周期。
void LPIT_DRV_SetTimerPeriodByCount(uint32_t instance,
                                    uint32_t channel,
                                    uint32_t count)

        以计数单位设置定时器通道周期。

  • 此函数以计数单位设置定时器通道周期。
  • 正在运行的定时器通道的计数器周期可以通过先设置一个新的加载值来修改,该值将在定时器通道到期后加载。
  • 要中止当前周期并以新值启动定时器通道周期,必须先禁用然后再启用定时器通道。
void LPIT_DRV_SetTimerPeriodInDual16ModeByCount(uint32_t instance,
                                                uint32_t channel,
                                                uint16_t periodHigh,
                                                uint16_t periodLow)

        以计数单位设置定时器通道周期。

  • 此函数在定时器通道模式为双 16 周期计数器模式时,以计数单位设置定时器通道周期。
  • 正在运行的定时器通道的计数器周期可以通过首先设置新的加载值来修改,该值将在定时器通道到期后加载。
  • 要中止当前周期并以新值启动定时器通道周期,必须先禁用然后再次启用定时器通道。
uint32_t LPIT_DRV_GetTimerPeriodByCount(uint32_t instance,
                                        uint32_t channel)

        获取通道的周期计数值。

uint32_t LPIT_DRV_GetCurrentTimerCount(uint32_t instance,
                                       uint32_t channel)

        获取当前计时器通道的计数值(以计数为单位)。此函数返回实时计时器通道的计数值,该值的范围为 0 到计时器通道周期。 • 需要确保运行时间不超过计时器通道周期。 

2.5 中断API

void LPIT_DRV_EnableTimerChannelInterrupt(uint32_t instance,
                                          uint32_t mask)

         使能通道的溢出中断,支持与或操作,如下:

 *      - with mask = 0x01u then the interrupt of channel 0 will be enabled
 *      - with mask = 0x02u then the interrupt of channel 1 will be enabled
 *      - with mask = 0x03u then the interrupt of channel 0 and channel 1 will be enabled

void LPIT_DRV_DisableTimerChannelInterrupt(uint32_t instance,
                                           uint32_t mask)

        禁用通道的溢出中断,支持与或操作,如下:

 *      - with mask = 0x01u then the interrupt of channel 0 will be disable
 *      - with mask = 0x02u then the interrupt of channel 1 will be disable
 *      - with mask = 0x03u then the interrupt of channel 0 and channel 1 will be disable

uint32_t LPIT_DRV_GetInterruptFlagTimerChannels(uint32_t instance,
                                                uint32_t mask)

         获取通道中断标志位的状态,参数1是通道的示例号,在配置工具生成的h文件中定义,另一个是寄存器的位域,这个要查看用户手册。

void LPIT_DRV_ClearInterruptFlagTimerChannels(uint32_t instance,
                                              uint32_t mask)

         清除通道的中断标志位,参数1是通道的示例号,在配置工具生成的h文件中定义,另一个是寄存器的位域,这个要查看用户手册。

相关文章:

  • PostgreSQL 权限管理详解
  • 用旧的手机搭建 MQTT Broker-Node_red
  • 音视频入门基础:RTP专题(18)——FFmpeg源码中,获取RTP的音频信息的实现(上)
  • Android第三次面试总结(activity和线程池)
  • 关于deepseek R1模型分布式推理效率分析
  • 【差分约束】P5590 赛车游戏|省选-
  • 微软OneNote无法同步解决方案
  • 模运算专题练习 ——基于罗勇军老师的《蓝桥杯算法入门C/C++》
  • 2025-03-17 Unity 网络基础1——网络基本概念
  • 学习单片机需要多长时间才能进行简单的项目开发?
  • 鸿蒙应用开发--数据埋点的名称由来,发展脉络,典型场景,现代演进的无埋点和智能化埋点//学习时长数据埋点的实现--待更新
  • 如何在 GoLand 中设置默认项目文件夹
  • 树莓派学习:环境配置
  • 《基于深度学习的高分卫星图像配准模型研发与应用》开题报告
  • 基于Spring Boot的红色革命文物征集管理系统的设计与实现(LW+源码+讲解)
  • Java高频面试之集合-13
  • 【ACM 独立出版 | EI 快检索】2025年数据挖掘与项目管理国际研讨会 (DMPM 2025)
  • 如何使用MySQL快速定位慢SQL问题?企业级开发中常见业务场景中实际发生的例子,涉及分页查询问题。(二)
  • LLMs之CoTM:《Detecting misbehavior in frontier reasoning models》翻译与解读
  • Linux驱动学习笔记(零)
  • 国务院任免国家工作人员:饶权任国家文物局局长
  • 解放日报头版头条:“五个中心”蹄疾步稳谱新篇
  • 三杀皇马剑指四冠,硬扛到底的巴萨,赢球又赢人
  • 人民日报:光荣属于每一个挺膺担当的奋斗者
  • 文化体验+商业消费+服务创新,上海搭建入境旅游新模式
  • 乌方称泽连斯基与特朗普进行简短会谈