AUTOSAR ADC驅動詳解
目錄
- ADC驅動模塊概述
- 關鍵概念定義
- ADC驅動架構
- ADC驅動在AUTOSAR分層架構中的位置
- ADC驅動的主要職責
- ADC驅動配置結構
- 通用配置(AdcGeneral)
- 硬件單元配置(AdcHwUnit)
- 通道配置(AdcChannel)
- 通道組配置(AdcChannelGroup)
- 通道組映射(AdcChannelGroupMapping)
- 電源狀態配置(AdcPowerStateConfig)
- ADC通道組狀態機
- ADC通道組狀態
- 狀態轉換
- ADC驅動交互流程
- 初始化階段
- 配置通知階段
- 軟件觸發轉換階段
- 轉換與中斷處理
- 讀取結果階段
- 高優先級中斷處理
- 停止轉換階段
- 電源管理階段
- 總結
1. ADC驅動模塊概述
AUTOSAR ADC驅動模塊是微控制器抽象層(MCAL)的一部分,負責初始化和控制微控制器內部的模數轉換器單元。ADC驅動提供了啟動和停止轉換的服務,并支持啟用/禁用轉換觸發源,同時提供了通知機制和查詢轉換狀態及結果的功能。
ADC驅動模塊工作在所謂的ADC通道上,一個ADC通道將一個模擬輸入引腳、必要的ADC電路和轉換結果寄存器組合成一個可通過ADC驅動單獨控制和訪問的實體。
1.1 關鍵概念定義
- ADC硬件單元:表示包含執行"模數轉換"所需所有部件的微控制器輸入電子設備。
- ADC通道:表示綁定到一個端口引腳的邏輯ADC實體。多個ADC實體可以映射到同一個端口引腳。
- ADC通道組:鏈接到同一ADC硬件單元的ADC通道組(例如一個采樣保持和一個A/D轉換器)。整個組的轉換由一個觸發源觸發。
- ADC結果緩沖區:ADC驅動的用戶必須為每個組提供一個緩沖區。如果選擇了流式訪問模式,此緩沖區可以容納同一通道組的多個樣本。如果選擇了單次訪問模式,緩沖區中保存每個組通道的一個樣本。
- 轉換模式:
- 單次模式:在觸發后執行一次ADC通道組的轉換,結果寫入指定的緩沖區。觸發可以是軟件API調用或硬件事件。
- 連續模式:在軟件API調用(啟動)后連續執行ADC通道組的轉換。轉換本身自動運行(由硬件/中斷控制)。可以通過軟件API調用(停止)停止連續轉換。
- 觸發源:啟動單次轉換或連續轉換系列的源事件。
- 采樣時間:模擬值被采樣的時間(例如電容充電)。
- 轉換時間:采樣的模擬值轉換為數字表示的時間。
- 獲取時間:采樣時間+轉換時間。
2. ADC驅動架構
ADC驅動在AUTOSAR分層架構中位于微控制器抽象層(MCAL),它向上提供服務給ECU抽象層,向下控制微控制器的ADC硬件單元。
2.1 ADC驅動在AUTOSAR分層架構中的位置
-
應用層 - 包含應用軟件組件(SWC),它們通過RTE層請求ADC相關功能。
- 應用組件可能需要獲取模擬傳感器數據,如溫度、壓力、位置等。
-
RTE層 - 運行時環境層,為應用層和基礎軟件層之間提供標準化接口。
- 通過RTE API,應用無需關心底層細節即可訪問ADC功能。
-
BSW層/ECU抽象層 - 包含I/O硬件抽象(IoHwAbs),提供與硬件無關的接口。
- IoHwAbs將模擬輸入和ADC通道的映射關系抽象化。
- 向上提供符合AUTOSAR標準的API,向下調用MCAL層的ADC驅動。
-
BSW層/MCAL層 - 包含ADC驅動本身,以及相關的MCU驅動和端口驅動。
- ADC驅動實現針對特定微控制器的ADC初始化和控制。
- 與MCU驅動和端口驅動協作,共同管理ADC硬件資源。
-
硬件層 - 包含ADC硬件單元和微控制器物理資源。
- ADC驅動通過MCAL層的抽象機制控制這些硬件資源。
2.2 ADC驅動的主要職責
- 初始化和控制ADC硬件單元
- 提供ADC通道分組功能
- 支持不同的轉換模式(單次/連續)
- 支持不同的觸發源(軟件/硬件)
- 提供結果訪問和通知機制
- 支持電源狀態管理
3. ADC驅動配置結構
ADC驅動的配置結構定義了如何設置和使用ADC硬件資源。配置包括通用設置、硬件單元設置、通道設置、通道組設置以及電源管理設置。
3.1 通用配置(AdcGeneral)
通用配置定義了ADC驅動整體的行為和可用功能:
- AdcDeInitApi - 是否支持反初始化API
- AdcDevErrorDetect - 是否支持開發錯誤檢測
- AdcEnableStartStopGroupApi - 是否支持啟動/停止通道組轉換API
- AdcGroupNotificationSupport - 是否支持通道組通知
- AdcHwTriggerSupport - 是否支持硬件觸發
- AdcPrioritySupport - 是否支持通道組優先級機制
- AdcReadGroupApi - 是否支持讀取通道組API
- AdcVersionInfoApi - 是否支持版本信息API
這些配置項直接對應SRS_Adc_12307
中描述的基本靜態配置。
3.2 硬件單元配置(AdcHwUnit)
硬件單元配置定義了每個ADC硬件單元的基本參數:
- AdcHwUnitId - ADC硬件單元的唯一標識符
- AdcClockSource - ADC時鐘源選擇
- AdcPrescale - ADC時鐘預分頻設置
- AdcReferenceVoltage - ADC參考電壓源
- AdcResolution - ADC分辨率(8位、10位、12位等)
- AdcResultAlignment - 結果對齊方式(左對齊或右對齊)
根據SRS_Adc_12824
,結果對齊方式可配置為左對齊或右對齊。
3.3 通道配置(AdcChannel)
通道配置定義了每個ADC通道的特性:
- AdcChannelId - 通道標識符
- AdcChannelName - 通道符號名稱
- AdcChannelResolution - 通道分辨率
- AdcChannelSamplingTime - 通道采樣時間
- AdcChannelConversionTime - 通道轉換時間
這些配置項直接對應SRS_Adc_12307
中描述的每個通道的基本靜態配置。
3.4 通道組配置(AdcChannelGroup)
通道組配置定義了ADC通道組的行為:
- AdcGroupId - 通道組標識符
- AdcGroupName - 通道組符號名稱
- AdcGroupAccessMode - 訪問模式(單次/流式)
- AdcGroupConversionMode - 轉換模式(單次/連續)
- AdcGroupPriority - 通道組優先級
- AdcGroupTriggSrc - 觸發源(軟件/硬件)
- AdcNotification - 通知回調函數指針
- AdcStreamingBufferMode - 流式緩沖區模式(線性/循環)
- AdcStreamingNumSamples - 流式采樣數量
根據SRS_Adc_12447
,ADC驅動允許將屬于同一ADC硬件單元的ADC通道分組到所謂的ADC通道組中。
根據SRS_Adc_12817
,ADC驅動允許為每個ADC通道組靜態配置一個觸發源。
根據SRS_Adc_12820
,ADC驅動允許為每個通道組配置優先級級別,以便高優先級組可以中斷正在進行的低優先級轉換。
3.5 通道組映射(AdcChannelGroupMapping)
通道組映射配置定義了通道組中包含的通道:
- AdcChannelIndex - 通道在組中的索引
這實現了SRS_Adc_12818
中描述的功能,允許將一個ADC通道分配給多個ADC通道組。
3.6 電源狀態配置(AdcPowerStateConfig)
電源狀態配置定義了ADC的電源管理行為:
- AdcPowerStateAsyncTransitionMode - 是否支持異步電源狀態轉換
- AdcPowerState - 電源狀態(全功率/低功率/關閉)
這些配置項實現了SRS_ADC_12826
、SRS_ADC_12827
、SRS_ADC_12828
和SRS_ADC_12829
中描述的電源狀態管理功能。
4. ADC通道組狀態機
ADC通道組狀態機描述了ADC通道組在操作過程中可能的狀態和狀態轉換。
4.1 ADC通道組狀態
根據SRS_Adc_12291
,ADC通道組有以下五種狀態:
-
未初始化(UNINIT) - ADC驅動未初始化狀態,在驅動初始化前的狀態。
-
空閑(IDLE) - ADC通道組空閑狀態,可以啟動新轉換或配置通道組。
- 在初始化后進入此狀態
- 在轉換停止后回到此狀態
- 此狀態下可以啟動新的轉換
-
忙(BUSY) - ADC通道組忙狀態,表示轉換正在進行中。
- 啟動轉換后進入此狀態
- 可能被高優先級組中斷
- 轉換完成后離開此狀態
-
已完成(COMPLETED) - 單次轉換已完成狀態,結果可以讀取。
- 單次轉換完成后進入此狀態
- 此狀態下可以讀取最新的轉換結果
- 可以從此狀態啟動新的轉換
-
流式已完成(STREAM COMPLETED) - 流式轉換已完成狀態,所有樣本都已存儲在緩沖區中。
- 流式轉換完成后進入此狀態
- 此狀態下可以訪問采集的所有樣本
- 可以從此狀態啟動新的轉換
4.2 狀態轉換
狀態轉換描述了ADC通道組如何從一個狀態變化到另一個狀態:
-
初始化 - 從UNINIT到IDLE:通過
Adc_Init()
函數完成初始化后發生。 -
啟動轉換 - 從IDLE到BUSY:通過
Adc_StartGroupConversion()
函數啟動轉換后發生。 -
單次轉換完成 - 從BUSY到COMPLETED:單次轉換模式下,轉換完成后發生。
-
流式轉換完成 - 從BUSY到STREAM COMPLETED:流式轉換模式下,所有樣本轉換完成后發生。
-
啟動新轉換 - 從COMPLETED或STREAM COMPLETED到BUSY:通過
Adc_StartGroupConversion()
函數啟動新轉換后發生。 -
停止轉換 - 從BUSY、COMPLETED或STREAM COMPLETED到IDLE:通過
Adc_StopGroupConversion()
函數停止轉換后發生。 -
反初始化 - 從IDLE到UNINIT:通過
Adc_DeInit()
函數反初始化后發生。 -
高優先級中斷 - 從BUSY到BUSY:當啟用優先級支持時,高優先級組可以中斷正在進行的低優先級轉換。
這些狀態和轉換實現了SRS_Adc_12291
中描述的ADC通道組狀態查詢功能。
5. ADC驅動交互流程
ADC驅動交互流程展示了在ADC轉換過程中各個組件之間的交互序列。
5.1 初始化階段
初始化階段建立ADC驅動的基本配置:
- 應用調用
Adc_Init(ConfigPtr)
初始化ADC驅動 - ADC驅動配置ADC硬件,包括:
- 配置ADC時鐘
- 設置ADC分辨率
- 配置參考電壓
- 設置結果對齊方式
這實現了SRS_Adc_12307
中描述的基本靜態配置功能。
5.2 配置通知階段
配置通知階段設置通道組的通知機制:
- 應用調用
Adc_EnableGroupNotification(Group)
為指定通道組啟用通知 - ADC驅動更新內部狀態,使該通道組在轉換完成時能夠觸發通知
這實現了SRS_Adc_12318
中描述的啟用和禁用通知功能。
5.3 軟件觸發轉換階段
軟件觸發轉換階段展示了如何通過軟件API啟動ADC轉換:
- 應用通過IoHwAbs層調用
IoHwAbs_AdcReadGroup()
- IoHwAbs層調用ADC驅動的
Adc_StartGroupConversion(Group)
- ADC驅動啟動ADC硬件進行轉換
這實現了SRS_Adc_12364
中描述的啟動和停止通道組轉換功能。
5.4 轉換與中斷處理
轉換與中斷處理階段展示了ADC轉換完成后的處理流程:
- ADC硬件完成轉換,觸發轉換完成中斷
- ADC驅動處理結果:
- 讀取ADC結果寄存器
- 應用結果對齊和掩碼(
SRS_Adc_12283
) - 存儲到結果緩沖區
- 更新通道組狀態
- ADC驅動檢查通知狀態:
- 如果通知已啟用,調用轉換完成通知回調函數
- 如果通知已禁用,僅存儲結果
這實現了SRS_Adc_12283
中描述的掩碼信息位功能和SRS_Adc_12317
中描述的通知功能。
5.5 讀取結果階段
讀取結果階段展示了如何獲取ADC轉換結果:
- 應用通過IoHwAbs層調用
IoHwAbs_AdcReadChannel()
- IoHwAbs層調用ADC驅動的
Adc_ReadGroup(Group, DataBufferPtr)
- ADC驅動檢查通道組狀態
- ADC驅動獲取最近的轉換結果,并返回給上層
這實現了SRS_Adc_12819
中描述的讀取最新有效轉換結果功能。
5.6 高優先級中斷處理
高優先級中斷處理階段展示了優先級機制的工作方式:
- 應用調用
Adc_StartGroupConversion(HighPriorityGroup)
啟動高優先級通道組 - ADC驅動檢查當前轉換狀態:
- 如果低優先級轉換正在進行,中止當前轉換并啟動高優先級轉換
- 如果沒有正在進行的轉換,直接啟動高優先級轉換
這實現了SRS_Adc_12820
中描述的通道組優先級功能。
5.7 停止轉換階段
停止轉換階段展示了如何停止正在進行的轉換:
- 應用調用
Adc_StopGroupConversion(Group)
- ADC驅動停止ADC硬件轉換
- ADC驅動更新通道組狀態為IDLE
這實現了SRS_Adc_12364
中描述的停止通道組轉換功能。
5.8 電源管理階段
電源管理階段展示了ADC驅動的電源狀態管理:
- 應用調用
Adc_SetPowerState(PowerState)
設置ADC電源狀態 - ADC驅動配置ADC硬件進入指定的電源狀態
- 應用調用
Adc_GetCurrentPowerState(PowerStatePtr)
獲取當前電源狀態 - ADC驅動返回ADC硬件的當前電源狀態
這實現了SRS_ADC_12826
、SRS_ADC_12827
、SRS_ADC_12828
和SRS_ADC_12829
中描述的電源狀態管理功能。
6. 總結
AUTOSAR ADC驅動是微控制器抽象層的關鍵組件,它提供了對微控制器ADC硬件的標準化訪問。通過配置結構、狀態機和交互流程的設計,ADC驅動實現了以下功能:
- 靈活配置 - 支持多種轉換模式、觸發源和結果訪問方式,滿足不同應用場景的需求。
- 狀態管理 - 通過明確的狀態機設計,確保ADC轉換過程的可控性和可預測性。
- 優先級處理 - 通過優先級機制,支持高優先級通道組中斷低優先級轉換,滿足關鍵應用的實時性要求。
- 電源管理 - 通過電源狀態管理,支持不同的功耗模式,優化系統能耗。
- 標準接口 - 提供符合AUTOSAR標準的API,實現軟件的可移植性和可重用性。
通過以上設計,ADC驅動能夠高效、可靠地管理ADC硬件資源,為上層應用提供穩定、一致的服務。