周春良,樊文杰,王連成,馮 曦,周芝梅,唐曉柯
(1. 北京智芯微電子科技有限公司 國(guó)家電網(wǎng)公司重點(diǎn)實(shí)驗(yàn)室 電力芯片設(shè)計(jì)分析實(shí)驗(yàn)室,北京 100192;2. 北京智芯微電子科技有限公司 北京市電力高可靠性集成電路設(shè)計(jì)工程技術(shù)研究中心,北京 100192)
實(shí)時(shí)操作系統(tǒng)Nucleus Plus在LTE230芯片上的移植
周春良1,2,樊文杰1,2,王連成1,2,馮 曦1,2,周芝梅1,2,唐曉柯1,2
(1. 北京智芯微電子科技有限公司 國(guó)家電網(wǎng)公司重點(diǎn)實(shí)驗(yàn)室 電力芯片設(shè)計(jì)分析實(shí)驗(yàn)室,北京 100192;2. 北京智芯微電子科技有限公司 北京市電力高可靠性集成電路設(shè)計(jì)工程技術(shù)研究中心,北京 100192)
在介紹實(shí)時(shí)操作系統(tǒng)Nucleus Plus和LTE230芯片及硬件平臺(tái)的基礎(chǔ)上,詳細(xì)論述了Nucleus Plus移植過(guò)程中的系統(tǒng)啟動(dòng)、系統(tǒng)初始化、內(nèi)存管理、中斷管理、高級(jí)中斷和任務(wù)管理以及操作系統(tǒng)的測(cè)試,指出了Nucleus Plus在LTE230芯片上移植的重點(diǎn)和難點(diǎn)。目前移植的操作系統(tǒng)已成功應(yīng)用于LTE230通信模塊中,操作系統(tǒng)的實(shí)時(shí)性、任務(wù)及中斷管理完全滿足系統(tǒng)需求。
Nucleus Plus操作系統(tǒng);CEVA-X1643 DSP;移植;中斷;任務(wù)
圖1 芯片整體結(jié)構(gòu)
LTE230芯片是針對(duì)230M電力無(wú)線通信專網(wǎng)推出的終端基帶芯片,芯片采用軟件無(wú)線電技術(shù),除物理層時(shí)域部分用中頻電路實(shí)現(xiàn),物理層頻域和比特符號(hào)級(jí)處理、協(xié)議層媒體訪問(wèn)和無(wú)線資源控制、網(wǎng)絡(luò)層協(xié)議以及芯片內(nèi)外大量設(shè)備管理都是用CEAV-X1643 DSP(簡(jiǎn)稱X1643)軟件來(lái)實(shí)現(xiàn)[1],因此軟件非常復(fù)雜,涉及到很多實(shí)時(shí)性要求較高的中斷和任務(wù),傳統(tǒng)的基于中斷觸發(fā)的軟件架構(gòu)已不能滿足芯片基帶處理的需要,須將實(shí)時(shí)操作系統(tǒng)及其多任務(wù)調(diào)度機(jī)制引入進(jìn)來(lái),通過(guò)多任務(wù)管理來(lái)完成系統(tǒng)的多種功能及功能的擴(kuò)展與更新,達(dá)到簡(jiǎn)化DSP軟件設(shè)計(jì)、提高開(kāi)發(fā)效率的目的。
目前主流的商用實(shí)時(shí)操作系統(tǒng)都不支持X1643,同時(shí)使用CEVA DSP的芯片廠商所需支持操作系統(tǒng)皆是自行購(gòu)買后進(jìn)行移植,故可借鑒的經(jīng)驗(yàn)很少。經(jīng)詳細(xì)評(píng)估,考慮到實(shí)時(shí)性、內(nèi)核大小、用戶數(shù)等諸多因素,最終選定Mentor Graphics的Nucleus Plus操作系統(tǒng)(簡(jiǎn)稱Nucleus)作為移植對(duì)象。Nucleus是為實(shí)時(shí)嵌入式應(yīng)用而設(shè)計(jì)的一款基于優(yōu)先級(jí)的搶先式多任務(wù)操作系統(tǒng),支持ARM等主流處理器,最新版本接近99%的代碼是用ANSI C編寫(xiě)的,非常便于移植。在典型的目標(biāo)環(huán)境中,核心代碼不超過(guò)20 KB。Nucleus采用軟件組件的方法,易于替換和復(fù)用,常用組件包括任務(wù)控制、內(nèi)存管理、中斷管理及定時(shí)器管理等[2]。
芯片是一個(gè)以DSP為核心的SoC,整體結(jié)構(gòu)如圖1所示,片內(nèi)集成了高性能的X1643處理器、大容量的eDRAM存儲(chǔ)器、具有載波聚合功能的中頻模塊以及通用的UART、SPI、I2C、Timer、WDT、GPIO、PWM等外設(shè)。
圖2 LCM硬件平臺(tái)
基于芯片的通信模塊采用基帶芯片+射頻芯片的方案,如圖2所示?;鶐酒c射頻芯片之間的控制接口為SPI,數(shù)據(jù)接口為JESD207;與電力終端之間的控制與數(shù)據(jù)接口皆為串口。
Nucleus暫不支持X1643,在芯片上進(jìn)行移植涉及到系統(tǒng)啟動(dòng)、系統(tǒng)初始化、內(nèi)存管理、中斷管理和任務(wù)管理等工作。X1643采用單指令多數(shù)據(jù)SIMD和超長(zhǎng)指令字VLIW相結(jié)合的架構(gòu),其核心寄存器約有100多個(gè),包括累加寄存器ACF、尋址寄存器ARF、程序寄存器SRF、模式和狀態(tài)寄存器MSR、斷定寄存器PR以及存儲(chǔ)子系統(tǒng)寄存器MSSR幾大類[3],相比于ARM處理器,寄存器的分類及功能有較大的不同,移植時(shí)有些寄存器的使用須特別注意。
2.1 系統(tǒng)啟動(dòng)
芯片通過(guò)BootStrap Pin來(lái)控制啟動(dòng)方式??山?jīng)BootROM引導(dǎo),通過(guò)串口或SPI Flash把操作系統(tǒng)和應(yīng)用程序加載到TCM和eDRAM中執(zhí)行;因X1643支持從指定的地址啟動(dòng),也可通過(guò)SPI控制器的memory mode直接從SPI Flash啟動(dòng)程序;在早期的調(diào)試過(guò)程中,可使用JTAG仿真器把程序直接下載到TCM和eDRAM后開(kāi)始執(zhí)行。與ARM等處理器稍有不同的是,Program TCM不能通過(guò)X1643內(nèi)部數(shù)據(jù)總線和芯片系統(tǒng)總線訪問(wèn),只能通過(guò)JTAG或使用Program DMA進(jìn)行程序加載。
2.2 系統(tǒng)初始化
系統(tǒng)正常啟動(dòng)后,PC指針將跳到零地址,即Program TCM中,開(kāi)始系統(tǒng)的初始化。首先進(jìn)行板級(jí)初始化,主要過(guò)程如圖3所示。
圖3 板級(jí)初始化
BootROM中會(huì)對(duì)時(shí)鐘復(fù)位及存儲(chǔ)器控制等進(jìn)行基本的初始化,在板級(jí)初始化時(shí)主要進(jìn)行操作系統(tǒng)本身及X1643核的初始化操作。操作系統(tǒng)的啟動(dòng)棧放在系統(tǒng)的內(nèi)存池中,在切換到系統(tǒng)棧后,啟動(dòng)棧占用的空間將會(huì)被回收到內(nèi)存池中。X1643提供的“飽和”、“乘移位”、“?!钡炔僮魇轻槍?duì)特定的數(shù)字信號(hào)運(yùn)算的,操作系統(tǒng)不會(huì)使用,在初始化中須關(guān)掉,以防誤觸發(fā)引起程序行為異常,匯編代碼如下:
;Clear all saturation mechanisms
mov moda, a0
or #0x1F, a0
;Disable multiplier post shift mechanisms
mov #0xFFFF1FFF, a1
and a1, a0
mov a0, moda
;Disable the modulo mechanisms
mov mod0, r0
ands r0, #0xffffff00, r0
mov r0, mod0
X1643采用編譯器驅(qū)動(dòng)的架構(gòu),指令流水線的數(shù)據(jù)、資源及控制相關(guān)是通過(guò)編譯器來(lái)解決的,但編譯器對(duì)匯編代碼不做處理,故在編寫(xiě)初始化及其他匯編代碼時(shí),需手工加nop指令來(lái)隔離相關(guān)操作,這一點(diǎn)須特別注意。
板級(jí)初始化后的操作系統(tǒng)軟件組件初始化和應(yīng)用程序初始化都是用C代碼實(shí)現(xiàn)的,其過(guò)程與在ARM處理器上相似,在此不再詳述。
2.3 內(nèi)存管理
Nucleus提供分區(qū)內(nèi)存管理和動(dòng)態(tài)內(nèi)存管理兩種方式,前者具有非常好的確定性,但不夠靈活;后者非常靈活,但內(nèi)存分配與回收的時(shí)延不夠確定??紤]到芯片基帶處理的內(nèi)存需求很明確,故選用分區(qū)內(nèi)存管理的方式。具體的內(nèi)存分配如圖4所示。
圖4 內(nèi)存分配示意圖
圖4中,Code Segment0使用Program TCM, Data Segment0使用Data TCM, X1643是哈佛結(jié)構(gòu),兩個(gè)TCM使用相同的地址空間。eDRAM起始地址為0x400000,總?cè)萘? MB,前一部分分配給代碼段,后一部分分配給數(shù)據(jù)段。內(nèi)存池起始地址在BSS段之后,結(jié)束地址為eDRAM末尾。Nucleus要求BSS段是鏈接時(shí)的最后的數(shù)據(jù)段,BSS后的空間保留給內(nèi)存池,不能被占用,但鏈接器在鏈接基帶處理中調(diào)用CEVA庫(kù)函數(shù)時(shí)看不到這個(gè)區(qū)域,須加鏈接約束,確保其位于BSS之前。
2.4 中斷管理
X1643有5個(gè)中斷源,其中INT0、INT1和INT2分別來(lái)自中頻、外設(shè)(所有外設(shè)中斷經(jīng)中斷控制器合成一個(gè)中斷源)和OS Tick Timer,INT3和INT4保留給X1643內(nèi)部Program和Data DMA,僅在啟動(dòng)時(shí)使用,可采用查詢方式。在操作系統(tǒng)中只對(duì)INT0、INT1和INT2進(jìn)行處理,且這三個(gè)中斷使用統(tǒng)一的通用中斷處理程序,通過(guò)ID來(lái)區(qū)分。在操作系統(tǒng)中,可調(diào)用NU_Register_LISR把每個(gè)低級(jí)中斷服務(wù)程序LISR注冊(cè)到中斷函數(shù)指針數(shù)組中。LISR耗時(shí)極短,僅能調(diào)用極少的系統(tǒng)服務(wù),復(fù)雜的數(shù)據(jù)處理及系統(tǒng)調(diào)用可激活高級(jí)中斷服務(wù)程序HISR來(lái)完成。
當(dāng)中斷發(fā)生時(shí),處理流程如下:
(1)進(jìn)入中斷入口,關(guān)中斷(硬件) ;
(2)設(shè)置中斷ID到a0,并保存a0原先的值到棧中,進(jìn)入通用中斷處理程序;
(3)保存X1643寄存器到棧中(push);
(4)保存棧指針,切換棧指針到系統(tǒng)棧;
(5)跳轉(zhuǎn)到操作系統(tǒng)中斷服務(wù)入口,進(jìn)行中斷處理(LISR);
(6)恢復(fù)棧指針;
(7)如中斷服務(wù)程序要求上下文切換,進(jìn)行上下文切換(context switch,HISR);
(8)從棧中恢復(fù)X1643寄存器(pop);
(9)恢復(fù)中斷ID占用的a0寄存器;
(10)開(kāi)中斷,中斷返回。
編譯器把X1643內(nèi)部寄存器分為兩類:Call-Used寄存器和Call-Saved寄存器[4]。為提高中斷處理效率、降低處理延遲,在步驟(3)、(8)中僅保存和恢復(fù)Call-Used寄存器。Call-Used寄存器主要有:
ACF(40-bit register):a0~a7,a16~a23
ARF:r0~r3,g1~g3,s0~s1,modu0,modu1
SRF :lcstep0,lcstep1, lci0~lci3
MSR和PR: mod0,moda
2.5 高級(jí)中斷和任務(wù)管理
Nucleus高級(jí)中斷可認(rèn)為是一種優(yōu)先級(jí)較高的任務(wù),兩者都有各自的堆??臻g,在創(chuàng)建時(shí)進(jìn)行堆棧初始化,在調(diào)用之前要保存上下文(堆棧),在調(diào)用之后要恢復(fù)上下文(堆棧)。在移植操作系統(tǒng)時(shí),重點(diǎn)關(guān)注的是高級(jí)中斷和任務(wù)與X1643體系結(jié)構(gòu)及編譯器密切相關(guān)的堆棧結(jié)構(gòu)及初始化、堆棧保存及恢復(fù)的實(shí)現(xiàn)過(guò)程。
Nucleus堆棧有兩種:Solicited Stack和Unsolicited Stack。堆棧初始值僅在第1次調(diào)用時(shí)會(huì)用到,此時(shí)真正需要通過(guò)堆棧得到的值是高級(jí)中斷和任務(wù)運(yùn)行的地址及傳遞的參數(shù),大多數(shù)寄存器初值只要不影響運(yùn)行,可不初始化。
Solicited Stack用于高級(jí)中斷,是一種minmum stack。在進(jìn)入LISR時(shí),已保存了Call-Used寄存器,Solicited Stack只須保存Call-Saved寄存器。Solicited Stack數(shù)據(jù)結(jié)構(gòu)是在C語(yǔ)言中聲明的。需要注意的是,X1643 ACF a8~a15是40 bit的寄存器,為使push/pop處理方便,高8位按“UINT32 a8e”方式聲明。此外,針對(duì)數(shù)字信號(hào)處理中大量運(yùn)算都集中在循環(huán)執(zhí)行少量核心代碼上,為省去循環(huán)計(jì)數(shù)測(cè)試指令,X1643設(shè)置了最大4級(jí)嵌套的零消耗循環(huán)控制專門(mén)硬件(Block-Repeat Mechanism Register[3])來(lái)提高代碼執(zhí)行效率。用匯編語(yǔ)言編寫(xiě)高性能循環(huán)代碼或用C語(yǔ)言編寫(xiě),且在加高級(jí)優(yōu)化選項(xiàng)編譯時(shí)會(huì)用到循環(huán)控制硬件寄存器,為確保程序運(yùn)行正常,須初始化這4組寄存器為0。同樣在進(jìn)行上下文切換時(shí),須對(duì)這4組寄存器進(jìn)行保存和恢復(fù),這4組寄存器使用相同的名字,其保存匯編代碼如下:
bkst ;第1組
push{dw}bknest1 || push{dw} bknest0
;第2/3組與第1組操作類似,此處省略
bkst ;第4組
push{dw} bknest1 ||push{dw} bknest0
Unsolicited Stack用于任務(wù),須保存當(dāng)前所有寄存器,其初始化、保存及恢復(fù)操作與Solicited Stack類似,但因其包含了用于“飽和”、“?!钡炔僮鞯募拇嫫鳎薯殞?duì)MSR的mod0和moda進(jìn)行初始化。
操作系統(tǒng)移植后的測(cè)試分兩步:首先應(yīng)用Kernel Demo[2]進(jìn)行基本功能測(cè)試;然后應(yīng)用LTE230附著過(guò)程進(jìn)行典型場(chǎng)景測(cè)試。
Kernel Demo創(chuàng)建了7個(gè)任務(wù)、1個(gè)消息隊(duì)列、1個(gè)信號(hào)量和1個(gè)事件組。Task_0是一個(gè)定時(shí)器任務(wù),每隔1 s產(chǎn)生一個(gè)事件;Task_1是一個(gè)生產(chǎn)者任務(wù),向隊(duì)列中發(fā)送消息;Task_2是一個(gè)消費(fèi)者任務(wù),從隊(duì)列中獲取消息;Task_3和Task_4使用相同的任務(wù)入口函數(shù)來(lái)競(jìng)爭(zhēng)一個(gè)信號(hào)量;Task_5等待Task_0產(chǎn)生的事件,并對(duì)事件進(jìn)行計(jì)數(shù);Task_6檢測(cè)串口按鍵輸入,輸出Task_0到Task_5的狀態(tài)信息。
LTE230附著是終端開(kāi)機(jī)后與網(wǎng)絡(luò)建立連接的必要過(guò)程,包括小區(qū)搜索、隨機(jī)接入、MIB/SIB接收等步驟。在附著過(guò)程中,除OS Tick中斷外,還須處理中頻模塊收發(fā)相關(guān)的4個(gè)中斷、1個(gè)物理層定時(shí)中斷、發(fā)送和接收2個(gè)任務(wù)以及中斷與任務(wù)之間的信號(hào)量通信。
Kernel Demo和LTE230附著過(guò)程正常工作,表明操作系統(tǒng)的多任務(wù)調(diào)度、中斷處理及通信機(jī)制功能正常,在此基礎(chǔ)上,可進(jìn)行完整的芯片驅(qū)動(dòng)、LTE協(xié)議棧、TCP協(xié)議棧、業(yè)務(wù)通道處理等整個(gè)軟件系統(tǒng)的移植和測(cè)試。
本文詳細(xì)介紹了Nucleus在LTE230芯片上的移植過(guò)程和注意事項(xiàng),目前移植的操作系統(tǒng)已在試點(diǎn)項(xiàng)目的通信模塊中穩(wěn)定運(yùn)行了一年多,充分表明操作系統(tǒng)移植是很成功的。因操作系統(tǒng)移植是基于LTE230芯片的X1643進(jìn)行的,故在移植過(guò)程中需對(duì)X1643內(nèi)核寄存器有深刻的理解,用匯編語(yǔ)言完成板級(jí)初始化及任務(wù)調(diào)度和中斷處理時(shí)對(duì)內(nèi)核寄存器的保存和恢復(fù)等操作,這是針對(duì)一款新的處理器進(jìn)行操作系統(tǒng)移植的重點(diǎn)和難點(diǎn)。本文論述的方法對(duì)其他嵌入式實(shí)時(shí)操作系統(tǒng)在CEVA系列DSP核上進(jìn)行移植也有重要的參考意義。
[1] 周春良,張峰,程倫,等. LTE230無(wú)線通信基帶芯片的設(shè)計(jì)與應(yīng)用[J].電子技術(shù)應(yīng)用,2015,41(12):48-50
[2]Mentor Graphics,Inc.. Nucleus Kernel Guide[Z].2013.
[3] CEVA,INC.. CEVA-X1643 Architecture Specification[Z].2012.
[4]CEAV,INC.. SmartNcode SDT Users Guides V9.2[Z].2011.
Porting of real time operating system Nucleus Plus on LTE230 chip
Zhou Chunliang1,2, Fan Wenjie1,2, Wang Liancheng1,2, Feng Xi1,2, Zhou Zhimei1,2,Tang Xiaoke1,2
(1. State Grid Key Laboratory of Power Industrial Chip Design and Analysis Technology, Beijing Smart-Chip Microelectronics Technology Co., Ltd., Beijing 100192, China; 2. Beijing Engineering Research Center of High-Reliability IC with Power Industrial Grade, Beijing Smart-Chip Microelectronics Technology Co., Ltd., Beijing 100192, China)
Based on the introduction of RTOS Nucleus Plus and LTE230 chip and its hardware platform, this paper discusses the transplantation process of Nucleus Plus in system startup, system initialization, memory management, interrupt management, high level interrupt and task management and testing in detail, and presents the important and difficult points in the course of Nucleus Plus porting. Currently the porting OS has been applied to LTE230 communication module successfully, and the performances of real time, task and interrupt management of the OS can meet the full requirements of system.
operating system of Nucleus Plus ; CEVA-X1643 DSP; porting; interrupt; task
TP316.2
A
10.19358/j.issn.1674- 7720.2017.01.007
周春良,樊文杰,王連成,等. 實(shí)時(shí)操作系統(tǒng)Nucleus Plus在LTE230芯片上的移植[J].微型機(jī)與應(yīng)用,2017,36(1):22-24,31.
2016-09-30)
周春良(1977-),男,碩士,高級(jí)工程師,主要研究方向:通信芯片與系統(tǒng)實(shí)現(xiàn)。
樊文杰(1982-),男,本科,工程師,主要研究方向:無(wú)線通信算法與芯片設(shè)計(jì)。
王連成(1968-),男,碩士,工程師,主要研究方向:集成電路設(shè)計(jì)。