<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 利用DSP/BIOS操作系統(tǒng)進(jìn)行快速開發(fā)設(shè)計的軟件架構(gòu)設(shè)計

          利用DSP/BIOS操作系統(tǒng)進(jìn)行快速開發(fā)設(shè)計的軟件架構(gòu)設(shè)計

          作者: 時間:2012-10-10 來源:網(wǎng)絡(luò) 收藏

            3.2 系統(tǒng)層

            系統(tǒng)層設(shè)計為設(shè)計的關(guān)鍵點(diǎn),充分利用提供的調(diào)度模塊和同步模塊。將控制層中的指令解析、交換控制和交換表更新模塊與PRD綁定,周期檢查有無新指令,并根據(jù)指令解析更新交換表,調(diào)度周期由32位實(shí)時邏輯時鐘控制。將控制層中的交換控制和數(shù)據(jù)交換模塊與TSK綁定,根據(jù)從其他模塊收到的信號量SEM或者郵箱信息MBX,進(jìn)行數(shù)據(jù)格式轉(zhuǎn)換,完成不同格式的數(shù)據(jù)在不同信道間的透明傳輸。將中斷服務(wù)與HWI進(jìn)行綁定,完成數(shù)據(jù)實(shí)時收發(fā)。運(yùn)用同步模塊Synchronization中的郵箱機(jī)制MBX與信號量SEM機(jī)制完成HWI、PRD和TSK之間的消息傳遞。運(yùn)用的調(diào)度算法,完成多個任務(wù)之間的調(diào)度,控制數(shù)據(jù)收發(fā)及數(shù)據(jù)處理。

            3.3 算法層

            把各類算法單獨(dú)列為一層,匯聚多類信號算法,采用松散耦合和可重入設(shè)計方法,方便算法的移植、維護(hù)及多路并行工作設(shè)計,并根據(jù)應(yīng)用需求,方便算法的裁減和擴(kuò)充。各類算法嚴(yán)格獨(dú)立,都以單獨(dú)庫和頭文件的形式提供。算法層的結(jié)構(gòu)如圖2所示。

            3.4 通信常用算法

            DTMF:雙音多頻信號,每個號碼由兩個音頻信號相加得到,廣泛用在電話撥號和來電顯示中,其生成和檢測算法。

            FSK:利用1 200 Hz和2 200 Hz的正弦信號,采用2FSK調(diào)制解調(diào)方法,廣泛用于來電顯示中,其生成和檢測算法。

            TONE:三音生成和檢測算法,包含信號音、忙音、回鈴音生成和三音檢測,廣泛用于電話交換系統(tǒng)中。

            G.711:速率為64 khit·s-1的語音編解碼標(biāo)準(zhǔn),廣泛用于電話交換系統(tǒng)中。

            CVSD:連續(xù)可變斜率編碼的英文縮寫,速率為16 khit·s-1的語音編解碼標(biāo)準(zhǔn),用于低速率通信系統(tǒng)中,其編解碼算法。

            3.5 控制層

            控制層設(shè)計為設(shè)計第二個關(guān)鍵點(diǎn),在應(yīng)用層與系統(tǒng)層、算法層之間起到橋梁作用。由指令解析、內(nèi)存管理、中斷服務(wù)和交換控制4個模塊組成。指令解析由PRD調(diào)用,周期性的判斷是否具有新的指令到來,如有新指令到來,首先把新的指令放入到指令FIFO存儲器,然后清空指令空間,避免下次調(diào)用指令解析函數(shù)時做出誤判斷,最后指令解析模塊會對指令FIFO中的內(nèi)容進(jìn)行解析,根據(jù)解析結(jié)果更新交換控制模塊中的交換表。內(nèi)存管理為每個業(yè)務(wù)通道分配了發(fā)送緩存區(qū)Tx Buffer和接收緩存區(qū)Rx Buffer,并為每個Tx Butter和Rx Buff er配備了管理指針,用于指示Buffer中的數(shù)據(jù)的存儲位置及空閑位置,并由此計算出每個Buffer的數(shù)據(jù)個數(shù)及空閑空間大小,完成對異常操作如寫操作過程中產(chǎn)生的Buffer溢出或讀操作過程產(chǎn)生的Buffer空的處理。在產(chǎn)生硬件中斷時,中斷服務(wù)由系統(tǒng)HWI調(diào)用,完成實(shí)時數(shù)據(jù)收發(fā)。中斷服務(wù)需要保證實(shí)時性,不作過多控制和計算,盡可能減少執(zhí)行指令數(shù)目,以及使用短周期指令,必要情況下使用CCS提供的已經(jīng)優(yōu)化的IntrinsICs函數(shù)進(jìn)行程序的優(yōu)化或運(yùn)用匯編指令編寫。HWI不可阻塞,在中斷服務(wù)中,不可調(diào)用具有可能引起阻塞的函數(shù)。與系統(tǒng)中其他任務(wù)之間的信息交換可以通過協(xié)助模塊中的郵箱機(jī)制MBX或信號燈機(jī)制SEM進(jìn)行交互。交換控制模塊實(shí)現(xiàn)不同通道數(shù)據(jù)之間的交換,并伴隨不同數(shù)據(jù)格式相互轉(zhuǎn)換。交換控制包含交換表管理和數(shù)據(jù)交換,具備多種的交換能力。交換表管理具有交換表?xiàng)l目刪除和增加的功能。數(shù)據(jù)交換模塊根據(jù)交換表完成源通道數(shù)據(jù)到目的通道數(shù)據(jù)格式轉(zhuǎn)換,然后將轉(zhuǎn)換后的數(shù)據(jù)放置到目的通道的發(fā)送緩存中,等待數(shù)據(jù)發(fā)送,具有多路并行工作能力。控制層內(nèi)部模塊之間的數(shù)據(jù)交互如圖3所示。

            3.6 應(yīng)用層

            應(yīng)用層設(shè)計采用內(nèi)存共享機(jī)制,實(shí)現(xiàn)與CPU的指令交互和數(shù)據(jù)交互。為確保每次讀寫數(shù)據(jù)的完整性和正確性,兩塊處理器間需要建立有效的通信機(jī)制,保證不會同時對同一地址進(jìn)行操作。指令交互負(fù)責(zé)接收CPU指令并向CPU返回結(jié)果。指令解析模塊周期性讀取指令,并進(jìn)行解析,控制每個業(yè)務(wù)通道的操作,如果是DTMF檢測、FSK檢測或TONE檢測指令,DSP將解析出的結(jié)果反饋給CPU。如果是DTMF產(chǎn)生、FSK產(chǎn)生或TONE產(chǎn)生指令,DSP將向指定業(yè)務(wù)通道發(fā)送號碼對應(yīng)的DTMF信號、FSK信號或撥號音、忙音、回鈴音或催掛音等;如果是兩信道語音格式轉(zhuǎn)換指令,DSP將從源信道接收數(shù)據(jù),完成轉(zhuǎn)換格式后,發(fā)往目的通道。數(shù)據(jù)交互,DSP與CPU通過共享內(nèi)存還可進(jìn)行數(shù)據(jù)交互,數(shù)據(jù)的存儲狀態(tài)將由內(nèi)存管理模塊進(jìn)行控制。

            4 結(jié)束語

            文中介紹的,已在實(shí)際應(yīng)用中得到驗(yàn)證,在TMS320VC5416可同時完成32路多種信號處理DTMF、FSK、TONE、CVSD、G.711任意配置,在TMS320C6418可同時完成128路多信號處理DTMF、FSK、TONE、CVSD、G.711任意配置,并可加入多路G.729處理。該軟件架構(gòu)能夠保證不同算法的單獨(dú)開發(fā)和重復(fù)利用,在跨平臺移植時,根據(jù)硬件接口不同,僅需對驅(qū)動層進(jìn)行重新配置,其余層的代碼可直接移植,加速了多信號并行處理軟件開發(fā)設(shè)計。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();