一、前言 在 《【S32K3 入門系列】- ADC 模塊簡介(上)》中我們介紹了四種通道類型的區別、ADC 的功能框圖、ADC 的工作流程、時鐘源的範圍等。本文是上一篇博文的延續,將繼續介紹 S32K3 的ADC 模塊。 二、ADC 模塊簡介 2.1 ADC 的三種觸發模式 ADC 模塊的工作流程非常純粹,它在收到觸發信號後,會按照之前配置的參數開始轉換當前被啟用的通道。因此,實現複雜轉換的完整性完全取決於觸發信號的生成。現在我們逐一來看 ADC 模塊的三種主要觸發信號類型:標準觸發、注入觸發和 BCTU 觸發。 2.1.1 標準觸發: 標準觸發是最常見的觸發模式,它是由軟體或者硬體來啟動一次 DMA 轉換,轉換模式一般分為單次轉換模式(One-Shot mode)和連續掃描模式(Scan mode)單次轉換模式就是把所有使能的標準通道(由 NCMR 寄存器使能)轉換完成後就自動停止轉換,而連續掃描模式就是連續循環轉換。其中軟體觸發模式就是給 MCR[NSTART] 寫 1,而硬體觸發就是通過 TRGMUX 模塊來配置其他外設信號觸發標準通道轉換。 這時候就存在轉換順序的問題,轉換順序一般是由轉換通道的類型所決定,轉換順序為 Precision—>standard—>External,若是同類型通道,則轉換順序是由通道的序號決定,同類型通道從小到大依次轉換,當所有通道轉換完成後 ECH 中斷置位。 例如:設備中存在 A→B→C→D→E→F→G→H 通道,需要一次性轉換 B→D→E通道。轉換從通道 B 開始,接著是通道 D 和通道 E 的轉換。在通道 E 轉換結束時,掃描通道停止,如下圖:
2.1.2 注入觸發: 當一次注入觸發信號來了,ADC模塊就會立即去轉換使能的注入通道(由JCMR寄存器使能),如果當前ADC模塊正在轉換標準通道,那麼此時ADC會中斷轉換並開始轉換注入通道,等注入通道轉換完成後再恢復標準通道的轉換。流程示意圖如下: 例如:設備正處於一次性轉換 B→C→D→E 的流程中,此時轉換流走到了 Convert C 時注入 I、J 的轉換通道,則立即開始 I、J 的轉換,然後返回 Convert C 的轉換流,就類似中斷的機制,當遇到注入觸發時就會先去處理中斷再返回處理原來的程序。注入觸發方式也是有軟體觸發和硬體觸發兩種,軟體觸發就是 MCR[JTRGEN]寫 1,而硬體觸發就是通過 TRGMUX 模塊來配置其他外設信號觸發 ADC 注入通道轉換。 2.1.3 BCTU 觸發: BCTU 觸發就是用外部模塊 BCTU 發起信號去觸發 ADC 模塊。下圖是兩個模塊之間的連接: 其中 BCTU 發送給 ADC 觸發信號 Tregger 和通道號 Channel,而 ADC 模塊則返回三個信號,分別是 Next command,End of conversion 和 Data, 其中 Next command 表示 ADC 模塊已經準備好接受下一次的觸發信號了,End of conversion 表示當前轉換完成,數據可用,至於 Data 就是轉換的結果數據。 其中 BCTU 有兩種模式去控制 ADC,分別是 BCTU Trigger mode 和 BCTU Control mode。 BCTU Trigger mode: 這個模式其實就是增強型注入觸發,處於該種模式下,當 ADC 模塊接收到來自 BCTU 的觸發信號時,ADC 模塊就會終止當前轉換,立即響應 BCTU 的觸發,原理和注入觸發是一致的。也就是說三者的優先級關係為 BCTU 觸發 > 注入觸發 > 標準觸發。所以當 ADC 處於響應 BCTU 的狀態時,注入觸發信號是無效的。 BCTU Control mode: 這種模式就比較簡單了,就是 BCTU 一家獨大,完全接手 ADC 的控制權,此時只有 BCTU 可以啟動轉換,另外兩種觸發信號無效。 2.2 自檢 S32K3 系列的 MCU 一般具有 ASIL-D 功能安全等級,為確保晶片的正常運行,S32K3 的 ADC 具有自檢功能。啟用自檢後,ADC 會自動檢查其組件,並在發現錯誤時標記錯誤,此處入門過程一般使用不到,不贅述,只做簡單介紹。 2.3 模擬看門狗 模擬看門狗非常簡單,就是設置兩個值 THRH 和 THRL,當滿足以下條件的一種時會產生中斷信號 2.4 轉換時間 最後提一下轉換時間的計算,轉換時間的基準是 ADC 的時鐘源,轉換時間為: 預採樣時間 + 採樣時間 + 比較時間 + 數據處理時間 + 觸發處理時間 預採樣時間(PST,等於 ST 並延時 1 個 ADC_CLK 周期,一般預採樣不使能,所以一般等於 0) 採樣時間(ST,可配置,最小值為 8 個 ADC_CLK 周期) 比較時間(CT,固定,每 bit 4 個 ADC_CLK 周期) 數據處理時間(DP,固定,2 個 ADC_CLK 周期) 觸發處理時間(TPT,固定,1 個 ADC_CLK 周期) 所以,總轉換時間=([(PST+ST+CT+DP) * 通道數 ]+TPT)* ADC_CLK 周期。
|