基于S3C6410的DMA數(shù)據(jù)跟蹤技術(shù)在TD-LTE中的實(shí)現(xiàn)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘 要: 基于TD-LTE系統(tǒng)中數(shù)據(jù)跟蹤技術(shù)的研究與DMA獲取系統(tǒng)總線(xiàn)的不同模式,設(shè)計(jì)并分析比較了在S3C6410上通過(guò)DMA實(shí)現(xiàn)原語(yǔ)跟蹤的兩種方案。根據(jù)TD-LTE無(wú)線(xiàn)綜合測(cè)試儀中的設(shè)計(jì)要求,選擇了中斷標(biāo)志查詢(xún)模式獲取系統(tǒng)總線(xiàn)的方案,實(shí)現(xiàn)了TD-LTE系統(tǒng)原語(yǔ)的實(shí)時(shí)跟蹤,滿(mǎn)足了系統(tǒng)對(duì)CPU資源利用率以及數(shù)據(jù)傳輸速度和準(zhǔn)確性的要求。
關(guān)鍵詞: 直接存儲(chǔ)器存取;嵌入式應(yīng)用;長(zhǎng)期演進(jìn);跟蹤數(shù)據(jù)
原語(yǔ)是從物理層到非接入層各層間的通信數(shù)據(jù),這些數(shù)據(jù)包含帶有大量標(biāo)識(shí)信息的頭。在TD-LTE無(wú)線(xiàn)綜合測(cè)試儀表數(shù)據(jù)傳輸過(guò)程中,從最上端非接入層開(kāi)始向下逐層將數(shù)據(jù)加頭并加入本層的有效數(shù)據(jù),到物理層后向上反饋并逐層解析頭提取本層所需數(shù)據(jù)。這些數(shù)據(jù)的正確性是確保整個(gè)通信系統(tǒng)正常運(yùn)作的關(guān)鍵所在,因此,在系統(tǒng)設(shè)計(jì)與調(diào)試過(guò)程中對(duì)這些數(shù)據(jù)的實(shí)時(shí)跟蹤檢測(cè)十分必要。
本文介紹了在TD-LTE中基于三星ARM1176JZF芯片S3C6410的DMA技術(shù)的具體應(yīng)用實(shí)現(xiàn)(即原語(yǔ)跟蹤技術(shù)),以及在具體環(huán)境中不同技術(shù)方案的對(duì)比分析。最終的設(shè)計(jì)方案充分利用了DMA在基帶芯片中的可用性與占用CPU資源小的優(yōu)勢(shì)[1],實(shí)現(xiàn)了高效實(shí)時(shí)可靠的原語(yǔ)跟蹤。
1 S3C6410中DMA控制器特性
S3C6410包含4個(gè)DMA控制器,每個(gè)DMA控制器由8個(gè)傳輸通道組成。DMA控制器的每個(gè)通道能在主AXI(Advanced Extensible Interface)總線(xiàn)的設(shè)備和外部AXI總線(xiàn)之間通過(guò)AHB(Advanced High performance Bus)到AXI進(jìn)行單向數(shù)據(jù)傳輸。DMA控制器結(jié)構(gòu)框圖如圖1所示,每個(gè)控制器提供16個(gè)外設(shè)DMA請(qǐng)求,并且DMA控制器支持外部中斷響應(yīng),即每個(gè)通道可以支持從內(nèi)存到外設(shè)、從內(nèi)存到內(nèi)存、從外設(shè)到內(nèi)存、從外設(shè)到外設(shè)4種模式的數(shù)據(jù)傳輸。在TD-LTE系統(tǒng)中,原語(yǔ)跟蹤使用的是內(nèi)存到外設(shè)模式,每個(gè)外設(shè)連接到DMA控制器,可以產(chǎn)生DMA脈沖請(qǐng)求或是單一DMA請(qǐng)求,脈沖大小可編程。DMA內(nèi)部有4個(gè)字的FIFO通道,支持8 bit、16 bit、32 bit寬度處理。由于原語(yǔ)跟蹤采用的外設(shè)是UART支持的8 bit輸出,故本文在設(shè)計(jì)中DMA也采用8 bit處理[2]。
2 DMA信號(hào)處理流程與跟蹤步驟
數(shù)據(jù)跟蹤的基本機(jī)制如下:首先為各層的數(shù)據(jù)在內(nèi)存中開(kāi)辟存儲(chǔ)空間,將數(shù)據(jù)存儲(chǔ)到指定緩存中,再由DMA實(shí)現(xiàn)內(nèi)存到外設(shè)的數(shù)據(jù)搬移。本文的外設(shè)是UART,將數(shù)據(jù)搬移到UART的輸出緩存區(qū)以實(shí)現(xiàn)數(shù)據(jù)跟蹤。DMA控制器和外設(shè)的信號(hào)交互如圖2所示。
當(dāng)請(qǐng)求被允許且剩余數(shù)據(jù)量大于脈沖大小時(shí),DMA控制器發(fā)送全部數(shù)據(jù)脈沖;而剩余數(shù)據(jù)量小于脈沖大小時(shí),DMA控制器將再次監(jiān)控請(qǐng)求信號(hào)等待下次傳輸[3]。本文在數(shù)據(jù)跟蹤時(shí)將脈沖設(shè)置為1以滿(mǎn)足數(shù)據(jù)跟蹤實(shí)時(shí)性的要求。此外,由于單次數(shù)據(jù)量并不是很大(最大不過(guò)字節(jié)單位的數(shù)據(jù)量),因此沒(méi)有采用鏈表模式來(lái)傳輸數(shù)據(jù)。整個(gè)跟蹤過(guò)程主要包括以下幾個(gè)步驟:首先DMA接收到外設(shè)驅(qū)動(dòng)初始化完畢后發(fā)送的DMA請(qǐng)求;然后DMA控制器請(qǐng)求CPU將數(shù)據(jù)搬移到需要使用的總線(xiàn)交給DMA控制,將數(shù)據(jù)預(yù)讀取到DMA-FIFO中(即DMA數(shù)據(jù)搬移內(nèi)部過(guò)程);最后打開(kāi)DMA通道將DMA-FIFO中的數(shù)據(jù)傳輸?shù)経ART的輸出緩存中,輸出到顯示設(shè)備。其中只有驅(qū)動(dòng)初始化和總線(xiàn)釋放過(guò)程有CPU參與,而驅(qū)動(dòng)初始化過(guò)程是一次性的,之后的步驟都由DMA單獨(dú)控制從而釋放CPU資源以繼續(xù)執(zhí)行系統(tǒng)的其他工作。工作中會(huì)產(chǎn)生更多的原語(yǔ)需要DMA反復(fù)運(yùn)行支持實(shí)時(shí)跟蹤,圖3為數(shù)據(jù)跟蹤基本設(shè)計(jì)流程。
3 DMA跟蹤數(shù)據(jù)方案設(shè)計(jì)與分析
數(shù)據(jù)在內(nèi)存中的緩存處理方案是:根據(jù)TD-LTE無(wú)線(xiàn)綜合測(cè)試儀表系統(tǒng)單次跟蹤的數(shù)據(jù)量大小以及原語(yǔ)產(chǎn)生地址與時(shí)間的隨機(jī)不連續(xù)性,DMA搬移數(shù)據(jù)時(shí)設(shè)置了100 KB的數(shù)據(jù)緩存區(qū),以統(tǒng)一數(shù)據(jù)地址提高跟蹤效率[4],從而在合理利用存儲(chǔ)空間的同時(shí)也保證了數(shù)據(jù)在傳輸過(guò)程中的高效與完整性,設(shè)計(jì)中采用起始地址和結(jié)束地址標(biāo)志相減的方式判斷單次數(shù)據(jù)量大小。當(dāng)數(shù)據(jù)存儲(chǔ)到100 KB緩存邊界緩存溢出時(shí),需要采用一定的數(shù)據(jù)處理機(jī)制來(lái)做溢出判斷,其處理方式如圖4所示。將本次的數(shù)據(jù)量分成A、B兩塊,分兩次分別傳輸,A部分是本次數(shù)據(jù)搬移起始位置到100 KB邊界位置的數(shù)據(jù)量,B部分是當(dāng)前數(shù)據(jù)總量減去A部分?jǐn)?shù)據(jù)后的剩余數(shù)據(jù)量。這里要注意的是:A部分?jǐn)?shù)據(jù)傳輸完成后,系統(tǒng)可能又產(chǎn)生了新的原語(yǔ)數(shù)據(jù)塊C,因此設(shè)計(jì)中,在傳輸數(shù)據(jù)塊B時(shí)要重新讀取數(shù)據(jù)的終止標(biāo)志位加上后面產(chǎn)生的新的數(shù)據(jù)塊C,以保證數(shù)據(jù)的實(shí)時(shí)性與完整性。
在TD-LTE無(wú)線(xiàn)綜合測(cè)試儀表系統(tǒng)中,原語(yǔ)是單條產(chǎn)生的,并帶有一定的時(shí)間間隔。為滿(mǎn)足系統(tǒng)對(duì)實(shí)現(xiàn)數(shù)據(jù)跟蹤的實(shí)時(shí)性要求,在跟蹤數(shù)據(jù)時(shí)也是單條實(shí)時(shí)顯示。這就要求在設(shè)計(jì)中判定DMA在每次傳輸是否完成,避免本次傳輸還未完成而下一次傳輸已經(jīng)開(kāi)始,導(dǎo)致本次傳輸數(shù)據(jù)不完整。因此在設(shè)計(jì)過(guò)程中,采用了中斷判斷模式和中斷標(biāo)志位判斷模式兩種方案來(lái)判定傳輸是否完成并獲取總線(xiàn)來(lái)執(zhí)行下一次數(shù)據(jù)搬移。
3.1 中斷判定模式
根據(jù)S3C6410中DMA控制器特性,DMA在數(shù)據(jù)搬移結(jié)束時(shí)可以產(chǎn)生數(shù)據(jù)計(jì)數(shù)中斷或數(shù)據(jù)錯(cuò)誤中斷兩種中斷。設(shè)計(jì)中打開(kāi)DMA對(duì)應(yīng)的GPIO(General Purpose Input Output)口并初始化相對(duì)應(yīng)的41號(hào)VIC(Vectored Interrupt Controllers)中斷向量,就可以利用數(shù)據(jù)計(jì)數(shù)中斷來(lái)完成系統(tǒng)的外部中斷響應(yīng),進(jìn)入中斷函數(shù),在中斷函數(shù)中再次調(diào)用DMA以此完成多次數(shù)據(jù)搬移[4]。在使能DMA通道并且數(shù)據(jù)傳輸完成后由硬件自動(dòng)響應(yīng)中斷,有效避免了DMA設(shè)備在傳輸過(guò)程中被下一次傳輸請(qǐng)求打斷,而搬移數(shù)據(jù)和系統(tǒng)其他程序的執(zhí)行完全互不干擾。這種模式可以在各種數(shù)據(jù)量大小的數(shù)據(jù)搬移過(guò)程中最大限度地利用CPU資源。但是,由于采用了上述的數(shù)據(jù)緩存機(jī)制,而且在TD-LTE系統(tǒng)中斷處理中比DMA計(jì)數(shù)中斷優(yōu)先級(jí)高的中斷還有很多,因此采用中斷模式在實(shí)際運(yùn)用中會(huì)出現(xiàn)以下三種典型不穩(wěn)定的情況及所采取的措施:
(1)在CPU向緩存中搬移數(shù)據(jù)過(guò)程中產(chǎn)生了中斷,此時(shí)會(huì)出現(xiàn)當(dāng)前一次要搬移的數(shù)據(jù)在內(nèi)存中不完整或標(biāo)志位混亂的情況,因此,在設(shè)計(jì)時(shí)搬移數(shù)據(jù)前還需要增加內(nèi)存數(shù)據(jù)是否存儲(chǔ)完成的標(biāo)志位判定。由于中斷類(lèi)型眾多,設(shè)計(jì)有一定難度。
(2)最后幾條原語(yǔ)數(shù)據(jù)在存入內(nèi)存緩存區(qū)后,若前面的搬移數(shù)據(jù)還沒(méi)有完成,則無(wú)法獲取總線(xiàn),則會(huì)導(dǎo)致最后幾條原語(yǔ)無(wú)法跟蹤。因此,需要在原語(yǔ)全部發(fā)送完畢后在系統(tǒng)程序靠后的固定位置添加一條空的原語(yǔ)跟蹤語(yǔ)句來(lái)跟蹤最后幾條。
(3)當(dāng)出現(xiàn)較大數(shù)據(jù)量搬移時(shí)耗時(shí)較長(zhǎng),可能超過(guò)上層系統(tǒng)原語(yǔ)發(fā)送的間隔時(shí)間,后面幾條原語(yǔ)將堆積到緩存中,等待下一次DMA總線(xiàn)獲取后,一次性搬出,這樣會(huì)導(dǎo)致下一次數(shù)據(jù)搬移時(shí)間的延長(zhǎng)。這一條是基于機(jī)制的本質(zhì)問(wèn)題,實(shí)時(shí)性和數(shù)據(jù)完整性預(yù)計(jì)會(huì)受到較大影響。
3.2 中斷標(biāo)志位判定模式