温州网站设计制作课程,网页制作代码作业,wordpress 插件破解版,wordpress好看的编辑器目录 1、概述
2、输入捕获SDK配置
2.1、SAIC中断方式
2.2、IPWM或者IPM 1、概述 输入捕获#xff0c;可以抓取高电平时间、低电平时间、占空比、周期、边沿检测与回调函数、边沿计数#xff08;ABZ解码#xff09;、时间戳、唤醒中断。 记录一下根据Emios模块实现上述部分…目录 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的实现方式是一样的。