楊小冬,王俊芳
(中國電子科技集團(tuán)公司第五十四研究所,河北石家莊050081)
MPC8280具有強(qiáng)大的接口能力和多協(xié)議支持功能,非常適用于高端網(wǎng)絡(luò)和通訊設(shè)備[1]。HDLC協(xié)議是重要的數(shù)據(jù)鏈路層協(xié)議,通過一次群(E1)中繼傳輸HDLC數(shù)據(jù)包是數(shù)據(jù)傳輸?shù)闹匾绞健?/p>
MPC8280應(yīng)用中對外提供5個(gè)E1接口,信令和業(yè)務(wù)使用HDLC協(xié)議封裝后通過E1中繼傳輸。支持 8個(gè)時(shí)分復(fù)用(Time Division Multiplexing,TDM)接口,并且MCC支持HDLC協(xié)議,通過管腳規(guī)劃可以利用2個(gè)MCC的5個(gè)TDM實(shí)現(xiàn)設(shè)計(jì)功能,既節(jié)約了開發(fā)成本又縮短了開發(fā)周期。
高性能處理器MPC8280內(nèi)含指令單元和指令執(zhí)行單元,是程序的執(zhí)行單元;完成對TDM數(shù)據(jù)流的HDLC格式封裝,以及對其他模塊的初始化和配置等。
MPC8280結(jié)構(gòu)框圖如圖1所示。MPC8280采用MPC603e內(nèi)核和通信處理器模塊(Communication Processor Module,CPM)的雙內(nèi)核結(jié)構(gòu),CPM減少了MPC603e內(nèi)核對底層通信任務(wù)的干預(yù),從而提高了MPC603e內(nèi)核的工作效率[2]。
圖1 MPC8280結(jié)構(gòu)
MPC8280內(nèi)部結(jié)構(gòu)包含3個(gè)主要功能模塊:具有內(nèi)存控制單元和緩存的64位內(nèi)核MPC603e、系統(tǒng)接口單元(System Interface Unit,SIU)和 CPM。MPC603e具有16 KB的指令緩存和16 KB的數(shù)據(jù)緩存,執(zhí)行高層代碼,完成對外設(shè)的控制管理。SIU完成系統(tǒng)復(fù)位、中斷管理、時(shí)鐘配置、總線接口和內(nèi)存控制。CPM處理底層的通信任務(wù),包括1個(gè)32位的精簡指令集處理器、2個(gè)MCC、3個(gè)快速通信控制器(Fast Communications Controller,F(xiàn)CC)、4 個(gè)串行通信控制器(Serial Communications Controller,SCC)、2個(gè)串行管理控制器(Serial Management Controller,SMC)、1個(gè)串行外設(shè)接口(Serial Peripheral Interface,SPI)和 1個(gè)集成電路互連(Inter-Integrated Circuit,I2C)總線控制器等。時(shí)隙分配器(Time Slot Assigner,TSA)完成路由選擇和時(shí)分復(fù)用,將MCC、FCC、SCC和SMC等連接到物理層的TDM管腳,將數(shù)據(jù)復(fù)用到8個(gè)TDM接口。
MPC8280具有 2個(gè) MCC,分別為 MCC1和MCC2,每個(gè)MCC支持128條獨(dú)立的時(shí)分串行通道,每個(gè)通道都可以獨(dú)立配置為不同于其他通道的工作模式。每個(gè)MCC連接到相應(yīng)的串行接口(Serial Interface,SI),分別為 SI1和 SI2,MCC1的通道(0~127)只能連接到SI1上,MCC2的通道(128~255)只能連接到SI2上[3]。通過配置SI和串行接口隨機(jī)存儲(chǔ)器(Serial Interface RAM,SIRAM)可以將TDM數(shù)據(jù)中的時(shí)隙路由到特定的MCC通道。
CPM通過一系列與MCC相關(guān)的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)對數(shù)據(jù)的處理。全局參數(shù)對MCC通道狀態(tài)進(jìn)行全局管理,設(shè)定通道的接收門限和寄存器的基地址;通道參數(shù)用于設(shè)置單個(gè)通道發(fā)送數(shù)據(jù)、接收數(shù)據(jù)的相關(guān)寄存器及方式,對MCC通道的先進(jìn)先出存儲(chǔ)器(First In First Out,F(xiàn)IFO)進(jìn)行管理;外部參數(shù)設(shè)置單個(gè)通道發(fā)送緩存描述符(Transmit Buffer Descriptor,TxBD)表、接收緩存描述符(ReceiveBuffer Descriptor,RxBD)表的基地址和指針,用于緩存描述符(Buffer Descriptor,BD)表的索引。BD由狀態(tài)控制字、數(shù)據(jù)長度和數(shù)據(jù)緩存指針3個(gè)部分組成,MCC根據(jù)BD提供的信息對緩存區(qū)進(jìn)行訪問和操作。
當(dāng)SI的某個(gè)TDM被配置為包含有MCC通道的時(shí)隙并且TDM被使能,CPM就將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接口接收下來并存入到MCC通道的接收FIFO內(nèi),然后CPM再將接收FIFO內(nèi)的數(shù)據(jù)復(fù)制到MCC通道的接收緩存區(qū)內(nèi)。
由于需要使用2個(gè)MCC的5個(gè)TDM,對相關(guān)參數(shù)和資源的分配需要合理規(guī)劃。傳統(tǒng)的收發(fā)設(shè)計(jì)采用輪詢方式,雖然設(shè)計(jì)簡單,易于控制,但缺點(diǎn)是既增加了系統(tǒng)開銷,浪費(fèi)了中央處理器(Central Processing Unit,CPU)資源,又不能及時(shí)響應(yīng)事件。該設(shè)計(jì)需要解決的問題包括MCC的初始化設(shè)計(jì)和MCC收發(fā)處理設(shè)計(jì)等問題。
MCC的初始化涉及到配置位于MPC8280內(nèi)部的雙端口隨機(jī)存儲(chǔ)器(Dual-Port RAM,DPRAM)中的全局參數(shù)(Global MCC parameters)、通道參數(shù)(Channel-specific parameters)、外部參數(shù)(Channel extra parameters)和SIRAM等參數(shù);位于外部隨機(jī)存儲(chǔ)器中的BD表參數(shù)、中斷表等參數(shù);還需要配置TDM的管腳、MCC中斷的相關(guān)寄存器等參數(shù)。為了使2個(gè)MCC的5個(gè)TDM之間不相互影響,MCC的初始化需要對各個(gè)TDM進(jìn)行相關(guān)參數(shù)和內(nèi)部外部資源的分配,比如時(shí)鐘、外部端口、數(shù)據(jù)緩存、參數(shù)緩存和中斷隊(duì)列等都需要對應(yīng)正確。
為了減少對系統(tǒng)資源的開銷并且能夠及時(shí)響應(yīng)事件,MCC的收發(fā)處理需要解決在保證最大業(yè)務(wù)量的情況下提高CPU效率的問題。收發(fā)處理需要使用中斷和任務(wù),中斷的優(yōu)先級較高可以保證對線路數(shù)據(jù)的及時(shí)響應(yīng),在中斷中只進(jìn)行占用CPU資源較少的操作;任務(wù)分為MCC收發(fā)處理任務(wù)和收發(fā)數(shù)據(jù)處理任務(wù),不同響應(yīng)時(shí)間要求的任務(wù)需要配置為不同的優(yōu)先級。
MCC驅(qū)動(dòng)程序的實(shí)現(xiàn)涉及MCC的初始化實(shí)現(xiàn)和MCC的收發(fā)處理實(shí)現(xiàn)等關(guān)鍵技術(shù)。
MCC的初始化流程如圖2所示。
圖2 MCC初始化流程
MCC初始化需要注意以下幾點(diǎn):
①SIRAM的個(gè)數(shù)設(shè)置必須是偶數(shù),并且要在最后一個(gè)SIRAM設(shè)置last entry位。
②設(shè)置TxBD表、RxBD表需要注意的是:初始化時(shí)應(yīng)將TxBD的狀態(tài)位ready置“0”,數(shù)據(jù)長度為非零,RxBD的狀態(tài)位empty置“1”,BD表的最后一個(gè)BD的狀態(tài)位 wrap置“1”[4]。此外,由于數(shù)據(jù)是網(wǎng)際(Internet Protocol,IP)數(shù)據(jù)包,所以BD的個(gè)數(shù)不能分配太少,該設(shè)計(jì)的BD個(gè)數(shù)可以保證緩存2個(gè)IP長包。為了高效地利用有限的緩存資源,該設(shè)計(jì)采用動(dòng)態(tài)分配內(nèi)存的方式獲得緩存資源。
③初始化MCC全局參數(shù),需要注意最大接收幀長度要合適,每個(gè)MCC對應(yīng)各自的中斷隊(duì)列而且中斷隊(duì)列的大小要合適。
④初始化MCC的通道參數(shù),需要注意使能需要處理的各種中斷,設(shè)置MCC通道的工作模式、循環(huán)冗余校驗(yàn)方式等。
MCC的收發(fā)處理是通過中斷處理程序、消息隊(duì)列和任務(wù)共同配合完成的,具有處理及時(shí)和減輕CPU負(fù)擔(dān)的優(yōu)點(diǎn)。中斷處理程序的設(shè)計(jì)需要簡潔,盡可能減少操作;消息隊(duì)列的長度需要設(shè)置合理;任務(wù)優(yōu)先級的設(shè)置需要整體考慮,需要及時(shí)響應(yīng)的任務(wù)設(shè)置為較高優(yōu)先級[5]。
3.2.1 MCC的接收處理
MCC的接收處理是當(dāng)MCC的某個(gè)通道接收到數(shù)據(jù)后會(huì)設(shè)置MCC事件寄存器的接收中斷比特位。中斷處理程序?qū)CC的中斷信息進(jìn)行封裝后發(fā)送到消息隊(duì)列。任務(wù)從消息隊(duì)列接收消息,當(dāng)中斷表項(xiàng)有效并且接收到完整的HDLC幀,對MCC的某個(gè)通道的所有有效的RxBD進(jìn)行處理,將數(shù)據(jù)的地址和數(shù)據(jù)長度通過消息隊(duì)列發(fā)送給HDLC控制器并設(shè)置RxBD的接收狀態(tài)。當(dāng)所有有效的中斷表項(xiàng)都處理完成后,接收處理結(jié)束。MCC接收處理流程圖如圖3所示。
圖3 MCC接收處理流程
3.2.2 MCC的發(fā)送處理
MCC的發(fā)送處理是當(dāng)HDLC控制器需要發(fā)送數(shù)據(jù)時(shí),將數(shù)據(jù)的地址和數(shù)據(jù)長度寫入TxBD并設(shè)置發(fā)送狀態(tài),數(shù)據(jù)發(fā)送完成后會(huì)設(shè)置MCC事件寄存器的發(fā)送中斷比特位。中斷處理程序?qū)CC的中斷信息進(jìn)行封裝后發(fā)送到消息隊(duì)列。任務(wù)從消息隊(duì)列接收消息,當(dāng)中斷表項(xiàng)有效并且發(fā)送完成1個(gè)Buffer的數(shù)據(jù),那么對MCC的某個(gè)通道的所有有效的TxBD進(jìn)行處理,釋放內(nèi)存并設(shè)置TxBD的發(fā)送地址。當(dāng)所有有效的中斷表項(xiàng)都處理完成后,發(fā)送處理結(jié)束。MCC發(fā)送處理流程圖如圖4所示。
圖4 MCC發(fā)送處理流程
3.2.3 中斷及任務(wù)配置
中斷處理程序的設(shè)計(jì)盡可能減少占用CPU的操作,并且不能執(zhí)行可能導(dǎo)致阻塞的操作,否則可能無法及時(shí)處理其他中斷,影響其他模塊通信甚至引起CPU重啟。設(shè)計(jì)中的中斷處理程序只進(jìn)行中斷信息讀取與發(fā)送消息處理等占用CPU很少的操作。
任務(wù)優(yōu)先級的設(shè)置需要滿足的要求如下:占用CPU資源較少的任務(wù)可以設(shè)置較高的優(yōu)先級;需要響應(yīng)時(shí)間較短的任務(wù)設(shè)置為較高的優(yōu)先級;高優(yōu)先級的任務(wù)可以用來響應(yīng)事件,對于事件的處理可以由低優(yōu)先級的任務(wù)完成;不要設(shè)置過多的優(yōu)先級,系統(tǒng)任務(wù)為0~50,驅(qū)動(dòng)程序?yàn)?1~99,用戶的應(yīng)用程序優(yōu)先級不要太高,為100~250,以10級為間隔劃分,為了系統(tǒng)的可擴(kuò)充性,以20級為間隔劃分[6]。設(shè)計(jì)中幾乎不占用CPU資源同時(shí)又具有較高實(shí)時(shí)性要求的MCC收發(fā)處理任務(wù)設(shè)置為較高的優(yōu)先級;占用CPU資源較多的數(shù)據(jù)內(nèi)容處理任務(wù)設(shè)置為較低的優(yōu)先級。
2臺(tái)設(shè)備通過1路E1接口互連,以計(jì)算機(jī)ping包為測試手段,對于32字節(jié)的短包和1 500 byte的長包分別進(jìn)行1 800 s測試,丟包率為0。當(dāng)通過5路E1接口互連,每一路都進(jìn)行ping包操作,對于32 byte的短包和1 500 byte的長包分別進(jìn)行1 800 s測試,丟包率<1‰。使用AX4000測試儀的以太網(wǎng)接口進(jìn)行性能測試。2臺(tái)設(shè)備通過1路E1接口互連,單路 E1設(shè)置雙向 2 Mb的數(shù)據(jù)流量,對于64 byte的短包和1 500 byte的長包進(jìn)行1 800 s測試,收發(fā)均正常而且丟包率為0。當(dāng)通過5路E1接口互連,每一路E1設(shè)置雙向1.95 Mb的數(shù)據(jù)流量,對于64 byte的短包和1 500 byte的長包進(jìn)行1 800 s測試,收發(fā)均正常而且丟包率為0。由于數(shù)據(jù)通過CPU的以太網(wǎng)接口傳送,所以證明在滿足5路E1同時(shí)處理數(shù)據(jù)時(shí),CPU有能力處理其他模塊的業(yè)務(wù)。
通過測試,驗(yàn)證了利用2個(gè)MCC的5個(gè)TDM實(shí)現(xiàn)5路E1中繼傳輸?shù)目尚行?采用中斷處理程序、消息隊(duì)列、任務(wù)共同配合完成的MCC收發(fā)處理,能夠及時(shí)響應(yīng)多路E1的處理請求,并且使CPU有能力處理其他業(yè)務(wù)請求;長時(shí)間的數(shù)據(jù)收發(fā)測試,驗(yàn)證了MCC驅(qū)動(dòng)程序的穩(wěn)定性和可靠性。
通過性能測試說明,利用高性能處理器MPC8280通過TDM和MCC之間的連接,并且采用中斷、消息和任務(wù)相結(jié)合的高效調(diào)度處理方式實(shí)現(xiàn)5路E1中繼傳輸是可行的,既節(jié)約了開發(fā)成本又縮短了開發(fā)周期。長時(shí)間的數(shù)據(jù)收發(fā)測試,驗(yàn)證了MCC驅(qū)動(dòng)程序的性能、穩(wěn)定性和可靠性。
[1]趙宇浩.基于MPC8280的網(wǎng)絡(luò)通信平臺(tái)的實(shí)現(xiàn)[J].電子技術(shù),2010,26(6):58-59.
[2]王永強(qiáng).基于MPC8280的嵌入式設(shè)備的通信接口驅(qū)動(dòng)實(shí)現(xiàn)[D].西安:西安電子科技大學(xué),2008:10-13.
[3]閆宇博,張 磊,彭來獻(xiàn).基于MPC8280多通道控制器驅(qū)動(dòng)的研究與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2010,76(23):177-179.
[4]王 煉,劉喜古,徐子平,等.基于MPC8270的MCC接口HDLC驅(qū)動(dòng)程序開發(fā)[J].軍事通信技術(shù),2009,30(2):48-52.
[5]何福永.基于VxWorks驅(qū)動(dòng)程序設(shè)計(jì)方法的研究與實(shí)現(xiàn)[D].長沙:國防科學(xué)技術(shù)大學(xué),2008:6-9.
[6]張 楊,于銀濤.VxWorks內(nèi)核、設(shè)備驅(qū)動(dòng)與BSP開發(fā)詳解[M].北京:人民郵電出版社,2009:101-105.