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