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次,發文人進小黑屋喔~

評論