1 MPC8280 處理器特性及MCC 概述
MPC8280 是一款集成了高性能的PowerPC? RISC 微處理器和諸多外圍通信控制器的多用途通信處理器,在通信和網(wǎng)絡(luò)系統(tǒng)有較為廣泛的應(yīng)用。
MPC8280 模塊組成如圖1 所示。其中,G2_LE 內(nèi)核是MPC603e 微處理器的嵌入式版本,具有16KB 的指令緩存和16KB 的數(shù)據(jù)緩存;系統(tǒng)接口單元SIU 主要完成系統(tǒng)復(fù)位、中斷管理、時鐘配置、總線接口及內(nèi)存控制等功能;通信處理模塊CPM 包括一個32 位的RISC 處理器CP,三個全雙工的快速串行通信控制器FCC,兩個多通道控制器MCC,四個全雙工的串行通信控制器SCC,兩個全雙工的串行管理控制器SMC,SPI 接口,I2C 總線控制器等。時隙分配器可將SCC、FCC、SMC、MCC 的數(shù)據(jù)復(fù)用到八個時分復(fù)用接口TDM。
圖1 MPC8280 模塊結(jié)構(gòu)圖
MPC8280 有兩個具有時隙分配器的串行接口,分別為SI1 和SI2。每個SI 有四個時分復(fù)用接口。SI1 和SI2 分別對應(yīng)為TDMa1,TDMb1,TDMc1,TDMd1 和TDMa2,TDMb2,TDMc2,TDMd2。SI 可以根據(jù)SIRAM 的配置將TDM 的某一時隙路由到特定的接口(如TDMa1 的第2個時隙到MCC1 的第3 個通道,TDMb2 的第1 個時隙到FCC1 等)。
一個MCC 可以支持最多128 路獨立的時分串行通道。MPC8280 具有兩個MCC,每個MCC連接到一個SI。MCC 的數(shù)據(jù)流可以通過SI 的四個時分復(fù)用接口TDM 中的任何一個進(jìn)行數(shù)據(jù)傳輸。
一個MCC 中的128 個通道以32 個為一組連接到某一個TDM 接口上。MCC1 的通道(0-127)只能連接到SI1 上,MCC2 的通道(128-255)只能連接到SI2 上。MCC 的每一個通道都可獨立配置為不同于其它通道的工作模式。通過配置SI 和SIRAM 可以將TDM 數(shù)據(jù)中的時隙路由到特定的MCC 通道。
每個MCC 都具有以下特性:最多達(dá)128 路獨立的HDLC 或者透明傳輸通道,或者64 路SS7 通道;獨立的發(fā)送和接收路由;每一通道都可支持HDLC、透明傳輸或者SS7 協(xié)議。
2 MCC 操作概述
MPC8280 的內(nèi)核G2_LE 和外部的通信是由CPM 來完成。CP 根據(jù)相應(yīng)的接口控制寄存器配置來執(zhí)行數(shù)據(jù)發(fā)送或接收操作,操作完成后再向G2_LE 內(nèi)核的中斷寄存器寫入中斷值。
G2_LE 內(nèi)核根據(jù)中斷值調(diào)用相應(yīng)的中斷處理函數(shù),由此完成數(shù)據(jù)交互過程。
每一個MCC 能通過相應(yīng)的SI 連接到TDM 接口上。一旦SI 的某個TDM 被配置為包含有MCC 通道的時隙并且TDM 開始工作,CP 就將MCC 通道發(fā)送緩沖區(qū)內(nèi)的數(shù)據(jù)復(fù)制到發(fā)送FIFO內(nèi),然后SI 在時鐘驅(qū)動下將MCC 通道的發(fā)送FIFO 內(nèi)數(shù)據(jù)發(fā)送到TDM 接口上,或者將數(shù)據(jù)從TDM 接口上接收下來并存入到MCC 通道的接收FIFO 內(nèi),然后CP 再將接收FIFO 內(nèi)的數(shù)據(jù)復(fù)制到MCC 通道的接收緩存區(qū)內(nèi)。
CP 通過一系列與MCC 相關(guān)的數(shù)據(jù)結(jié)構(gòu)來實現(xiàn)對MCC 通道FIFO 的管理。MCC globalparameters 管理著MCC 模塊的各個通道,以及操作這些通道所用到的門限參數(shù)和基址指針的配置。每個通道還有一組channel-specific parameters 和channel-extra parameters,包含了該通道的協(xié)議狀態(tài)信息和指向該通道的接收及發(fā)送緩存描述符的指針。
Channel-specific parameters 會因該通道所工作的協(xié)議不同而作不同的解釋。如果TDM的配置含有MCC 超通道(super-channel)時隙的話還要用到超通道表(Super-channelTable)。
● Global Parameters MCC1 的global parameters 適用于通道0—127,MCC2 的global parameters 適用于通道128—255,分別位于相對于DPRAM 基址偏移0x8700 和0x8800 處。
●Channel-specific Parameters 這些參數(shù)僅局限于相應(yīng)的MCC 通道,位于相對于DPRAM 基址偏移64×CH_NUM 處。
● Channel Extra Parameters 包含相應(yīng)通道緩存描述符的基址和指針。位于相于對DPRAM 基址偏移XTRABASE+8×CH_NUM 處。其中XTRABASE 是MCC Global Parameters 之一。
● Super-channel Table 僅當(dāng)在SIRAM 中配置了超通道時使用。位于相對于DPRAM基址偏移SCTPBASE 處。其中SCTPBASE 是MCC Global Parameters 之一。由于我們的應(yīng)用場合未使用到超通道,所以未對該參數(shù)進(jìn)行配置。
● BD Tables 位于外部存儲器。接收通道的緩存描述符表位于相對于DPRAM 基址偏移MCCBASE+8×RBASE 處。發(fā)送通道的緩存描述符表位于相對于DPRAM 基址偏移MCCBASE+8×TBASE 處。MCCBASE 是Global Parameters 之一,RBASE/TBASE 是Channel Extra Parameters之一。
● Interrupt Queues 位于外部存儲器。共有一個發(fā)送中斷表和一至四個接收中斷表。TINTBASE 指向發(fā)送中斷表,RINTBASE指向接收中斷表。TINTBASE 和RINTBASE均為Global Parameters。
3 MCC 驅(qū)動的設(shè)計與實現(xiàn)
該驅(qū)動運行在嵌入式操作系統(tǒng)VxWorks5.5 之上,開發(fā)環(huán)境為Tornado 2.2.1 for PPC。
MCC 驅(qū)動主要分為以下幾部分:
3.1 MCC 驅(qū)動初始化
主要完成 MCC 模塊的初始化,具體內(nèi)容包括:為MCC 控制數(shù)據(jù)結(jié)構(gòu)分配內(nèi)存,并根據(jù)初始化參數(shù)初始化數(shù)據(jù)結(jié)構(gòu)的相關(guān)內(nèi)容;初始化MCC 相關(guān)的控制寄存器;創(chuàng)建接收消息隊列以及相應(yīng)接收處理任務(wù);最后啟動MCC 進(jìn)行數(shù)據(jù)收發(fā)。
(1) 分配并初始化MCC 操作所需的內(nèi)存空間。
申請數(shù)據(jù)緩沖區(qū)、緩沖區(qū)描述符及循環(huán)中斷表所需的存儲空間。由于MCC 通過DMA 與主存進(jìn)行發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的交換,所以內(nèi)存分配時必須要考慮緩存一致性問題,否則程序運行時可能出現(xiàn)較為嚴(yán)重的錯誤。VxWorks 提供了一個函數(shù)cacheDmaMalloc,可以為DMA 設(shè)備或者驅(qū)動程序分配緩存安全的內(nèi)存空間。
(2) 初始化循環(huán)中斷表。
將循環(huán)中斷表中的條目初始化為 0x00000000,并將最后一個條目初始化為0x40000000以標(biāo)記結(jié)束位置。
(3) 配置SI 寄存器和SIRAM。
設(shè)置每組MCC 通道所使用的TDM,并且配置SIRAM 以建立TDM 時隙和MCC 通道的對應(yīng)關(guān)系。
(4) 初始化MCC Global Parameters。主要包括:
● MCCBASE MCC 基址指針,指向位于外部存儲器的緩沖區(qū)描述符表,為最大512KB 的連續(xù)空間。
● MRBLR 最大接收緩沖區(qū)長度。必須是8 整數(shù)倍。
●GRFTHR 全局接收幀門限。用于減少由于頻繁產(chǎn)生中斷而造成的開銷。
● GRFCNT 全局接收幀計數(shù)。初始化為GRFTHR。
● TINTBASE 多通道發(fā)送循環(huán)中斷表基址指針。
● TINTPTR 指向可用的發(fā)送循環(huán)中斷表條目。初始化為TINTBASE。
● SCTPBASE 指向超通道表。
● RINTBASE 多通道接收循環(huán)中斷表基址指針。
(5) 初始化緩沖區(qū)描述符BD 和數(shù)據(jù)緩沖區(qū)。
BD 表位于外部存儲器,其組織結(jié)構(gòu)如圖2 所示。
圖 2 MCC 緩沖區(qū)描述符結(jié)構(gòu)組織圖
(6) 安裝數(shù)據(jù)接收回調(diào)函數(shù)。
(7) 初始化所使用通道的MCC Channel-specific Parameters。
(8) 初始化所使用通道的MCC Channel-extra Parameters。
(9) 如使用了超通道則初始化Super-channel Table。
(10) 配置系統(tǒng)接口單元SIU,根據(jù)需要設(shè)置與MCC 相關(guān)的中斷并安裝中斷處理函數(shù)。
(11) 配置TDM 所用到的并行接口和時鐘信號。
(12) 執(zhí)行MCC INIT 命令。
(13) 使能TDM。
3.2 中斷處理
當(dāng)一個MCC 通道產(chǎn)生中斷請求時,CP 將中斷信息寫入循環(huán)中斷表,然后修改T/RINTPTRR并設(shè)置MCCM 寄存器中相應(yīng)的TINT 或者RINTx 比特。當(dāng)MCC 中斷到達(dá)內(nèi)核后由內(nèi)核調(diào)用中斷處理函數(shù)。中斷處理函數(shù)首先清除中斷,然后根據(jù)MCCE[RINTx]和MCCE[TINT]的值來處理相應(yīng)的循環(huán)中斷表。
3.3 接收數(shù)據(jù)
數(shù)據(jù)接收程序通過一個先進(jìn)先出的消息隊列和中斷處理程序相配合來完成數(shù)據(jù)的接收。當(dāng)MCC 的某個通道接收到數(shù)據(jù)后會設(shè)置相應(yīng)的中斷事件比特位。之后中斷處理函數(shù)將收到的數(shù)據(jù)進(jìn)行封裝后發(fā)送到消息隊列。數(shù)據(jù)接收任務(wù)從消息隊列接收數(shù)據(jù),然后根據(jù)MCC 通道號調(diào)用相應(yīng)的由用戶安裝的數(shù)據(jù)接收回調(diào)函數(shù)。最后由回調(diào)函數(shù)完成數(shù)據(jù)的處理。
3.4 發(fā)送數(shù)據(jù)
數(shù)據(jù)的發(fā)送過程由通信協(xié)處理器完成。數(shù)據(jù)發(fā)送函數(shù)將所發(fā)送的數(shù)據(jù)復(fù)制到所使用通道的緩沖區(qū),然后設(shè)置相應(yīng)的控制寄存器,由通信協(xié)處理器完成數(shù)據(jù)從緩沖區(qū)到線路接口的發(fā)送。數(shù)據(jù)發(fā)送完成后通信協(xié)處理器設(shè)置中斷寄存器MCCE 相應(yīng)的RINT 比特位。并由中斷處理程序通知數(shù)據(jù)發(fā)送函數(shù)數(shù)據(jù)發(fā)送已完成。
4 結(jié)束語
該驅(qū)動程序在基于MPC8280 處理器的VxWorks5.5 操作系統(tǒng)上進(jìn)行了測試。MCC 通道工作在Transparent 模式下,對多種數(shù)據(jù)模式進(jìn)行長時間的數(shù)據(jù)收發(fā)表明該驅(qū)動能較穩(wěn)定地運行。
由于該驅(qū)動的中斷處理函數(shù)檢查所有循環(huán)中斷表的條目并將收到的數(shù)據(jù)從 MCC 通道的數(shù)據(jù)緩存發(fā)送到消息隊列,由此引入了較大的處理延遲,在數(shù)據(jù)量較大時甚至有可能會造成數(shù)據(jù)丟失。改進(jìn)的關(guān)鍵在于中斷處理函數(shù)和數(shù)據(jù)接收函數(shù)的配合。作為一種改進(jìn)方法可考慮在中斷處理函數(shù)內(nèi)僅執(zhí)行那些必須的操作,如清除中斷,重新設(shè)置相關(guān)寄存器參數(shù)等。將數(shù)據(jù)處理放在另外一個單獨的任務(wù)中去執(zhí)行,并盡量減少數(shù)據(jù)搬移次數(shù),優(yōu)化所執(zhí)行的操作等。最終在程序運行的速度和所完成的功能之間作合適的折中,從而獲得所需的性能。
評論
查看更多