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

一、  概述

本文将会介绍 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

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论