《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 實(shí)時(shí)操作系統(tǒng)Nucleus Plus在LTE230芯片上的移植
實(shí)時(shí)操作系統(tǒng)Nucleus Plus在LTE230芯片上的移植
2017年微型機(jī)與應(yīng)用第1期
周春良1,2,,樊文杰1,2,王連成1,2,,馮曦1,2,周芝梅1,2,,唐曉柯1,2
1. 北京智芯微電子科技有限公司 國家電網(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移植過程中的系統(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)需求,。
Abstract:
Key words :

  周春良1,2,樊文杰1,2,,王連成1,2,,馮曦1,2,周芝梅1,2,,唐曉柯1,2

 ?。?. 北京智芯微電子科技有限公司 國家電網(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移植過程中的系統(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)需求。

  關(guān)鍵詞Nucleus Plus操作系統(tǒng),;CEVA-X1643 DSP,;移植;中斷,;任務(wù)

  中圖分類號(hào):TP316.2文獻(xiàn)標(biāo)識(shí)碼:ADOI: 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.

0引言

010.jpg

  LTE230芯片是針對(duì)230M電力無線通信專網(wǎng)推出的終端基帶芯片,芯片采用軟件無線電技術(shù),,除物理層時(shí)域部分用中頻電路實(shí)現(xiàn),,物理層頻域和比特符號(hào)級(jí)處理、協(xié)議層媒體訪問和無線資源控制,、網(wǎng)絡(luò)層協(xié)議以及芯片內(nèi)外大量設(shè)備管理都是用CEAVX1643 DSP(簡(jiǎn)稱X1643)軟件來實(shí)現(xiàn)[1],,因此軟件非常復(fù)雜,涉及到很多實(shí)時(shí)性要求較高的中斷和任務(wù),,傳統(tǒng)的基于中斷觸發(fā)的軟件架構(gòu)已不能滿足芯片基帶處理的需要,,須將實(shí)時(shí)操作系統(tǒng)及其多任務(wù)調(diào)度機(jī)制引入進(jìn)來,通過多任務(wù)管理來完成系統(tǒng)的多種功能及功能的擴(kuò)展與更新,,達(dá)到簡(jiǎn)化DSP軟件設(shè)計(jì),、提高開發(fā)效率的目的。

  目前主流的商用實(shí)時(shí)操作系統(tǒng)都不支持X1643,,同時(shí)使用CEVA DSP的芯片廠商所需支持操作系統(tǒng)皆是自行購買后進(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編寫的,,非常便于移植。在典型的目標(biāo)環(huán)境中,,核心代碼不超過20 KB,。Nucleus采用軟件組件的方法,易于替換和復(fù)用,常用組件包括任務(wù)控制,、內(nèi)存管理,、中斷管理及定時(shí)器管理等[2]。

1芯片及其硬件平臺(tái)

  芯片是一個(gè)以DSP為核心的SoC,,整體結(jié)構(gòu)如圖1所示,,片內(nèi)集成了高性能的X1643處理器、大容量的eDRAM存儲(chǔ)器,、具有載波聚合功能的中頻模塊以及通用的UART,、SPI、I2C,、Timer,、WDT、GPIO,、PWM等外設(shè),。

 

011.jpg

  基于芯片的通信模塊采用基帶芯片+射頻芯片的方案,如圖2所示,?;鶐酒c射頻芯片之間的控制接口為SPI,數(shù)據(jù)接口為JESD207,;與電力終端之間的控制與數(shù)據(jù)接口皆為串口,。

2操作系統(tǒng)移植

  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)

  芯片通過BootStrap Pin來控制啟動(dòng)方式,??山?jīng)BootROM引導(dǎo),通過串口或SPI Flash把操作系統(tǒng)和應(yīng)用程序加載到TCM和eDRAM中執(zhí)行,;因X1643支持從指定的地址啟動(dòng),,也可通過SPI控制器的memory mode直接從SPI Flash啟動(dòng)程序,;在早期的調(diào)試過程中,可使用JTAG仿真器把程序直接下載到TCM和eDRAM后開始執(zhí)行,。與ARM等處理器稍有不同的是,,Program TCM不能通過X1643內(nèi)部數(shù)據(jù)總線和芯片系統(tǒng)總線訪問,只能通過JTAG或使用Program DMA進(jìn)行程序加載,。

  2.2系統(tǒng)初始化

  系統(tǒng)正常啟動(dòng)后,,PC指針將跳到零地址,即Program TCM中,,開始系統(tǒng)的初始化,。首先進(jìn)行板級(jí)初始化,主要過程如圖3所示,。

012.jpg

  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)是通過編譯器來解決的,但編譯器對(duì)匯編代碼不做處理,,故在編寫初始化及其他匯編代碼時(shí),,需手工加nop指令來隔離相關(guān)操作,這一點(diǎn)須特別注意,。

  板級(jí)初始化后的操作系統(tǒng)軟件組件初始化和應(yīng)用程序初始化都是用C代碼實(shí)現(xiàn)的,,其過程與在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所示。

013.jpg

  圖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庫函數(shù)時(shí)看不到這個(gè)區(qū)域,,須加鏈接約束,,確保其位于BSS之前。

  2.4中斷管理

  X1643有5個(gè)中斷源,,其中INT0,、INT1和INT2分別來自中頻、外設(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)一的通用中斷處理程序,,通過ID來區(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來完成,。

  當(dāng)中斷發(fā)生時(shí),,處理流程如下:

  (1)進(jìn)入中斷入口,,關(guān)中斷(硬件) ,;

 ?。?)設(shè)置中斷ID到a0,并保存a0原先的值到棧中,,進(jìn)入通用中斷處理程序;

 ?。?)保存X1643寄存器到棧中(push),;

  (4)保存棧指針,,切換棧指針到系統(tǒng)棧,;

  (5)跳轉(zhuǎn)到操作系統(tǒng)中斷服務(wù)入口,,進(jìn)行中斷處理(LISR),;

  (6)恢復(fù)棧指針,;

 ?。?)如中斷服務(wù)程序要求上下文切換,進(jìn)行上下文切換(context switch,,HISR),;

  (8)從棧中恢復(fù)X1643寄存器(pop),;

 ?。?)恢復(fù)中斷ID占用的a0寄存器;

 ?。?0)開中斷,,中斷返回。

  編譯器把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)過程,。

  Nucleus堆棧有兩種:Solicited Stack和Unsolicited Stack,。堆棧初始值僅在第1次調(diào)用時(shí)會(huì)用到,此時(shí)真正需要通過堆棧得到的值是高級(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語言中聲明的,。需要注意的是,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)控制專門硬件(BlockRepeat Mechanism Register[3])來提高代碼執(zhí)行效率,。用匯編語言編寫高性能循環(huán)代碼或用C語言編寫,,且在加高級(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)行初始化,。

3操作系統(tǒng)測(cè)試

  操作系統(tǒng)移植后的測(cè)試分兩步:首先應(yīng)用Kernel Demo[2]進(jìn)行基本功能測(cè)試,;然后應(yīng)用LTE230附著過程進(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ù)來競(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附著是終端開機(jī)后與網(wǎng)絡(luò)建立連接的必要過程,,包括小區(qū)搜索,、隨機(jī)接入,、MIB/SIB接收等步驟,。在附著過程中,除OS Tick中斷外,,還須處理中頻模塊收發(fā)相關(guān)的4個(gè)中斷,、1個(gè)物理層定時(shí)中斷、發(fā)送和接收2個(gè)任務(wù)以及中斷與任務(wù)之間的信號(hào)量通信,。

  Kernel Demo和LTE230附著過程正常工作,,表明操作系統(tǒng)的多任務(wù)調(diào)度、中斷處理及通信機(jī)制功能正常,,在此基礎(chǔ)上,,可進(jìn)行完整的芯片驅(qū)動(dòng)、LTE協(xié)議棧,、TCP協(xié)議棧,、業(yè)務(wù)通道處理等整個(gè)軟件系統(tǒng)的移植和測(cè)試。

4結(jié)論

  本文詳細(xì)介紹了Nucleus在LTE230芯片上的移植過程和注意事項(xiàng),,目前移植的操作系統(tǒng)已在試點(diǎn)項(xiàng)目的通信

  模塊中穩(wěn)定運(yùn)行了一年多,,充分表明操作系統(tǒng)移植是很成功的。因操作系統(tǒng)移植是基于LTE230芯片的X1643進(jìn)行的,,故在移植過程中需對(duì)X1643內(nèi)核寄存器有深刻的理解,,用匯編語言完成板級(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)行移植也有重要的參考意義,。

參考文獻(xiàn)

  [1] 周春良,,張峰,,程倫,等. LTE230無線通信基帶芯片的設(shè)計(jì)與應(yīng)用[J].電子技術(shù)應(yīng)用,,2015,,41(12):4850

 ?。?]Mentor Graphics,Inc.. Nucleus Kernel Guide[Z].2013.

 ?。?] CEVA,,INC.. CEVAX1643 Architecture Specification[Z].2012.

  [4]CEAV,,INC.. SmartNcode SDT Users Guides V9.2[Z].2011.


此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。