**AutoSAR ICU Driver **概述
ICU中文又叫輸入捕獲單元,在汽車的控制器中具有廣泛的用途。AutoSAR中ICU Driver根據需要定義了硬件中所使用的ICU通道,主要用于采集PWM信號,解析計算PWM的周期和占空比;對輸入的脈沖信號做計數;同時支持信號中斷和喚醒相關的檢測機制。
根據ICU主要功能,在AutoSAR架構中主要提供了以下服務:信號邊沿檢測通知(Signal edge notification);控制喚醒中斷處理(Controllingwakeup interrupts);周期信號檢測(Periodic signal time measurement);信號高點電平時間計算(Edge time stamping);信號邊沿計數(Edge counting)。
在AutoSAR中對于ICU的實現相關的模塊主要有Det、MCU、OS、EcuM、Port等模塊。其中Det用于在開發過程中檢測與ICU相關的錯誤;MCU模塊主要為ICU模塊提供基本的時間基準,用于計算輸入的ICU信號相關的時間參數;OS模塊主要用于提供ICU中斷相關的處理函數的調用;EcuM模塊主要接受ICU產生的喚醒信號用于對喚醒源有效性檢測,從而決定狀態切換;Port一般作為復用功能將ICU模塊與外部輸入的信號關聯。
**AutoSAR ICU Driver **基本功能
在AutoSAR中ICU Driver提供了兩種模式,分別為Normal模式和Sleep模式,在Normal模式下相關的通知函數有效,而在Sleep模式下只有喚醒相關的事件具備有效性,在Sleep模式下除了喚醒相關的中斷其它事件也是不能處理的。 ICU模塊對外部PWM的檢測的原理是基于MCU模塊提供的高頻率時鐘根據PWM的邊沿開始計數,最終通過計數個數和MCU輸入的高頻率時鐘基準得到最終的高低電平時間,從而計算出周期和頻率。下面簡單對ICU的喚醒模式設置和讀取PWM的周期和占空比做介紹。
在使用的ICU喚醒與休眠相關的狀態轉換時,在進入到Sleep的之前設置喚醒的檢測的邊沿觸發,然后進入到Sleep模式,當外部檢測到有效的邊沿的時候,在EcuM中會對該喚醒源的有效性做判斷,正確的情況下設置ICU進入到Normal模式。下面展示了ICU模塊檢測到外部上升沿的喚醒源后進入到Normal的過程。對于整個ECU的喚醒功能原理與之類似。如果使能了ICU的喚醒,在檢測到喚醒信號后,ECUM模塊也可以使整個程序進入到RUN模式(ECUM中從WakeUp到RUN其余的轉換條件也滿足)。
在ICU中其實最常用的功能主要是對PWM信號的占空比和周期的計算。以上升沿作為激活的時間點,以較快的頻率在上升沿到來時開始計數,最終數據會保存在ActiveTime和PeriodTime的變量中,調用Icu_GetDutyCycleValues便可將ActiveTime和PeriodTime放入到指定的Buffer中,應用層處理該數據得到占空比和周期。
ICU Driver API
ICU Driver模塊常用的API主要包括以下:
1 ICU_Init:初始化ICU Driver使用的Channel的參數,將值寫入到對應的寄存器中,同時ICU模塊與Port和MCU密切關聯,因此要在這兩個模塊會根據配置信息初始化與ICU相關的功能。一旦ICU初始化完成,ICU模塊進入到Normal模式。
2 Icu_SetMode:設置ICU模塊的Mode,Sleep或者是Normal。
3 Icu_Enable/DisableWakeup:使能或者禁用ICU的喚醒功能
4 Icu_SetActivationCondition:用來設置特定的ICU通道是上升沿還是下降沿激活。
5.Icu_GetInputState:得到ICU輸入的狀態
6.ICU_EnableNotification/ICU_DisableNotification:控制ICU Driver模塊要不要使能對Upper Layer的通知功能。
6 Icu_StartTimestamp:開啟對特定ICU通道的邊沿捕獲時間計數。
7 Icu_StartSignalMeasurement:開始對信號進行測量。
8.Icu_GetDutyCycleValues:得到PWM的周期和激活電平的時間,根據該函數可以實現對PWM占空比和周期的計算。
**AutoSAR ICU Driver **配置選項
在實際的配置中ICU模塊主要包含三方面的配置,分別是IcuConfigSet Container、IcuGeneral Container以及IcuOptionalApis Container。下面分別對ICU的這三個Container的主要配置選項進行說明。
IcuGeneral Container主要包含了ICU配置的一些General的東西,主要包括:是否支持Det錯誤追溯功能;是否支持將喚醒發送到EcuM模塊;以及對于ICU模塊的Partition分配。
IcuOptionalApis Container主要包含了一些可以供用戶使用的API,主要包括以下API,用于可以根據具體的項目需要選擇其中的API即可,在使用的時候,有些API是相互關聯的,確保相關的API都要使能或者都要禁用。
IcuConfigSet Container是整個ICU模塊配置的核心。在配置中主要包括了六個相關的功能塊,如下所示。
IcuSignalMeasurement:在該功能中主要配置所選的ICU通道在信號測量中作為何種測量方法實現。可以采樣周期、占空比、高低電平時間等,根據需要選擇即可,同時相關的API也要使能。
IcuChannel:主要給使用的ICU通道分配ID,并且定義該通道是否支持喚醒,以及該通道采用ICU實現的具體功能。特定的ICU通道的功能主要包括邊沿計數、信號邊沿檢測、信號采樣、時間采樣。信號邊沿檢測多用于觸發或者喚醒相關的,而信號采樣在IcuSignalMeasurement可以選擇具體的模式。
IcuTimestampMeasurement:定義時間測量采樣的是線性Buffer還是環形Buffer,以及相關的通知功能,根據實際需要選擇即可。
IcuWakeup:對喚醒功能的支持的情況下關聯到EcuM特定的喚醒通道。在發生喚醒事件的時候通知ECUM對喚醒的有效性做判斷。
IcuMaxChannel:定義最大支持的ICU通道數。
IcuSignalEdgeDetection:定義對信號邊沿檢測的通知函數。
對于以上的三個主要方面的配置信息,不同的AutoSAR開發工具可能會有細微的差別,但是萬變不離其宗,基本的配置功能就是這些,根據實際的開發環境選擇即可。
**TC277 ICU **使用
本人在使用TC277曾做過ICU的捕獲PWM輸入功能。做ICU捕獲PWM的時候,主要是將特定的Port、ICU以及MCU的TIM通道進行相互關聯。在TC277中對于Port作為ICU使用的時候可以直接關聯到MCU特定的TIM通道,同時該通道作為參考被ICU模塊引用。
在ICU將該通道作為ICU_MODE_SIGNAL_MEASUREMENT使用,同時在IcuSignalMeasurementProperty選擇ICU_DUTY_CYCLE使用。然后對MCU的特定的時鐘做配置,可以選擇檢測的Filter來優化時鐘采樣。通過MCU的時鐘分配模塊為特定的ICU的TIM選擇較高頻率的時鐘用來計算高低電平的時間,在應用層調用Icu_GetDutyCycleValues得到Active Time和Period Time。
根據選擇時鐘頻率和得到的Active Time和Period Time就可獲得相應的周期和占空比。在使用的時候要選擇合適的采樣的觸發邊沿,否則得到的占空比可能是100%-得到的值,還有就是可能采樣中存在Active Time和Period Time讀不到的情況,這時候要根據需要選擇相應的回調函數或者中斷立刻處理數據或者增加相關寄存器的有效性作為判斷得到真實的數據。
審核編輯:劉清
-
控制器
+關注
關注
112文章
16212瀏覽量
177456 -
AUTOSAR
+關注
關注
10文章
350瀏覽量
21480 -
脈沖信號
+關注
關注
6文章
395瀏覽量
36918
發布評論請先 登錄
相關推薦
評論