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