高承志
(中國(guó)電子科技集團(tuán)公司第二十八研究所)
隨著網(wǎng)絡(luò)與通信技術(shù)的發(fā)展,嵌入式系統(tǒng)已經(jīng)在很大程度上改變了人們的生活、工作和娛樂方式。同時(shí)這項(xiàng)系統(tǒng)也已經(jīng)在很多產(chǎn)業(yè)中得到廣泛的應(yīng)用(例如通信、家用電器等產(chǎn)業(yè)),并逐步改變著這些產(chǎn)業(yè)[1]。與嵌入式系統(tǒng)相關(guān)的設(shè)備研究是當(dāng)前的研究熱點(diǎn)。本文介紹了一種基于ARM體系架構(gòu)的通信控制器的設(shè)計(jì)。
該通信控制器的典型應(yīng)用場(chǎng)景如圖1所示。
圖1 通信控制器典型應(yīng)用場(chǎng)景
節(jié)點(diǎn)的業(yè)務(wù)數(shù)據(jù)經(jīng)過通信控制器處理后,經(jīng)過通信網(wǎng)絡(luò)傳到了數(shù)據(jù)處理中心。在此過程中,通信控制器主要完成數(shù)據(jù)編解碼、用戶認(rèn)證、線路測(cè)試等功能。
該通信控制器采用 LPC2214作為微處理器,LPC2214為基于ARM7TDMI內(nèi)核的16/32位RISC處理器,內(nèi)置PLL鎖相環(huán)可以設(shè)置CPU的工作頻率達(dá)60MHz,內(nèi)部帶256kB FLASH和16kB RAM。
該通信控制器的硬件平臺(tái)組成示意圖如圖 2所示。
圖2 通信控制器硬件平臺(tái)示意圖
ARM 是該通信控制器的控制中心,主要功能包括:通過與FPGA交互完成數(shù)據(jù)編解碼的控制;從片外FALSH中讀取狀態(tài)信息;完成對(duì)指示燈、智能卡和噪聲源的控制;讀取撥碼開關(guān)的值。用戶可以通過串口對(duì)ARM發(fā)送指令從而完成對(duì)通信控制器的參數(shù)配置、線路測(cè)試等功能。ISP(in-system programming)接口用來對(duì)ARM芯片內(nèi)的程序進(jìn)行插除等操作。
FPGA負(fù)責(zé)數(shù)據(jù)傳輸?shù)木幋a和解碼,映射在ARM外部存儲(chǔ)空間的BANK0;片外FLASH主要用來存儲(chǔ)狀態(tài)信息,重新加電后不會(huì)丟失,映射在ARM外部存儲(chǔ)空間的BANK3。
指示燈主要用于反映通信控制器的當(dāng)前工作狀態(tài)。撥碼開關(guān)主要提供某些工作參數(shù)給用戶進(jìn)行手動(dòng)設(shè)置通信控制器的。智能卡主要用來進(jìn)行用戶身份驗(yàn)證。噪聲源主要用來產(chǎn)生隨機(jī)數(shù)。
針對(duì)使用的ARM7系列微處理器LPC2214,結(jié)合ADS1.2開發(fā)環(huán)境,通信控制器的軟件采用C語言編寫。程序根據(jù)函數(shù)功能不同,分成不同的文件,采用模塊化設(shè)計(jì)。
ADS集成開發(fā)環(huán)境是ARM公司推出的ARM核微控制器開發(fā)工具,開發(fā)使用較為成熟的版本ADSl.2。
ADSl.2由六個(gè)部分組成,分別是:代碼生成工具、集成開發(fā)環(huán)境、調(diào)試器、指令模擬器、ARM 開發(fā)包和 ARM 應(yīng)用庫(kù)[2]。用戶一般直接操作的是CodeWarrior IDE集成開發(fā)環(huán)境和AXD調(diào)試器。
通信控制器的軟件總體架構(gòu)如圖3所示。
處理器的啟動(dòng)程序負(fù)責(zé)ARM 處理器的初始化,初始化完成后進(jìn)入用戶主程序。用戶主程序的功能主要包括設(shè)備參數(shù)初始化及外設(shè)控制等。當(dāng)有外部中斷或者定時(shí)器中斷產(chǎn)生時(shí),根據(jù)處理器啟動(dòng)程序的設(shè)置,會(huì)自動(dòng)調(diào)用相應(yīng)的函數(shù)進(jìn)行處理。
圖3 通信控制器軟件總體架構(gòu)
為了能夠進(jìn)行ARM處理器初始化,采用一個(gè)匯編文件作啟動(dòng)代碼是最常用的做法,它可以實(shí)現(xiàn)向量表定義、堆棧初始化、系統(tǒng)變量初始化、中斷系統(tǒng)初始化、i/o初始化、外圍初始化、地址重映射等操作。
在本系統(tǒng)軟件開發(fā)中,使用了 LPC2214專用工程模板,該工程模板使用了ADS的分散加載機(jī)制,只要編輯相應(yīng)的分散加載描述文件,即可將代碼段、數(shù)據(jù)段分別定位到指定地址上。ARM處理器復(fù)位后,如果處于正常啟動(dòng)模式,模板中的啟動(dòng)代碼部分即可被自動(dòng)運(yùn)行,執(zhí)行ARM處理器的初始化并進(jìn)入用戶主函數(shù)。
用戶主函數(shù)主要完成對(duì)外設(shè)的初始化及自檢,系統(tǒng)參數(shù)的設(shè)置等功能。主函數(shù)包含的主要內(nèi)容如下:
4.4.1 片外FLASH的使用
本系統(tǒng)中使用的片外FLASH總大小為4M字節(jié),每扇區(qū)大小為4k字節(jié),數(shù)據(jù)長(zhǎng)度也是16位。按照芯片的使用規(guī)則,必須首先對(duì)要寫入的地址所在扇區(qū)進(jìn)行擦除操作,然后寫入相應(yīng)的數(shù)據(jù)才有效。擦除扇區(qū)數(shù)據(jù)的示例程序如下:
寫入數(shù)據(jù)步驟的前兩個(gè)周期相同,第三個(gè)周期向地址0x5555寫入數(shù)據(jù)0xA0A0,第四個(gè)寫周期則可以向相應(yīng)地址寫入有效數(shù)據(jù)。從片外FLASH中讀數(shù)據(jù)時(shí)對(duì)相應(yīng)的地址進(jìn)行讀取即可。
4.4.2 指示燈控制
通信控制器前面板的每個(gè)指示燈具有兩種顏色,分別由LPC2214芯片的兩個(gè)GPIO引腳來控制。使用GPIO引腳來控制指示燈時(shí)需要先配置引腳為輸出狀態(tài),然后控制GPIO引腳輸出高電平點(diǎn)亮指示燈。對(duì)指示燈操作的示例程序如下:
4.4.3 智能卡
對(duì)智能卡的操作利用LPC2214芯片的I2C接口來實(shí)現(xiàn)。
首先需要對(duì)I2C接口進(jìn)行初始化,示例程序如下:
接著需要設(shè)置I2C中斷允許。LPC2214的向量中斷控制器具有32個(gè)中斷請(qǐng)求輸入,可以將其編程分為3類:FIQ、向量IRQ和非向量IRQ??焖僦袛嗾?qǐng)求(FIQ)具有最高優(yōu)先級(jí),向量IRQ中斷具有中等優(yōu)先級(jí),非向量IRQ中斷的優(yōu)先級(jí)最低。中斷設(shè)置示例程序如下:
然后當(dāng)I2C中斷發(fā)生時(shí),可以通過判斷I2C狀態(tài)寄存器I2STAT的情況來進(jìn)行相應(yīng)的操作,比如讀取I2C數(shù)據(jù)寄存器I2DAT中的內(nèi)容,從而讀取到智能卡中的信息。
4.4.4 噪聲源
噪聲源芯片的原理是當(dāng)CLK引腳輸入符合要求的時(shí)鐘信號(hào)時(shí),DATA引腳隨機(jī)輸出高低電平。實(shí)際使用中將LPC2214芯片的PWM5輸出引腳接到噪聲源的CLK輸入引腳上,DATA引腳接到GPIO(P0.22)上。脈寬調(diào)制器初始化的示例程序如下:
4.4.5 撥碼開關(guān)
撥碼開關(guān)分別連接到了LPC2214芯片的GPIO引腳上??梢酝ㄟ^設(shè)置GPIO引腳為輸入狀態(tài),然后讀取引腳的值來獲取撥碼開關(guān)的當(dāng)前值。示例程序如下:
4.4.6 與FPGA交互數(shù)據(jù)
由于 FPGA映射在 ARM 外部存儲(chǔ)空間的BANK0,因此對(duì)FPGA的操作只需要對(duì)BANK0中對(duì)應(yīng)的地址進(jìn)行讀寫即可。需要注意的是FPGA的數(shù)據(jù)長(zhǎng)度為16位,所以每次操作FPGA的數(shù)據(jù)長(zhǎng)度也為16位。
4.4.7 串口功能
利用LPC2214芯片的UART0接口實(shí)現(xiàn)了通過串口對(duì)ARM進(jìn)行控制。UART0接口的初始化示例程序如下:
接著需要設(shè)置UART0對(duì)應(yīng)的中斷向量。
當(dāng)UART0收到數(shù)據(jù)時(shí),會(huì)產(chǎn)生中斷,然后啟動(dòng)中斷服務(wù)程序讀取接收緩存寄存器 U0RBR中的數(shù)據(jù)。UART0發(fā)送數(shù)據(jù)可以通過向發(fā)送器保持寄存器U0THR寫入數(shù)據(jù)來實(shí)現(xiàn)。
4.4.8 定時(shí)器和外部中斷
LPC2214芯片包含兩個(gè)定時(shí)器。定時(shí)器對(duì)外設(shè)時(shí)鐘(pclk)周期進(jìn)行計(jì)數(shù),根據(jù)4個(gè)匹配寄存器的設(shè)定,可設(shè)置為匹配時(shí)產(chǎn)生中斷或執(zhí)行其他動(dòng)作??梢岳枚〞r(shí)器產(chǎn)生中斷定期對(duì)通信控制器進(jìn)行操作。
此外 LPC2214還提供了 4個(gè)外部中斷接口(ENT0~ENT4),外圍設(shè)備可以通過連接到外部中斷接口產(chǎn)生中斷來通知ARM處理發(fā)生的事件。
編寫完用戶程序后可以在CodeWarrior IDE集成開發(fā)環(huán)境中進(jìn)行編譯連接。如果編譯連接通過,可以使用 JTAG仿真器連接到通信控制器上的 LPC2214芯片,然后使用AXD調(diào)試器調(diào)試。
調(diào)試通過的程序就可以通過JTAG接口或者使用ISP功能固化到LPC2214的片內(nèi)FLASH中使用了。
隨著嵌入式系統(tǒng)的發(fā)展,嵌入式微處理器的應(yīng)用也越來越廣泛。ARM 體系架構(gòu)的嵌入式處理器以其明顯的性能優(yōu)勢(shì)、豐富的接口、較高的性價(jià)比、較低的功耗等特點(diǎn),在通信技術(shù)領(lǐng)域以及物聯(lián)網(wǎng)、個(gè)人電子消費(fèi)品等新興技術(shù)領(lǐng)域均得到了廣泛的應(yīng)用。
[1]周立功等.ARM 嵌入式系統(tǒng)基礎(chǔ)教程[M].北京:北京航空航天大學(xué)出版社, 2005:30.
[2]周立功等.ARM 嵌入式系統(tǒng)實(shí)驗(yàn)教程(一)[M].北京:北京航空航天大學(xué)出版社, 2004:31.