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

NXP实战笔记(七):S32K3xx基于RTD-SDK在S32DS上配置ICU输入捕获

目录

1、概述

2、输入捕获SDK配置

2.1、SAIC中断方式

2.2、IPWM或者IPM


1、概述

        输入捕获,可以抓取高电平时间、低电平时间、占空比、周期、边沿检测与回调函数、边沿计数(ABZ解码)、时间戳、唤醒中断。

        记录一下根据Emios模块实现上述部分功能。

        适用于输入捕获功能的Emios有以下三种模式。

SAIC:信号实时输入捕获

        从上图可以看出,SAIC仅仅关联了A寄存器,假设上升沿边沿检测,只能在上升沿时候抓取一个A的值,那么使用轮询的方式实现不了任何功能,在SDK包里面,通过中断或者DMA实现记录上次的值与本次的值,进行周期或者占空比的测量。

只有在中断或者DMA的时候才会置位此标志位

2、输入捕获SDK配置

2.1、SAIC中断方式

        目的:捕获通道eMios0_23 引脚PTC13 边沿检测 “eMios0_23使用内部计数器方式,所以Emios_Icu模块无需再配置”

        Emios_Icu配置如下

1、通道功能配置

2、通道属性配置

        在使用中断的情况下,SAIC、IPWM、IPM都好使,功能属于全支持了。但是假设使用轮询,IPM仅仅测量周期,IPWM仅仅测量占空比,SAIC用于边沿计数,其他功能FAE说支持就要中断了。周期与占空比同时测量出来是不支持的了。

中断配置,在ICU的中断里面配置之后无需再次在中断容器里面实现配置了。

测试代码

初始化

 /* Initialize Emios0 */Emios_Mcl_Ip_Init(0U, &Emios_Mcl_Ip_0_Config_BOARD_INITPERIPHERALS);
Emios_Icu_Ip_Init(0U, &eMios_Icu_Ip_0_Config_PB);Emios_Icu_Ip_EnableEdgeDetection(0,23);
/*中断初始化*/IntCtrl_Ip_SetPriority(EMIOS0_0_IRQn,2);IntCtrl_Ip_InstallHandler(EMIOS0_0_IRQn, &eMios0_23_EncoderC_Pulse, NULL_PTR);IntCtrl_Ip_EnableIrq(EMIOS0_0_IRQn);Emios_Icu_Ip_EnableInterrupt(0, 23);
/*中断执行*/
volatile uint32 eMios0_23_EncoderC_Pulsex = 0;
static void eMios0_23_EncoderC_Pulse(void)
{
Emios_Icu_Ip_IrqHandler(0, 23);
eMios0_23_EncoderC_Pulsex++;
}

测试结果,上升沿进中断,那么记录上升沿个数,发现可以完全对的上

2.2、IPWM或者IPM

目的:PTD10连接Emios1_10进行周期或脉冲宽度测量,轮询方式

IPWM:输入脉冲宽度测量,可以是高电平也可以是低电平

        从上述两图中可以看出,IPWM与IPM均可以获取A与B的值,通过相减的方式实现了周期或者脉冲宽度测量。

Emios_Icu配置,作为Count bus使用

ICU配置如下

代码实现

 /* Initialize Emios1 */
Emios_Mcl_Ip_Init(1U, &Emios_Mcl_Ip_1_Config_BOARD_INITPERIPHERALS);
Emios_Icu_Ip_StartSignalMeasurement(1,10);
/*执行代码*/
uint16 eMios1_10_EncoderA_Preiod(void)
{uint16 EncoderA_UCA         = IP_EMIOS_1->CH.UC[10].A;uint16 EncoderA_UCB         = IP_EMIOS_1->CH.UC[10].B;uint16 EncoderA_UCAReyurn   = 0;if(EncoderA_UCA >= EncoderA_UCB){EncoderA_UCAReyurn = (EncoderA_UCA - EncoderA_UCB);}else{EncoderA_UCAReyurn = (EncoderA_UCA - EncoderA_UCB + 0xFFFF);}EncoderA_UCAReyurn = (uint16)(50000/EncoderA_UCAReyurn) + 1;return EncoderA_UCAReyurn;
}

测试结果

IPWM的实现方式是一样的。

http://www.lryc.cn/news/304554.html

相关文章:

  • 左右联动布局效果
  • 【工具类】vscode ssh 远程免密登录开发
  • 【Antd】Form 表单获取不到 Input 的值
  • Encoder-decoder 与Decoder-only 模型之间的使用区别
  • 【STM32备忘录】【STM32WB系列的BLE低功耗蓝牙】一、测试广播配置搜不到信号的注意事项
  • ChatGPT 是什么
  • 4款好用的ai智能写作软件,为写作排忧解难!
  • js设计模式:计算属性模式
  • 2015-2024年考研数学(一)真题练习和解析——选择题
  • Git合并固定分支的某一部分至当前分支
  • Codeforces Round 928 (Div. 4) (A-E)
  • git远程操控gitee
  • 常见面试题:TCP的四次挥手和TCP的滑动窗口
  • 力扣随笔之两数之和 Ⅱ -输入有序数组(中等167)
  • 最优传输(Optimal Transport)
  • MIT-6.824-Lab2,Raft部分笔记|Use Go
  • 使用openeuler 22.03替代CentOS 7.9,建立虚拟机详细步骤
  • 代理技术引领出海征程
  • 谷粒商城篇章9 ---- P248-P261/P292-P294 ---- 消息队列【分布式高级篇六】
  • 【Spring连载】使用Spring Data访问 MongoDB(五)----生命周期事件
  • JavaSec 之 SQL 注入简单了解
  • 第十一章——期约与异步函数
  • 工具方法合集-utils.js
  • 安卓11-设置HDMI分辨率流程
  • Vue3+vite搭建基础架构(11)--- 菜单栏功能和Tab页功能实现
  • 餐饮神秘顾客公司:关于餐饮行业神秘顾客调查注意事项
  • 概率密度函数(PDF)与神经网络中的激活函数
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • 算法打卡day2|数组篇|Leetcode 977.有序数组的平方、 209.长度最小的子数组、59.螺旋矩阵II
  • Hive【内部表、外部表、临时表、分区表、分桶表】【总结】