一、 概述
本文将会介绍 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
欲知更多系列技术内容可点击此处查看!