一、 概述
本文將會介紹 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
評論