主頁 > 軟體設計 > AUTOSAR MCAL決議: ADC

AUTOSAR MCAL決議: ADC

2021-07-25 08:18:01 軟體設計

AUTOSAR MCAL決議: ADC

1. 知識點概覽

可能很多人認為ADC很簡單,是的,ADC的作業原理很多人大概了解 ,但再簡單的模塊在AUTOSAR里面就沒聽說過簡單的,先看看一張圖吧,以下是我大概總結的一些ADC模塊里面的概念,該圖也只是盡量囊括主要概念,并非所有東西都能體現,下圖只是列舉的知識點,各個知識點之間有牽連,總之并沒有你想的那么簡單,本文也不會涉及到下圖中的所有知識點,但會盡量將重要的知識點給大家講解清楚,

請添加圖片描述

2. Group/Channel/Hardware關系

首先來看看最常見的Group, Channel與硬體實體(HW Instance)/硬體通道之間的關系,

請添加圖片描述

如上圖所示,Group及Channel是軟體層面抽象出來的概念,這里的Channel可以說是邏輯通道,其與硬體通道相對應,但是注意這里的對應并非那么絕對,邏輯通道的0并非只能與硬體的通道0關聯,而是可以任意映射,但是每個邏輯通道只能與一個物理通道映射,并且邏輯通道的編號是連續編碼的,而硬體通道則不同,不同的芯片上面可能有多個物理單元,每個物理單元下面又有多個通道,這些通道的編號在芯片手冊里面通常是以每個物理單元里面重新獨立編號的,如上圖所示,ADC0和ADC1就是兩個物理單元,而他們下面分別由3個通道,其編號都是從0開始編碼,下文提到的Channel默認指軟體層面的邏輯通道,

  • 任何Channel都必須掛靠到Group下面,上層/API都是操作Group的,不能直接去操作Channel,
  • 每個Group下面可以掛一個或多個Channel,但至少有一個Channel,如上圖Group5是空的則不允許,
  • 如果掛了多個Channel,則這些Channel必須屬于同一硬體單元,不能跨多個物理單元,如上圖Group3是不允許的,
  • 一個Channel可以同時屬于多個Group,如上CH0,CH1,但這種情況需要用戶自己合理管控轉換順序,否則可能會出現沖突,

部分廠商支持Group里面的Channel可以通過API去部分開啟或關閉(但注意該功能為擴展功能,并非標準功能),

3. 轉換及觸發模式

AUTOSAR里面,ADC驅動模塊支持兩種轉換模式兩種觸發模式

首先來看轉換模式:一種是One-shot(一次性的),另一種是Continuous(連續性的),兩者有什么區別呢?顧名思義,One-shot在觸發后只轉換一次,轉換結束后就停止,然后將轉換結果寫入緩沖區中,而Continuous則不同,當用戶呼叫啟動轉換函式(Adc_StartGroupConversion)后開始采樣轉換,轉換完成后由硬體自動啟動下一次轉換,一直這樣回圈,直到你主動呼叫Adc_StopGroupConversion函式讓其停止,前面這兩句話看似簡單,但其包含的資訊卻不少,在深入展開講解前,我們先來看看另一個概念:觸發方式,

對應于轉換模式的還有觸發方式,觸發方式大體上分為兩類,分別是硬體觸發和軟體觸發,不同廠家的芯片,具體細分的硬體觸發方式可能不同,比如NXP的S32K系列芯片,其硬體觸發可以是PDB,也可能是BCTU,或者是外部信號觸發等,而軟體觸發實際上就是我們程式里面去呼叫啟動轉換函式(Adc_StartGroupConversion)就叫軟體觸發,

接下來我們深入講解一下上面所包含的意思,為了便于理解,我總結為下圖,

請添加圖片描述

如上圖所示,軟體觸發對于兩種轉換模式都是適用的,而硬體觸發只適用于One-shot模式,軟體觸發這個比較好理解,因為是程式里面去呼叫一個API,而硬體觸發之所以只適用于One-shot模式,這里可以分兩個方面來看,首先它并不代表真的只能實作一次采樣轉換這種需求,如果你想實作連續采樣轉換也是可以的,硬體觸發模式下實作Continuous這樣的效果,可以通過對應的觸發源來實作,比如前面提到的PDB,很多時候它本身就是和Timer配合使用或者說大部分都是與類似于Timer這樣與時間相關的場景下使用,那么這些觸發源本身實作周期觸發這種功能是很容易的,

換個角度來說,假如硬體觸發支持Continuous模式,那么我們想想會發生什么呢?當第一觸發后,由于其運行在Continuous模式,其轉換完成后會自動啟動下一次轉換,然后中途你又來硬體觸發,豈不是他們會沖突,所以現在你知道為何硬體觸發不支持Continuous模式了吧,硬體觸發模式,對于ADC硬體來說,它完全聽從于這個觸發信號,你觸發一次就采樣轉換一次,你什么時候觸發我就什么時候開始采樣轉換,這樣就不會沖突,不會亂,這里其實不是很嚴謹,但為了說明這個功能,我想你應該能明白,不嚴謹是因為很多芯片可以配置硬體過濾,觸發一次,硬體會多次采樣(根據你配置)然后進行過濾,最后得到一個過濾后的結果,這完全是硬體層面的,相比軟體過濾其性能要高很多,但也由弊端,就是其過濾機制單一,所以這里我們以轉換結果為準就可以了,以拿到轉換結果為一次,而不管具體采樣的程序),

我們再換個角度來描述上面這幾者的關系,One-shot模式同時支持軟體觸發和硬體觸發兩種,而Continuous模式只支持軟體觸發,上面提到了為何不支持另外一種,聰明的你一定會問,那Continuous模式下,如果我頻繁呼叫Adc_StartGroupConversion函式不是一樣會沖突么,是的,理論上的確存在這個問題,所以在軟體層面,我們由狀態機管理,當第一次啟動轉換還沒完成時,你再次呼叫這個函式,軟體層面會忽略,只有當第一次的觸發完成轉換后,你再呼叫這個函式軟體才會繼續回應,

軟體觸發及硬體觸發其對應的API也是不一樣,都有相應的函式,這些函式通常都是一對一對的,如下所示,他們的功能也很明確,如函式名所示,就不深入講解了,引數也很簡單,

觸發方式啟動/使能API停止/關閉API
軟體觸發Adc_StartGroupConversionAdc_StopGroupConversion
硬體觸發Adc_EnableHardwareTriggerAdc_DisableHardwareTrigger

4.Buffer訪問模式及型別

你以為上面這些就完了么?如果這樣,那也不像我描述那么復雜了,接下來我們繼續添加新的功能屬性,看完后我相信你不會覺得ADC就是采樣轉換那么簡單了,當然本文的目的就是讓你看完后也覺得,ADC也不過如此,都清楚了,那就達到目的了,🐶

除了上面提到的轉換模式以及觸發方式,其buffer也對應不同的訪問方式,并且這幾者是緊密相連的,如下圖所示:

請添加圖片描述

Buffer的訪問方式分為Streaming和Single兩種,Stream模式又分為Linear(線性模式)和Circular(回圈模式),Single模式相對簡單,而Stream模式下的兩種訪問模式與前文提到的轉換模式相匹配又會得到不同的效果,

與Stream模式相關的另一個引數我們不得不提及,那就是采樣數(Adc Group Streaming Numbers Samples),這個引數也扮演重要角色,先說簡單的Single模式,該模式下采樣數只能為1,并且不管你是One-shot模式還是Continuous模式,都轉換一次之后就停止,這種配置搭配下兩種轉換模式沒啥區別,

如果你問我,到底他們誰才是老大,到底是轉換模式說了算還是Buffer的訪問模式說了算,那我只能告訴你,他們不搞霸權,他們講民主,分不同組合,誰都有話語權,

再來看Streaming下的Linear模式,該情況下,如果采樣數配置為1,那么效果和Single是一樣的,轉換一次就停止,如果采樣數大于1,則轉換次數等于采樣數,當設定的采樣數的次數完成后自動停止,

最后一種Circular則是一直回圈,不會自動停止,直到你主動呼叫停止函式,

以上所有情況都需要注意Buffer的大小,如果設定錯誤,則很容易溢位導致程式例外,如果模式為Streaming(注意包含兩種型別),用戶需要保證提供的Buffer大小足夠容納所有Channel的大小,Buffer的大小與Channel數量及Streaming的sample數有關,計算方法為,Channel * StreamSampleNum,型別為SizePerChannel允許的最小型別,假如你的ADC轉換精度是12Bit的,那么每個通道需要uint16型別的變數存盤,也就是SizePerChannel為2Bytes,StreamSampleNum設定為2,某個Group里面你配置了3個Channel,則你定義的Buffer大小為:3*2=6,型別為位寬大于uint16型別的,比如uint16 TestBuffer[6],

如上所述,Streaming的Buffer可以選擇線性的或回圈的,每次轉換完成后,Buffer會從頭覆寫,Buffer的初始化可通過呼叫Adc_SetupResultBuffer函式實作,每個Group僅需提供一個Buffer即可,注意其大小,

Adc_GetStreamLastPointer引數回傳第一個Channel的buffer位置,由于每個Channel的Buffer是按照順序線性排布的(先放第一個Channel,再挨著放第二個Channel,依次排放),所以用戶可以通過前面提到的采樣數(Sample number)來計算其他Channel的位置資訊,函式回傳值代表當前完成了多少次組轉換,如果為0,則引數回傳對應為NULL,如果等于設定的Sample number,則代表buffer里面的所有值都有效,只有在轉換完成后才會回傳有效值,如果ADC處于busy或者idle狀態,則回傳0,

Adc_ReadGroup,第一個引數是你想讀取的組的索引號,第二個引數是快取的指標,

ADC驅動不提供直接去訪問硬體轉換結果暫存器的API,只提供訪問中轉Buffer的API(部分廠商會進行擴展),

5. 其他重要機制

轉換型別SW APIHW Event Trigger
One-shotNormal ConversionInjected Conversion(255)
ContinuousNormal ConversionX

Group可以設定優先級,數字越大優先級越高,Injected Conversion 型別優先級需要設定到最高,255,

AUTOSAR: 標準規定可以針對每路Channel配置單獨的觸發源,但某些廠家的MCAL里面是每個Group配置觸發源,需要和芯片功能確認,

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/289913.html

標籤:其他

上一篇:HarmonyOS(鴻蒙)開發一文入門

下一篇:chrome瀏覽器,安裝postman插件,實作json格式的介面測驗

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more