高承志
(中國電子科技集團公司第二十八研究所)
隨著網絡與通信技術的發展,嵌入式系統已經在很大程度上改變了人們的生活、工作和娛樂方式。同時這項系統也已經在很多產業中得到廣泛的應用(例如通信、家用電器等產業),并逐步改變著這些產業[1]。與嵌入式系統相關的設備研究是當前的研究熱點。本文介紹了一種基于ARM體系架構的通信控制器的設計。
該通信控制器的典型應用場景如圖1所示。

圖1 通信控制器典型應用場景
節點的業務數據經過通信控制器處理后,經過通信網絡傳到了數據處理中心。在此過程中,通信控制器主要完成數據編解碼、用戶認證、線路測試等功能。
該通信控制器采用 LPC2214作為微處理器,LPC2214為基于ARM7TDMI內核的16/32位RISC處理器,內置PLL鎖相環可以設置CPU的工作頻率達60MHz,內部帶256kB FLASH和16kB RAM。
該通信控制器的硬件平臺組成示意圖如圖 2所示。

圖2 通信控制器硬件平臺示意圖
ARM 是該通信控制器的控制中心,主要功能包括:通過與FPGA交互完成數據編解碼的控制;從片外FALSH中讀取狀態信息;完成對指示燈、智能卡和噪聲源的控制;讀取撥碼開關的值。用戶可以通過串口對ARM發送指令從而完成對通信控制器的參數配置、線路測試等功能。ISP(in-system programming)接口用來對ARM芯片內的程序進行插除等操作。
FPGA負責數據傳輸的編碼和解碼,映射在ARM外部存儲空間的BANK0;片外FLASH主要用來存儲狀態信息,重新加電后不會丟失,映射在ARM外部存儲空間的BANK3。
指示燈主要用于反映通信控制器的當前工作狀態。撥碼開關主要提供某些工作參數給用戶進行手動設置通信控制器的。智能卡主要用來進行用戶身份驗證。噪聲源主要用來產生隨機數。
針對使用的ARM7系列微處理器LPC2214,結合ADS1.2開發環境,通信控制器的軟件采用C語言編寫。程序根據函數功能不同,分成不同的文件,采用模塊化設計。
ADS集成開發環境是ARM公司推出的ARM核微控制器開發工具,開發使用較為成熟的版本ADSl.2。
ADSl.2由六個部分組成,分別是:代碼生成工具、集成開發環境、調試器、指令模擬器、ARM 開發包和 ARM 應用庫[2]。用戶一般直接操作的是CodeWarrior IDE集成開發環境和AXD調試器。
通信控制器的軟件總體架構如圖3所示。
處理器的啟動程序負責ARM 處理器的初始化,初始化完成后進入用戶主程序。用戶主程序的功能主要包括設備參數初始化及外設控制等。當有外部中斷或者定時器中斷產生時,根據處理器啟動程序的設置,會自動調用相應的函數進行處理。

圖3 通信控制器軟件總體架構
為了能夠進行ARM處理器初始化,采用一個匯編文件作啟動代碼是最常用的做法,它可以實現向量表定義、堆棧初始化、系統變量初始化、中斷系統初始化、i/o初始化、外圍初始化、地址重映射等操作。
在本系統軟件開發中,使用了 LPC2214專用工程模板,該工程模板使用了ADS的分散加載機制,只要編輯相應的分散加載描述文件,即可將代碼段、數據段分別定位到指定地址上。ARM處理器復位后,如果處于正常啟動模式,模板中的啟動代碼部分即可被自動運行,執行ARM處理器的初始化并進入用戶主函數。
用戶主函數主要完成對外設的初始化及自檢,系統參數的設置等功能。主函數包含的主要內容如下:
4.4.1 片外FLASH的使用
本系統中使用的片外FLASH總大小為4M字節,每扇區大小為4k字節,數據長度也是16位。按照芯片的使用規則,必須首先對要寫入的地址所在扇區進行擦除操作,然后寫入相應的數據才有效。擦除扇區數據的示例程序如下:

寫入數據步驟的前兩個周期相同,第三個周期向地址0x5555寫入數據0xA0A0,第四個寫周期則可以向相應地址寫入有效數據。從片外FLASH中讀數據時對相應的地址進行讀取即可。
4.4.2 指示燈控制
通信控制器前面板的每個指示燈具有兩種顏色,分別由LPC2214芯片的兩個GPIO引腳來控制。使用GPIO引腳來控制指示燈時需要先配置引腳為輸出狀態,然后控制GPIO引腳輸出高電平點亮指示燈。對指示燈操作的示例程序如下:

4.4.3 智能卡
對智能卡的操作利用LPC2214芯片的I2C接口來實現。
首先需要對I2C接口進行初始化,示例程序如下:

接著需要設置I2C中斷允許。LPC2214的向量中斷控制器具有32個中斷請求輸入,可以將其編程分為3類:FIQ、向量IRQ和非向量IRQ??焖僦袛嗾埱螅‵IQ)具有最高優先級,向量IRQ中斷具有中等優先級,非向量IRQ中斷的優先級最低。中斷設置示例程序如下:

然后當I2C中斷發生時,可以通過判斷I2C狀態寄存器I2STAT的情況來進行相應的操作,比如讀取I2C數據寄存器I2DAT中的內容,從而讀取到智能卡中的信息。
4.4.4 噪聲源
噪聲源芯片的原理是當CLK引腳輸入符合要求的時鐘信號時,DATA引腳隨機輸出高低電平。實際使用中將LPC2214芯片的PWM5輸出引腳接到噪聲源的CLK輸入引腳上,DATA引腳接到GPIO(P0.22)上。脈寬調制器初始化的示例程序如下:

4.4.5 撥碼開關
撥碼開關分別連接到了LPC2214芯片的GPIO引腳上??梢酝ㄟ^設置GPIO引腳為輸入狀態,然后讀取引腳的值來獲取撥碼開關的當前值。示例程序如下:

4.4.6 與FPGA交互數據
由于 FPGA映射在 ARM 外部存儲空間的BANK0,因此對FPGA的操作只需要對BANK0中對應的地址進行讀寫即可。需要注意的是FPGA的數據長度為16位,所以每次操作FPGA的數據長度也為16位。
4.4.7 串口功能
利用LPC2214芯片的UART0接口實現了通過串口對ARM進行控制。UART0接口的初始化示例程序如下:

接著需要設置UART0對應的中斷向量。
當UART0收到數據時,會產生中斷,然后啟動中斷服務程序讀取接收緩存寄存器 U0RBR中的數據。UART0發送數據可以通過向發送器保持寄存器U0THR寫入數據來實現。
4.4.8 定時器和外部中斷
LPC2214芯片包含兩個定時器。定時器對外設時鐘(pclk)周期進行計數,根據4個匹配寄存器的設定,可設置為匹配時產生中斷或執行其他動作??梢岳枚〞r器產生中斷定期對通信控制器進行操作。
此外 LPC2214還提供了 4個外部中斷接口(ENT0~ENT4),外圍設備可以通過連接到外部中斷接口產生中斷來通知ARM處理發生的事件。
編寫完用戶程序后可以在CodeWarrior IDE集成開發環境中進行編譯連接。如果編譯連接通過,可以使用 JTAG仿真器連接到通信控制器上的 LPC2214芯片,然后使用AXD調試器調試。
調試通過的程序就可以通過JTAG接口或者使用ISP功能固化到LPC2214的片內FLASH中使用了。
隨著嵌入式系統的發展,嵌入式微處理器的應用也越來越廣泛。ARM 體系架構的嵌入式處理器以其明顯的性能優勢、豐富的接口、較高的性價比、較低的功耗等特點,在通信技術領域以及物聯網、個人電子消費品等新興技術領域均得到了廣泛的應用。
[1]周立功等.ARM 嵌入式系統基礎教程[M].北京:北京航空航天大學出版社, 2005:30.
[2]周立功等.ARM 嵌入式系統實驗教程(一)[M].北京:北京航空航天大學出版社, 2004:31.