本發(fā)明涉及檢測(cè)can波特率技術(shù)領(lǐng)域,尤其涉及一種利用dma實(shí)現(xiàn)高速can波特率的自動(dòng)識(shí)別方法。
背景技術(shù):
在一些應(yīng)用場(chǎng)合中,需要ecu控制器做can波特率自動(dòng)適配。ecu控制器在發(fā)送數(shù)據(jù)前,先監(jiān)聽(tīng)一段總線數(shù)據(jù),通過(guò)對(duì)總線電平變化規(guī)律的分析,估算出can總線目前的波特率,確定波特率后再連接到總線。
目前通過(guò)ecu做can波特率自動(dòng)適配主要有以下幾種方案:(1)波特率枚舉法:ecu不斷的修改can控制器的波特率,直到can控制器接收到有效數(shù)據(jù)為止。缺點(diǎn):波特率識(shí)別比較慢,若遇到ecu晶振不準(zhǔn)或被識(shí)別總線采用非常規(guī)波特率,會(huì)出現(xiàn)波特率無(wú)法識(shí)別的問(wèn)題。(2)接收管腳中斷法:關(guān)閉can控制器,開(kāi)啟接收管腳中斷,在中斷中記錄管腳變化的時(shí)間戳。積累一定數(shù)據(jù)后通過(guò)分析時(shí)間戳來(lái)估算can波特率。缺點(diǎn):需要在中斷中記錄時(shí)間戳,誤差比較大;不支持高速率的can總線(>500kbit/s)。(3)接收管腳捕獲法:關(guān)閉can控制器,開(kāi)啟接收管腳捕獲功能,當(dāng)接收管腳電平發(fā)生變化時(shí),通過(guò)定時(shí)器的捕獲功能獲得時(shí)間戳,在捕獲中斷中記錄這個(gè)時(shí)間戳。積累一定數(shù)據(jù)后通過(guò)分析時(shí)間戳來(lái)估算can波特率。缺點(diǎn):can通訊管腳不一定有定時(shí)器捕獲功能,如果使用mcu外部連線就提高了電路復(fù)雜度,因?yàn)樾枰谥袛嘀杏涗洉r(shí)間戳,同樣不支持高速率的can總線(>500kbit/s)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足,提供了一種利用dma實(shí)現(xiàn)高速can波特率的自動(dòng)識(shí)別方法。
本發(fā)明是通過(guò)以下技術(shù)方案實(shí)現(xiàn)的:一種利用dma實(shí)現(xiàn)高速can波特率的自動(dòng)識(shí)別方法,dma采集輸入管腳的電平,其特征在于,所述dma接收can.rx的數(shù)據(jù)信號(hào);所述dma接收定時(shí)器timer發(fā)射的高頻率的信號(hào);所述dma每接收一次信號(hào),就讀取一次io輸入寄存器,并將其值寫(xiě)入ram中;
包括以下步驟:
(1)首先dma采集輸入管腳的電平,由于不需要進(jìn)入中斷,可以獲得更高頻率的數(shù)據(jù)采樣率;
(2)通過(guò)配置定時(shí)器timer,以一個(gè)很高的頻率向dma發(fā)送信號(hào),dma每接收一次信號(hào),就讀取一次io輸入寄存器,并將其值寫(xiě)入ram中;
(3)因?yàn)閿?shù)據(jù)采樣的頻率很快,為了防止ram溢出,主程序只要定期的檢查隊(duì)列中是否有變化的數(shù)據(jù),分析其數(shù)據(jù)表征的can接收管腳電平,即可分析出對(duì)應(yīng)的can波特率。
作為本發(fā)明的優(yōu)選方式之一,所述dma以環(huán)形隊(duì)列的方式操作ram,防止ram的溢出。
作為本發(fā)明的優(yōu)選方式之一,所述的高頻率的典型值為10mhz。
作為本發(fā)明的優(yōu)選方式之一,所述定時(shí)器timer為ccu6的定時(shí)器。
本發(fā)明相比現(xiàn)有技術(shù)的優(yōu)點(diǎn)在于:(1)dma一般用于通訊過(guò)程中,外設(shè)與內(nèi)存間自動(dòng)數(shù)據(jù)傳輸,極少用于i/o端口的數(shù)據(jù)采集。但是在波特率檢測(cè)這種特殊情況下,這種特殊的用法有不可替代的優(yōu)點(diǎn)。(2)因?yàn)槭莇ma直接讀取外設(shè)管腳的寄存器,對(duì)can接收管腳沒(méi)有其他要求。(3)由于不需要進(jìn)中斷,cpu資源占用少,采樣速率高,且采樣結(jié)果準(zhǔn)確。
附圖說(shuō)明
圖1是本發(fā)明的示意圖。
具體實(shí)施方式
下面對(duì)本發(fā)明的實(shí)施例作詳細(xì)說(shuō)明,本實(shí)施例在以本發(fā)明技術(shù)方案為前提下進(jìn)行實(shí)施,給出了詳細(xì)的實(shí)施方式和具體的操作過(guò)程,但本發(fā)明的保護(hù)范圍不限于下述的實(shí)施例。
實(shí)施例1
如圖1所示:一種利用dma實(shí)現(xiàn)高速can波特率的自動(dòng)識(shí)別方法,dma采集輸入管腳的電平,所述dma接收can.rx的數(shù)據(jù)信號(hào);所述dma接收定時(shí)器timer發(fā)射的高頻率的信號(hào);所述dma每接收一次信號(hào),就讀取一次io輸入寄存器,并將其值寫(xiě)入ram中;當(dāng)dma采集數(shù)據(jù)頻率比較高時(shí),因?yàn)閷?duì)mcu總線的占用,會(huì)一定程度上降低cpu的執(zhí)行速度,但波特率檢查只在接入總線后較短的一段時(shí)間內(nèi)執(zhí)行,并不會(huì)對(duì)系統(tǒng)照成很大的影響;
包括以下步驟:
(1)首先dma采集輸入管腳的電平,由于不需要進(jìn)入中斷,可以獲得更高頻率的數(shù)據(jù)采樣率;
(2)通過(guò)配置定時(shí)器timer,以一個(gè)很高的頻率向dma發(fā)送信號(hào),dma每接收一次信號(hào),就讀取一次io輸入寄存器,并將其值寫(xiě)入ram中;
(3)因?yàn)閿?shù)據(jù)采樣的頻率很快,為了防止ram溢出,主程序只要定期的檢查隊(duì)列中是否有變化的數(shù)據(jù),分析其數(shù)據(jù)表征的can接收管腳電平,即可分析出對(duì)應(yīng)的can波特率。
作為本發(fā)明的優(yōu)選方式之一,所述dma以環(huán)形隊(duì)列的方式操作ram,防止ram的溢出。
作為本發(fā)明的優(yōu)選方式之一,所述的高頻率的典型值為10mhz。
作為本發(fā)明的優(yōu)選方式之一,所述定時(shí)器timer為ccu6的定時(shí)器。
本發(fā)明在aurixtc265硬件基礎(chǔ)上,使用ccu6的定時(shí)器作為圖1中定時(shí)器timer,首先對(duì)ccu6的定時(shí)器進(jìn)行配置,使其每0.1us秒產(chǎn)生一個(gè)硬件事件:
用此配置設(shè)置好ccu6的定時(shí)器后,掛接硬件事件與dma:
然后配置dma的工作模式為:
啟動(dòng)dma后,數(shù)據(jù)緩沖pinstatebuffser中始終保存著最近0.5ms內(nèi)管腳變化的情況,對(duì)pinstatebuffser中的數(shù)據(jù)稍作分析,即可得到can通訊的波特率。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。