SemiDrive E3 MCAL 开发系列(6)– Icu 模块的使用

发布于:2025-02-11 ⋅ 阅读:(177) ⋅ 点赞:(0)

一、  概述

本文将会介绍 SemiDrive E3 MCAL Icu 模块的简介以及基本配置,其中还会涉及到 Xtrg 模块的配置。此外会结合实际操作的介绍,帮助新手快速了解并掌握这个模块的使用,文中的 MCAL 是基于 PTG3.0 的版本,开发板是官方的 E3640 网关板。

二、  Icu 模块简介

E3 Icu 模块底层硬件为 Etimer 中的 Capture 通道,每个 Capture 通道都可以作为一个 Icu 通道,E3 系列最多有 4 个 Etimer,因此最多有 16 个 Icu 通道,其中 E3206/E3106/E3205/E3104 系列最多有 2 个 Etiemr,最多有 8 个 Icu 通道。Icu 模块支持以下四种时钟源的选择:

  • HF_CLK 时钟源,可以在 Mcu_ClkCfg 中找到对应频率。
  • AHF_CLK 时钟源,和 Xtrg 使用的时钟源一致。
  • EXT_CLK 时钟源,外部时钟源输入。
  • LP_CLK 时钟源,固定为 24 MHz。

Icu 模块支持对以下几种模式进行输入捕获:

  • 信号边沿变化检测
  • 信号测量(高电平时间、低电平时间、周期时间、周期占空比)
  • 边沿变化时间戳采集
  • 边沿的计数

三、  Icu 模块的主要配置

配置 Icu 模块首先需要使能 Etimer 模块,在 Mcu 模块中进行配置,如下图所示。

图 3.1 使能 Etimer 模块

接着进行 Icu 模块的配置,首先是通用的配置,主要需要配置一下选项:

  • IcuMaxChannel:需要用到的 Icu 的通道总数。
  • IcuDevErrorDetect:在开发过程中是否支持对 Icu 驱动参数进行错误检测和有效性检测。
  • IcuDmaModeEnable:是否需要使用 DMA 进行传输,需要注意的是仅在时间戳模式和多路采样时会使用到。
  • DmaBurstTransferWordLength:使用 DMA 进行传输时,一次传输的数据量。
  • DmaFifoWml:使用 DMA 进行传输时设置的水线。
  • IcuMultiCaptureEnable:是否支持多路采样。
  • IcuMultiCaptureDmaMode:使用多路采样时,是否使用 DMA 进行数据传输。
  • DmaMultiCptBurstLengh:在多路采样时,使用 DMA 进行传输,一次传输的数据量。

图 3.2 Icu通用配置

接着对每个 Icu 通道进行配置。

图 3.3 Icu 通道的配置

Icu 通道的配置包括以下选项:

  • IcuChannel:Icu 的逻辑通道 ID。
  • IcuMultiCapture:该通道是否采用多路采样,需要注意如果使用多路采样,配置页面的 IcuDefaultStartEdge/IcuMeasurementMode/IcuHardwareChannel 这几个配置无效。
  • IcuDefaultStartEdge:该通道采样的边沿设置。
  • IcuFilterLevel:该通道使用的滤波等级。
  • IcuMeasurementMode:该通道需要采样的模式。
  • IcuHardwareModule:该通道用到的 etiemr 硬件模块。
  • IcuHardwareChannel:该通道用到的 Capture 硬件通道,包括 ICU_HW_CPT_A/B/C/D。
  • IcuHardwareClock:该通道使用的时钟源频率,包括 ICU_SEL_HF_CLK、ICU_SEL_AHF_CLK、ICU_SEL_EXT_CLK、ICU_SEL_LP_CLK。
  • IcuHwModulePrescaler:该通道使用的时钟分频值。
  • IcuWakeupCapability:目前该配置还不支持。
  • IcuSignalNotification:使用边缘检测模式时,采集到所设置的边沿变化时调用的回调函数。
  • IcuSignalMeasurementProperty:使用信号测量模式时,需要采样的具体模式,包括 ICU_DUTY_CYCLE、ICU_HIGH_TIME、ICU_LOW_TIME、ICU_PERIOD_TIME。
  • IcuTimestampNotification:使用时间戳模式时,采集到所需的时间戳数量时的回调函数。

配置完 Icu 模块后我们还需要对 Xtrg 模块进行配置,将 IO 信号或者 PWM 的输出信号路由到 Etimer 的捕获通道,具体配置如下图所示。

图 3.4 Xtrg 模块配置

四、  实际操作

配置完成后,更新配置,代码使用例程默认的代码,无需修改,如图 4.1 和 图 4.2 所示,接着进行编译、下载并调试,输入测试命令 “runcase 1600”,可以看到串口中会打印出捕获到的周期值、边缘计数、时间戳等信息,具体如图 4.3 所示。

图 4.1 Icu 测试代码

图 4.2 Icu 测试代码

图 4.3 串口打印信息

五、  注意事项

配置 Icu 模块时,需要注意以下事项:

  • 使用同个 etimer,捕获通道不同的情况下,时钟源的分频值需要设置一致,如果不一样,以在 EB 上配置的逻辑通道排列靠后的为准。
  • 使用了多路采样的 etimer 不能用于单路采样。
  • 多路采样,Etimer1 支持 XTRG_IO(0)~XTRG_IO(31) 的配置,etimer2 支持 XTRG_IO(32)~XTRG_IO(63)的配置。
  • 多路采样的子通道,不支持“边沿检测”子模式,以及回调函数的调用。
  • 使用多路采样时,etimer1 需要按照最大的 XTRG_IO 引脚配置多路采样路数,etiemr2 需要按照(最大的 XTRG_IO 管脚标号 – 31)配置多路采样路数。

六、  参考资料

1.《SemiDrive_E3_MCAL_User_Guide_Rev03.00.pdf》,2023.08

欲知更多系列技术内容可点击此处查看!


网站公告

今日签到

点亮在社区的每一天
去签到