張建民張前峰
(1.深圳電器公司 技術(shù)中心,廣東深圳 518000; 2.中國電信股份有限公司 泉州分公司,福建泉州 362000)
龍芯2F便攜機(jī)主板中斷機(jī)制研究與實(shí)現(xiàn)
張建民1張前峰2
(1.深圳電器公司 技術(shù)中心,廣東深圳 518000; 2.中國電信股份有限公司 泉州分公司,福建泉州 362000)
龍芯2F處理器是面向桌面和高端嵌入式應(yīng)用的64位高性能低功耗芯片,可應(yīng)用于個人計(jì)算機(jī)、行業(yè)終端、工業(yè)控制、數(shù)據(jù)采集、網(wǎng)絡(luò)安全等領(lǐng)域。通過研究龍芯2F處理器的中斷機(jī)制,設(shè)計(jì)了龍芯2F便攜機(jī)主板外部中斷路由,在Linux2.6.36內(nèi)核中實(shí)現(xiàn)了外部中斷處理。大量測試表明:龍芯2F處理器能夠準(zhǔn)確及時地處理外部中斷請求,達(dá)到了預(yù)期的設(shè)計(jì)目標(biāo)。
龍芯2F;便攜機(jī)主板;中斷機(jī)制
龍芯系列處理器芯片是龍芯中科技術(shù)有限公司研發(fā)的具有自主知識產(chǎn)權(quán)的處理器芯片,產(chǎn)品線包括龍芯1號、龍芯2號和龍芯3號三個系列。龍芯1號系列為32位處理器,主要應(yīng)用于云終端、工業(yè)控制、數(shù)據(jù)采集、手持終端、網(wǎng)絡(luò)安全、消費(fèi)電子等領(lǐng)域。龍芯2號系列是面向桌面和高端嵌入式應(yīng)用的64位高性能低功耗處理器。龍芯3號系列是面向高性能計(jì)算機(jī)、服務(wù)器和高端桌面應(yīng)用的64位多核處理器。龍芯系列處理器芯片填補(bǔ)了國產(chǎn)處理器的空白,并在國際處理器市場占有一席之地。
龍芯2F是龍芯2號處理器的第一款產(chǎn)品,采用90納米CMOS工藝制造,主頻可達(dá)800 MHz至1 GHz,具有64 KB一級指令緩存、64 KB一級數(shù)據(jù)緩存、512 KB二級緩存(數(shù)據(jù)/指令共享),兼容MIPS III指令集,集成了DDR2內(nèi)存控制器和PCI等接口。龍芯2F在800 MHz主頻下功耗小于5W,并且支持動態(tài)降頻;龍芯2F可用于個人計(jì)算機(jī)、行業(yè)終端、工業(yè)控制、數(shù)據(jù)采集、網(wǎng)絡(luò)安全等領(lǐng)域。從2008年開始經(jīng)過多年的商業(yè)化推廣,龍芯2F的穩(wěn)定性已得到充分的驗(yàn)證。
本文通過對龍芯2F處理器的中斷機(jī)制進(jìn)行研究,提出了龍芯2F便攜機(jī)主板外部中斷路由的設(shè)計(jì)思路、外部中斷處理的實(shí)現(xiàn)方法。
龍芯2F便攜機(jī)主板采用龍芯2F處理器,搭配電源、復(fù)位、時鐘電路以及DDR2、BIOS等模塊。通過龍芯2F處理器集成的PCI接口,連接顯示芯片SM712、南橋芯片AMD CS5536以及千兆以太網(wǎng)芯片RTL8110;通過南橋芯片AMD CS5536提供IDE、USB、音頻、LPC等接口;通過LPC接口連接EC芯片WPCE775,用于便攜機(jī)矩陣鍵盤及觸摸板控制、LVDS背光亮度調(diào)節(jié)、音量控制、電池充放電、上電時序等控制。
龍芯2F便攜機(jī)主板兼顧體積、接口等要求,滿足了日益增長的低功耗、高性能的應(yīng)用需求,主板架構(gòu)如圖1所示。
計(jì)算機(jī)在執(zhí)行程序的過程中,當(dāng)出現(xiàn)異常情況或特殊請求時,計(jì)算機(jī)停止現(xiàn)行程序的運(yùn)行,轉(zhuǎn)向?qū)@些異常情況或特殊請求的處理,處理結(jié)束后再返回到現(xiàn)行程序的間斷處,繼續(xù)執(zhí)行原程序,這就是“中斷”[1]。最初,中斷是處理器與外部設(shè)備交換信息的一種控制方式,也稱為外部中斷。隨著計(jì)算機(jī)技術(shù)的發(fā)展,中斷的范圍也隨之?dāng)U大,出現(xiàn)了內(nèi)部軟件中斷的概念,它是為解決機(jī)器內(nèi)部運(yùn)行時出現(xiàn)的異常以及為編程方便而提出的。
在MIPS體系結(jié)構(gòu)中,中斷、自陷、系統(tǒng)調(diào)用以及其它打斷程序正常執(zhí)行的事件統(tǒng)稱為異常,都采用同一種機(jī)制來處理[2]。龍芯2F處理器處理某個異常時,狀態(tài)寄存器的EXL位被置為1,這意味著系統(tǒng)運(yùn)行在內(nèi)核模式。在保存了適當(dāng)?shù)默F(xiàn)場狀態(tài)之后,異常處理程序通常將狀態(tài)寄存器的KSU字段設(shè)定為內(nèi)核模式,同時將EXL位置回為0。當(dāng)恢復(fù)現(xiàn)場狀態(tài)并且重新執(zhí)行時,處理程序則會把KSU字段恢復(fù)回上次的值,同時置EXL位為1。當(dāng)計(jì)算機(jī)系統(tǒng)啟動時(龍芯2F處理器狀態(tài)寄存器的BEV位為1),異常向量地址位于既不通過Cache進(jìn)行存取,也無需地址映射的地址空間。當(dāng)計(jì)算機(jī)系統(tǒng)正常運(yùn)行時(龍芯2F處理器狀態(tài)寄存器的BEV位為0),向量地址位于需要通過Cache進(jìn)行存取的地址空間。冷重啟、熱重啟和非屏蔽中斷的異常向量地址始終為0xFFFFFFFFBFC00000[3]。龍芯2F處理器的異常向量地址表如表1所示。
圖1 龍芯2F便攜機(jī)主板架構(gòu)圖
表1 龍芯2F處理器的異常向量地址表
當(dāng)CPU內(nèi)部異?;蛘咄獠恐袛喟l(fā)生時,龍芯2F處理器設(shè)置Cause寄存器的Excode域(Excode域用來描述通用異常,共5位,可描述32個異常類型)以及相應(yīng)的IP位,然后就跳轉(zhuǎn)到通用異常地址入口。在通用異常入口處,操作系統(tǒng)設(shè)置了一個通用異常處理程序,它會根據(jù)Cause寄存器的Excode域值來索引通用異常處理表,并跳轉(zhuǎn)到異常處理表項(xiàng)對應(yīng)的處理程序[4],龍芯2F處理器通用異常處理表如表2所示。
龍芯2F處理器支持12個外部中斷、1個不可屏蔽中斷和3個內(nèi)部中斷。12個外部中斷包括4個可配置的GPIO中斷信號(GPIO[0]至GPIO[3])、4個PCI中斷信號(PCI-INTn[0]至PCI-INTn [3])和4個特殊中斷信號(INTn[0]至INTn[3]);龍芯2F處理器的3個內(nèi)部中斷包括1個PCI總線奇偶錯信號(PCI-SERR)、1個PCI總線系統(tǒng)錯信號(PCI-PERR)和1個DDR2控制器中斷信號(DDR2 Controller)。
表2 龍芯2F處理器通用異常處理表
龍芯2F處理器特殊中斷信號INTn[0]對應(yīng)Cause寄存器的IP2、INTn[1]對應(yīng)Cause寄存器的IP3、INTn[2]對應(yīng)Cause寄存器的IP4、INTn[3]對應(yīng)Cause寄存器的IP5;龍芯2F處理器的3個內(nèi)部中斷信號、4個可配置的GPIO中斷信號、4個PCI中斷信號以及Performance Counter寄存器均對應(yīng)Cause寄存器的IP6;Timer中斷(當(dāng)Count、Compare寄存器的內(nèi)容相等時產(chǎn)生Timer中斷)對應(yīng)Cause寄存器的IP7;IP0、IP1保留給軟件使用。龍芯2F處理器內(nèi)部的中斷路由如圖2所示。
圖2 龍芯2F處理器內(nèi)部的中斷路由圖
龍芯2F處理器32位的可讀寫Cause寄存器描述了最近一個異常發(fā)生的原因。該寄存器各域如圖3所示:
圖3 龍芯2F處理器Cause寄存器
Cause寄存器各域的含義如表3所示:
表3 Cause寄存器各域的含義
龍芯2F處理器中斷相關(guān)控制寄存器Intpol、Intedge、Inten、Intenset、Intenclr都是以位的形式對相應(yīng)的中斷線進(jìn)行控制,中斷控制位連接及屬性配置見表4。中斷的有效電平由Intpol寄存器設(shè)置。中斷使能的配置有三個寄存器:Intenset、Intenclr和Inten。Intenset寄存器用于設(shè)置中斷使能,該寄存器寫1的位對應(yīng)的中斷被使能。Intenclr寄存器用于清除中斷使能,該寄存器寫1的位對應(yīng)的中斷被清除。Inten寄存器用于查看當(dāng)前各中斷使能的情況。脈沖形式的中斷信號(如PCI-SERR)由Intedge寄存器來選擇,寫1表示脈沖觸發(fā),寫0表示電平觸發(fā)。中斷處理程序可以通過設(shè)置Intenclr寄存器的相應(yīng)位來清除脈沖記錄。
表4 龍芯2F處理器中斷控制寄存器
3.1 龍芯2F便攜機(jī)主板外部中斷路由設(shè)計(jì)
根據(jù)龍芯2F便攜機(jī)主板架構(gòu),龍芯2F處理器與外設(shè)之間的外部中斷路由設(shè)計(jì)為:千兆以太網(wǎng)芯片RTL8110使用PCI-INTn[0]中斷信號;顯示芯片SM712使用PCI-INTn[1]中斷信號;二者均對應(yīng)Cause寄存器的IP6。南橋芯片AMD CS5536使用INTn[0]中斷信號,對應(yīng)Cause寄存器的IP2;南橋內(nèi)部集成了兼容Intel8259A的中斷控制器,通過級聯(lián)的方式將IDE、USB、音頻、RTC等模塊的中斷信號、矩陣鍵盤、觸摸板、EC芯片WPCE775的SCI中斷信號,路由到龍芯2F處理器的INTn[0]。
3.2 外部中斷處理流程
當(dāng)有外部中斷請求時,龍芯2F處理器采集中斷信號,跳轉(zhuǎn)至通用異常向地址0xFFFFFFFF 80000180處,通用異常處理程序根據(jù)Cause寄存器Excode域值為0來索引通用異常處理表,并跳轉(zhuǎn)到異常處理表項(xiàng)對應(yīng)的處理程序handle-int。龍芯2F處理器外部中斷處理流程如圖4所示。
龍芯2F便攜機(jī)主板外部中斷處理流程采用兩級判定的方法來實(shí)現(xiàn)。第一級判定通過軟件查詢Cause寄存器的IP位來確定產(chǎn)生哪一類外部中斷;判斷依據(jù)為:IP7(MIPS內(nèi)部時鐘中斷Timer);IP6 (北橋設(shè)備中斷);IP2(南橋設(shè)備中斷);IP0、IP1(保留給軟件使用);其他IP未使用。第二級判定通過軟件查詢龍芯2F CPU和南橋芯片的中斷狀態(tài)寄存器的各位來確定產(chǎn)生外部中斷的設(shè)備及其中斷號。龍芯2F便攜機(jī)主板各設(shè)備的中斷號分配如表5所示。
3.3 外部中斷處理的實(shí)現(xiàn)
根據(jù)上述外部中斷處理流程,在Linux2.6.36內(nèi)核中實(shí)現(xiàn)了外部中斷處理,其步驟如下: Step1 初始化龍芯2F處理器和南橋芯片中斷觸發(fā)方式及相關(guān)的寄存器;
圖4 龍芯2F便攜機(jī)主板外部中斷處理流程圖
表5 龍芯2F便攜機(jī)主板各設(shè)備中斷號分配表
Step2 當(dāng)有外部中斷請求時,龍芯2F處理器采集中斷信號,通過查詢Cause寄存器的Excode域確定屬于哪一類異常,然后跳轉(zhuǎn)至相應(yīng)的異常處理程序;
Step3 若Cause寄存器的Excode域值為0;則查詢Cause寄存器的IP位來確定產(chǎn)生哪一類外部中斷;
Step4 查詢龍芯2F CPU和南橋芯片的中斷狀態(tài)寄存器的各位來確定產(chǎn)生中斷的設(shè)備及其中斷號;
Step5 調(diào)用具體設(shè)備的中斷服務(wù)程序。
現(xiàn)以矩陣鍵盤中斷的處理過程說明以上步驟:
1)用戶按下某個鍵后,鍵盤控制器產(chǎn)生中斷,通過南橋的中斷控制器傳至龍芯2F處理器的INTn [0]引腳,此引腳引發(fā)異常;
2)龍芯2F處理器自動設(shè)置Cause寄存器的Excode域值為0、IP2位為1,并跳轉(zhuǎn)至通用異常向量地址0xFFFFFFFF 80000180處;
3)位于通用異常入口處的異常處理程序,會根據(jù)Cause寄存器的Excode域值來索引通用異常處理表,并跳轉(zhuǎn)到0號異常處理程序handle-int;
4)0號異常處理程序handle-int根據(jù)Cause寄存器的IP位,跳轉(zhuǎn)到南橋中斷控制器的中斷處理函數(shù)i8259-irqdispatch();
5)中斷處理函數(shù)i8259-irqdispatch()通過讀取南橋中斷控制器的中斷狀態(tài)寄存器來確定產(chǎn)生外部中斷的設(shè)備為矩陣鍵盤,其中斷號為1,進(jìn)而調(diào)用do-IRQ()函數(shù)進(jìn)入矩陣鍵盤的中斷處理程序。
龍芯2F便攜機(jī)主板調(diào)試完成后,對矩陣鍵盤、SCI、RTC、音頻、USB、IDE、觸摸板、內(nèi)部時鐘、以太網(wǎng)芯片產(chǎn)生的外部中斷進(jìn)行了大量測試。
測試過程中,在Debian6.0操作系統(tǒng)下(內(nèi)核版本Linux2.6.36)打開“終端”軟件,通過cat/ proc/interrupts命令可查看中斷處理情況[5],當(dāng)上述設(shè)備觸發(fā)外部中斷時,該設(shè)備對應(yīng)的中斷計(jì)數(shù)會增加;若中斷處理錯誤,錯誤計(jì)數(shù)則增加。測試結(jié)果如表6所示。
表6 龍芯2F便攜機(jī)主板中斷處理測試表
以上測試結(jié)果表明:龍芯2F處理器能夠準(zhǔn)確及時地處理外部中斷請求,無錯誤和誤動作發(fā)生,達(dá)到了預(yù)期的設(shè)計(jì)目標(biāo)。
針對龍芯2F便攜機(jī)主板的外部中斷路由設(shè)計(jì)及其實(shí)現(xiàn)方法,結(jié)合該主板的架構(gòu),分析了龍芯2F處理器的中斷機(jī)制,設(shè)計(jì)了該主板的外部中斷路由;根據(jù)該主板外部中斷的處理流程,在Linux2.6.36內(nèi)核中實(shí)現(xiàn)了外部中斷處理;通過對該主板的外部中斷進(jìn)行大量測試,表明了龍芯2F處理器能夠準(zhǔn)確及時地處理外部中斷請求,達(dá)到了預(yù)期的設(shè)計(jì)目標(biāo)。
[1] 唐朔飛.計(jì)算機(jī)組成原理[M].北京:高等教育出版社,2008.
[2] Dominic Sweet man.See MIPS Run[M].北京:機(jī)械工業(yè)出版社,2007.
[3] 劉佩林,譚志明,劉嘉龑.MIPS體系結(jié)構(gòu)與編程[M].北京:科學(xué)出版社,2008.
[4] Heinrich,J.MIPS R4000 User’s Manual.Englewood Cliffs,NJ:Prentice Hall,1993.
[5] 王旭.Debian標(biāo)準(zhǔn)教程[M].北京:人民郵電出版社,2009.
The Research and Realization of the Interrupt Mechanism Based on the Loongson 2F Laptop Motherboard
ZHANG Jian-m in1ZHANG Qian-feng2
(1.Technology Center,Shenzhen Electric Appliance Company,Shenzhen Guangdong 518000,China; 2.China Telecom Corporation Limited Quanzhou Branch,Quanzhou Fujian 362000,China)
Loongson 2F processor is a 64 bit high performance and low power chips for desktop and high-end embedded applications,which can be applied to a personal computer,industry terminal,industrial control,data acquisition,network security and other fields.By studying the interrupt mechanism of loongson 2F processor,we design the loongson 2F laptop motherboard external interrupt routing,implementing the external interrupt handling in the Linux2.6.36 kernel.Tests show that the loongson 2F processor can accurately and timely process the external interrupt request for desired design goals.
loongson 2F;laptop motherboard;interrupt mechanism
TP338.1
A
1009-0312(2015)01-0013-06
2014-10-13
張建民(1975—),男,河南開封人,工程師,碩士,主要從事Linux內(nèi)核及驅(qū)動開發(fā)研究。