作者:英飛凌 楊飛
DMA的應用場景較為廣泛, 其源地址和目的地址可以是我們的RAM, 也可以是我們的外設寄存器, 如各種FIFO寄存器或者結構寄存器。
本文主要介紹DMA的一種使用場景, 將GTM的TIM通道的FIFO數據通過DMA搬運到RAM中進行處理。
基本功能
客戶在汽車軟體開發過程中經常會遇到需要實時採集PWM信號(邊沿時刻和個數)的情況,本文就是基於該應用場景介紹DMA在其中的實際應用。利用AURIX™強大的GTM_TIM模塊可以實現對各種複雜的PWM輸入信號的捕獲,採集其邊沿觸發時刻,並對邊沿個數進行計數。出於降低CPU負荷的角度考慮,採用DMA對TIM中的FIFO數據進行實時搬運, 供軟體進行處理。
配置方法
-
利用GTM的某個TIM通道對PWM輸入信號進行採集, TIM Channel工作在TPWM模塊,相應的時間戳存儲在GPR0和GPR1寄存器當中,邊沿的Counter信息存儲在GPR0和GPR1的ECNT bits當中(ECNT的數據存儲範圍是0-255)。
-
通過DMA對該通道的GPR0和GPR1中的數據進行搬運, 存儲到固定的RAM空間(某個數組當中)。
開發環境
1、開發板布置
Board A用於產生PWM的輸入信號。
Board B用於實際工作的ECU對PWM信號的處理, TIM0 Channel(採用P0.9), DMA通道選擇DMA Channel 60, 使用的MCU為TC277TP, 黃色的導線是GND, 對兩個開發板進行工地, 灰色的線是PWM的信號線。
圖1 開發板布置圖
2、編譯器
採用TASKING 4.3.1-Tricore Eclipse IDE。
3、調試器
採用UDE5.2。
4、軟體開發工具
採用EB Tresos開發MCAL的驅動軟體。
PWM輸入信號
PWM的輸入信號波形如下圖(圖2)所示在, 為100ms的高電平和100ms低電平的輸入信號。
圖2 PWM輸入信號
GPIO口採用P33.6作為Board A是GPIO普通輸出口。相應的參考代碼如下:
MCAL配置
1、MCU
GTM的時鐘需要配置為80MHz, 如圖3所示:
圖3 GTM時鐘配置
TIM的時鐘輸入源為Clock0, 80MHz/(99+1) = 0.8MHz,如圖4:
圖4 TIM的時鐘源配置
DMA Channel選擇60,在DmaConfiguration選項中進行設置,如圖5所示:
圖5 DMA Channel選擇
2、TIM
TIM Channel的配置包含如下幾個方面:
-
TIM Channel的使能
-
Port的選擇
-
上升沿下降沿檢測
-
GPR0和GPR1加載值的選擇
-
TIM的工作模式
-
中斷的種類和中斷模式的選擇
具體參數選擇, 詳見圖6:
圖6 TIM Channel的配置
3、IRQ
中斷選擇DMA觸發,優先級等於DMA的通道號60。
圖7 IRQ配置
4、DMA
DMA通道的配置需要考慮如下幾個方面:
-
DMA通道號
-
Data Move的數據寬度
-
Data Move的次數
-
連續模式還是單次模式
-
源地址和目的地址的循環長度等等
具體配置見圖8:
圖8 DMA Channel配置
代碼實現
首先需要頂一個32個元素的數組
Tim的Notification函數定義
以及通過硬體硬體觸發DMA搬運的啟動函數調用,設置好DMA的通道號, 源地址和目標地址等等。
調試
上電之後, 我們可以觀測到GTM_TIM0_CH0_GPR0和GPR1的寄存器值以及他們的ECNT bits的變化。見圖9:
圖9 GPR0/1的寄存器觀測值
而針對DMA部分, 可以看到DMA的源地址在GPR0寄存器(0xF0101000)和GPR1寄存器(0x101004)之間來回切換, 目的地址會在我們RAM的地址(u32g_EdgeTime數組)裡面輪詢中存放。見圖10:
圖10 DMA源地址和目標地址觀測值
總結
本文介紹了DMA在AURIX™ 1G/2G的一種應用場景,即用於GTM的TIM FIFO數據的搬運,採用DMA可以在保證時效性的同時有效降低CPU負荷。
DMA還有其他的應用場景:
-
通過DMA將ADC的結果寄存器的數據搬運到RAM
-
通過DMA將RAM中帶有PWM信息的數據搬運到ATOM的FIFO中
-
通過DMA實現RAM和QSPI的TX FIFO, RX FIFO數據的搬運等等
該文章來源於“英飛凌汽車電子生態圈”官方微信,英飛凌汽車電子生態圈對該內容擁有最終解釋權。如需轉載,請註明來源,英飛凌保留所有權利。
QR Code. (英飛凌汽車電子生態圈)官方微信公眾號
評論