ARM學(xué)習資料之ARM簡介及編程
ARM簡介及編程
1.ARM簡介(摘錄)
ARM(Advanced RISC Machines)是微處理器行業(yè)的一家知名企業(yè),設(shè)計了大量高性能、廉價、耗能低的RISC處理器、相關(guān)技術(shù)及軟件。技術(shù)具有性能高、成本低和能耗省的特點。適用于多種領(lǐng)域,比如嵌入控制、消費/教育類多媒體、DSP和移動式應(yīng)用等。
ARM將其技術(shù)授權(quán)給世界上許多著名的半導(dǎo)體、軟件和OEM廠商,每個廠商得到的都是一套獨一無二的ARM相關(guān)技術(shù)及服務(wù)。利用這種合伙關(guān)系,ARM很快成為許多全球性RISC標準的締造者。
目前,總共有30家半導(dǎo)體公司與ARM簽訂了硬件技術(shù)使用許可協(xié)議,其中包括Intel、IBM、LG半導(dǎo)體、NEC、SONY、菲利浦和國民半導(dǎo)體這樣的大公司。至于軟件系統(tǒng)的合伙人,則包括微軟、升陽和MRI等一系列知名公司。
ARM架構(gòu)是面向低預(yù)算市場設(shè)計的第一款RISC微處理器。
2.產(chǎn)品介紹
ARM提供一系列內(nèi)核、體系擴展、微處理器和系統(tǒng)芯片方案。由于所有產(chǎn)品均采用一個通用的軟件體系,所以相同的軟件可在所有產(chǎn)品中運行(理論上如此)。典型的產(chǎn)品如下。
①CPU內(nèi)核
--ARM7:小型、快速、低能耗、集成式RISC內(nèi)核,用于移動通信。
-- ARM7TDMI(Thumb):這是公司授權(quán)用戶最多的一項產(chǎn)品,將ARM7指令集同Thumb擴展組合在一起,以減少內(nèi)存容量和系統(tǒng)成本。同時,它還利用嵌入式ICE調(diào)試技術(shù)來簡化系統(tǒng)設(shè)計,并用一個DSP增強擴展來改進性能。該產(chǎn)品的典型用途是數(shù)字蜂窩電話和硬盤驅(qū)動器。
--ARM9TDMI:采用5階段管道化ARM9內(nèi)核,同時配備Thumb擴展、調(diào)試和Harvard總線。在生產(chǎn)工藝相同的情況下,性能可達ARM7TDMI的兩倍之多。常用于連網(wǎng)和頂置盒。
?、隗w系擴展
-- Thumb:以16位系統(tǒng)的成本,提供32位RISC性能,特別注意的是它所需的內(nèi)存容量非常小。
?、矍度胧絀CE調(diào)試
由于集成了類似于ICE的CPU內(nèi)核調(diào)試技術(shù),所以原型設(shè)計和系統(tǒng)芯片的調(diào)試得到了極大的簡化。
?、芪⑻幚砥?BR> --ARM710系列,包括ARM710、ARM710T、ARM720T和ARM740T:低價、低能耗、封裝式常規(guī)系統(tǒng)微型處理器,配有高速緩存(Cache)、內(nèi)存管理、寫緩沖和JTAG。廣泛應(yīng)用于手持式計算、數(shù)據(jù)通信和消費類多媒體。
--ARM940T、920T系列:低價、低能耗、高性能系統(tǒng)微處理器,配有Cache、內(nèi)存管理和寫緩沖。應(yīng)用于高級引擎管理、保安系統(tǒng)、頂置盒、便攜計算機和高檔打印機。
--StrongARM:性能很高、同時滿足常規(guī)應(yīng)用需要的一種微處理器技術(shù),與DEC聯(lián)合研制,后來授權(quán)給Intel。SA110處理器、SA1100 PDA系統(tǒng)芯片和SA1500多媒體處理器芯片均采用了這一技術(shù)。
--ARM7500和ARM7500FE:高度集成的單芯片RISC計算機,基于一個緩存式ARM7 32位內(nèi)核,擁有內(nèi)存和I/O控制器、3個DMA通道、片上視頻控制器和調(diào)色板以及立體聲端口;ARM7500FE則增加了一個浮點運算單元以及對EDO DRAM的支持。特別適合電視頂置盒和網(wǎng)絡(luò)計算機(NC)。
Windows CE的Pocket PC只支持ARMWindows CE可支持多種嵌入式處理器,但基于Windows CE的Pocket PC則只支持ARM一種。微軟在對SH3、MIPS、ARM等嵌入式處理器做了評估后認為,ARM是一種性價比較好的選擇。由于目前ARM在手持設(shè)備市場占有90%以上的份額,只支持ARM,可以有效地縮短應(yīng)用程序開發(fā)與測試的時間,也降低了研發(fā)費用。由于ARM開放其處理器授權(quán),因此,用戶在市場上可以在多家整機廠商中進行選擇,從而保證了這一市場的競爭性。
2. ARM芯片CL-PS7111主要特點[BLOCKQUOTE][BLOCKQUOTE]
電平2.7v/3.3v.相對應(yīng)CPU工作頻率13MHz/18MHz. 13MHz位節(jié)電模式, 性能相當于33MHz Inter 486 PC
ARM710A內(nèi)核
ARM7 CPU
8K 4向緩存(cache)
MMU 帶有64入口TLB(Transition Look-aside Buffer)
DRAM控制器
支持16位和32位DRAM
ROM/SRAM/Flash Memory 控制
可譯碼4,5或6個獨立的256M存儲空間段
每個存儲段支持8位,16位和32位操作,并支持分頁模式
可編程ROM/SRAM/Flash Memory
支持兩個低功耗CL-PS6700 PC卡(PCMCIA)控制器
2K 片內(nèi) SRAM用于程序快速執(zhí)行
片內(nèi)Boot ROM (128Byte)
兩個同步串行接口
支持SPI,或Microwire2兼容
音頻解碼器(Audio Codec)
27位通用接口GPIO(general-purpose I/O port)
3個8位和1個3位GPIO port
支持鍵盤陣列掃描(Scanning keyboard matrix)
兩個異步串口 UARTs
支持高達115.2K 波特率
內(nèi)有兩個接收發(fā)送(TX,RX) 16Bytes FIFOs緩沖
支持MODEM控制信號
DC-to-DC轉(zhuǎn)換器接口
提供兩個96KHz時鐘輸出,通過編程duty ratio(1/16---15/16)操作
LCD控制器
直接信號掃描板接口,單色LCD
面板的大小可編程從16到1024個像素,16個像素為一個單位
視頻幀大小可編程到128K byte
每個像素點的位數(shù)可編程1,2,4位
計時器和實時時鐘
兩個16位計時器(Timer counter)和一個32位實時時鐘(RTC)
[/BLOCKQUOTE][/BLOCKQUOTE]
3. 調(diào)試工具及調(diào)試方法[BLOCKQUOTE]
ARM Project Manager (APM) include ARM Debuger: 這個工具由ARM提供主要是開發(fā)程序, 編程調(diào)試ARM芯片, 有相當不錯的開發(fā)環(huán)境和遠端調(diào)試功能, 支持匯編和C. 它帶有一個ARM自己的嵌入式操作系統(tǒng)ARM Angel, 用戶可以在它的上面開發(fā)自己的嵌入式軟件, 不過這個操作系統(tǒng)不是實時多任務(wù)的.
[/BLOCKQUOTE][BLOCKQUOTE]
通過計算機串口與處理器UART相連,設(shè)置計算機的超級終端 ( Hyper Terminal ), 通過超級終端察看硬件情況(寄存器設(shè)置,數(shù)據(jù)等)和程序運行情況,當然程序重要加入向UART送出數(shù)據(jù)的指令, 用Beep報警也是經(jīng)常用的. 這種調(diào)試方法是用于底層調(diào)試硬件,找出硬件存在的問題.
VxWorks 在Shell 不能正常運行前,也是采取這種方法來調(diào)試程序,不過一般不是硬件問題,而是BSP中存在的問題,需要根據(jù)硬件,修改BSP.
[/BLOCKQUOTE]
4. ARM7 編程要點及示例
ARM編程可參考程序示例 ARM_Boot Flash ROM驅(qū)動
VxWorks image 裝入ARM的過程:
[BLOCKQUOTE]
ARM7 有兩種運行模式, Boot 模式和 Normal 模式, Boot模式主要是把程序裝入(down load 或load )Flash ROM中用的, Normal模式是一般運行程序用的.
ARM7 Boot 模式時, Flash 的地址是0x70000000片選型號是CS0 (Normal模式下,Flash地址為0x00000000)
ARM7內(nèi)部有128byte的BootROM和2K的SRAM,當需要Download VxWorks image時,ARM啟動采用Boot方式啟動運行存在128byte BootROM中的程序初始化ARM內(nèi)部的COM口,從COM口接受數(shù)據(jù)到2K的SRAM,這2K程序是用來真正Load VxWorks的,2K程序Load完畢后系統(tǒng)自動跳轉(zhuǎn)到這2K程序執(zhí)行,它的作用是再次初始化內(nèi)部的COM口,通過COM口接受VxWorks到DRAM,然后由DRAM寫入FLASH。在主板2K SRAM運行的Boot Load程序執(zhí)行過程,可參看程序示例中ARM Boot Load程序
寫入完畢后,切換到Normal模式重新啟動系統(tǒng),系統(tǒng)自動跳到FLASH 0X00000000開始運行VXWORKS。
用PC機上的COM1與ARM內(nèi)部的UART1(COM)通信來Download VxWorks。
[/BLOCKQUOTE]
主要管腳定義
[BLOCKQUOTE]
32條數(shù)據(jù)線: D0-------D31
28條地址線: A0-------A27 little endian 定義, 相對應(yīng)數(shù)據(jù)排列 0 1 2 3 4 5 6--------27
6條片選信號腳: CS0-------CS5, 其實作用相當于地址線 A28------A31
4個8位的PORT口: PORT A, PORT B , PORT D主要用于外圍芯片信號的控制. PORT E有雙作用.
例如 PORT A 控制鍵盤的行信號, PORT B 用于RS232, PORT D 用于控制MODEM, FPGA..
外部中斷信號EINT, EXTFIQ.
編程時要根據(jù)主板原理圖和硬件手冊進行. [BLOCKQUOTE]
看硬件圖紙, 該芯片和CPU的那些管腳連結(jié). 特別是 PORT 口和片選線.
查CPU手冊, 得到PORT 口和該片選的硬件地址.
編程: 用PORT口直接對芯片操作,如開,關(guān),RESET等, 用片選地址和芯片內(nèi)地址結(jié)合對該外圍芯片操作.
[/BLOCKQUOTE][/BLOCKQUOTE]
Exception vectors, 中斷向量表及中斷分配
Vector 地址 [BLOCKQUOTE]
Exception[/BLOCKQUOTE] Exception Mode Priority(1=High)
0x0 [BLOCKQUOTE]
Reset[/BLOCKQUOTE] Svc 1
0x4 [BLOCKQUOTE]
Undefined Instruction[/BLOCKQUOTE] Undef 6
0x8 [BLOCKQUOTE]
Software Interrupt[/BLOCKQUOTE] Svc 6
0xC [BLOCKQUOTE]
Prefetch Abort[/BLOCKQUOTE] Abort 5
0x10 [BLOCKQUOTE]
Data Abort[/BLOCKQUOTE] Abort 2
0x14 [BLOCKQUOTE]
Reserved[/BLOCKQUOTE] Not applicable Not applicable
0x18 [BLOCKQUOTE]
Interrupt (IRQ)[/BLOCKQUOTE] irq 4
0x1C [BLOCKQUOTE]
Fast Interrupt (FIQ)[/BLOCKQUOTE] Fiq 3
[BLOCKQUOTE]
[/BLOCKQUOTE][BLOCKQUOTE]
這個向量表必須要放置在系統(tǒng)地址0x00000000 (一般是邏輯地址, 即經(jīng)過MMU映射后的地址)處.[/BLOCKQUOTE][BLOCKQUOTE]
一般是在這些地址上放跳轉(zhuǎn)指令 BL, 跳到相應(yīng)的地址空間執(zhí)行相應(yīng)的程序.[/BLOCKQUOTE][BLOCKQUOTE]
如系統(tǒng)執(zhí)行從0x00000000 Reset開始, Reset 跳轉(zhuǎn)到某一地址開始運行操作系統(tǒng).[/BLOCKQUOTE][BLOCKQUOTE]
[/BLOCKQUOTE][BLOCKQUOTE]
程序示例,中斷向量表 (ARM asm):
__VectorStart ; Start of ARM processor vectors
LDR pc,ResetV ; 00 - Reset
LDR pc,UndefV ; 04 - Undefined instructions
LDR pc,SWIV ; 08 - SWI instructions
LDR pc,PAbortV ; 0C - Instruction fetch aborts
LDR pc,DAbortV ; 10 - Data access aborts
LDR pc,UnusedV ; 14 - Reserved (was address exception)
LDR pc,IRQV ; 18 - IRQ interrupts
LDR pc,FIQV ; 1C - FIQ interrupts[/BLOCKQUOTE]
中斷號分配 (FIQ, IRQ)中斷類型 中斷號
Name
說明
FIQ 0 外部中斷 EXTFIQ 管腳 NEXT FIQ
… … … …
IRQ 5 外部中斷 EINT1 管腳 NEINT1
IRQ 6 外部中斷 EINT2 管腳 NEINT2
IRQ 7 外部中斷 EINT3 管腳 NEINT3
… … … …
IRQ 12 內(nèi)部中斷 UTXINT1 UART1 TX FIFO 為空
… … … …
[BLOCKQUOTE]
[/BLOCKQUOTE][BLOCKQUOTE]
中斷號也是寄存器INTMR和INTSR的位,所以在ARM中中斷的編程要點是[/BLOCKQUOTE][BLOCKQUOTE]
看硬件圖紙, 該外設(shè)和CPU的那一個管腳連結(jié).
查CPU手冊, 得到中斷號及INTMR,INTSR的地址.
編程
[/BLOCKQUOTE][BLOCKQUOTE]
注: 如果不是寫底層driver, 只是在系統(tǒng)上層編程(如VxWorks, Linux) 知道中斷號即可.[/BLOCKQUOTE][BLOCKQUOTE]
程序示例(VxWorks): [/BLOCKQUOTE][BLOCKQUOTE]
//登記中斷號 5, 和相應(yīng)的中斷例程 ComISR.[/BLOCKQUOTE][BLOCKQUOTE]
intConnect ( ( VOIDFUNCPTR * ) 5, ComISR, 0 ) ; [/BLOCKQUOTE][BLOCKQUOTE]
//使能這中斷[/BLOCKQUOTE][BLOCKQUOTE]
intEnable ( ( VOIDFUNCPTR * ) 5 );[/BLOCKQUOTE][BLOCKQUOTE]
……[/BLOCKQUOTE][BLOCKQUOTE]
ARM Interrupts: ARM processors implement fast and normal level of interrupt,signalled externally, synchronise interrupts before an exception is raised. A fast interrupt requst (FIQ) will desable subsequent normal and fast interrupt by setting the I and F bit in CPSR,and a normal interrup request(IRQ) will disable subsequent normal interrupt by setting I bit in CPSR.
計時器中斷編程過程[BLOCKQUOTE]
ARM7一般內(nèi)部有兩個16位計時器(Timer counter)和一個32位實時時鐘(RTC),計時器中斷屬于IRQ中斷,這里以計時器1為例敘述一下中斷的編程過程
設(shè)置interrup mask INTMR1寄存器 0x80000240 第8位TC1OI計時器1為使能. 在0x800000300 計時器 1 的數(shù)據(jù)寄存器TC1D寫入指定數(shù)據(jù),這樣數(shù)據(jù)開始從這個給定的數(shù)開始遞減計數(shù),計數(shù)遞減至 0 后,會產(chǎn)生一個溢出underflow IRQ中斷請求,中斷狀態(tài)寄存器INTSR1 0x80000240 第8位TC1OI置位.系統(tǒng)會跳到中斷向量表地址 0x00000018 處,執(zhí)行相應(yīng)的中斷程序,中斷程序通過判斷中斷的類型(判斷中斷狀態(tài)寄存器的位),來執(zhí)行相應(yīng)的中斷服務(wù)程序ISR. 中斷狀態(tài)寄存器標志位復(fù)位,計時器開始重新開始計時.
[/BLOCKQUOTE]
[/BLOCKQUOTE]
存儲空間管理單元(MMU)
物理地址映射
重點在于片選地址CS的選取,另外MMU映射需要參考這個物理地址[BLOCKQUOTE]
[/BLOCKQUOTE][BLOCKQUOTE]
ARM7 物理地址映射表[/BLOCKQUOTE]地址
內(nèi)容
大小
備注
0xF000.0000 Unused 256Mbytes
0xE000.0000 Unused 256Mbytes
0xD000.0000 DRAM Bank 1 256Mbytes
0xC000.0000 DRAM Bank 0 256Mbytes 外接DRAM
0x8000.2000 Unused --1Gbytes
0x8000.0000 內(nèi)部寄存器地址 8Kbytes 主要的I/O和控制
0x7000.0000 Boot ROM 128 bytes 片內(nèi),封有Boot程序
0x6000.0000 On-chip SRAM 2 Kbytes 片內(nèi),存放Load程序
0x5000.0000 PCMCIA-1(NCS[5]) 4*64 Mbytes
0x4000.0000 PCMCIA-0(NCS[4]) 4*64 Mbytes
0x3000.0000 外部擴展(NCS[3]) 256Mbytes
0x2000.0000 外部擴展(NCS[2]) 256Mbytes
0x1000.0000 ROM Bank 1(NCS[1]) 256Mbytes
0x0000.0000 ROM Bank 0(NCS[0]) 256Mbytes 外接Flash ROM
MMU 虛擬(邏輯)地址和物理地址的映射實例[BLOCKQUOTE]
Vxworks支持的ARM架構(gòu)的處理器,一般是RAM的起始位置為0x0,而實際上ARM的物理地址0x0是ROM的起始地址,RAM在高位地址.這就需要系統(tǒng)在Boot過程中,執(zhí)行MMU程序,重新映射RAM和ROM的地址.即RAM起始地址為0x0.[/BLOCKQUOTE]
MMU主要有ARM7中協(xié)處理器coprocessor 15控制,coporocessor主要控制:[BLOCKQUOTE]
片內(nèi)的MMU
指令和數(shù)據(jù)緩存(IDC)
Write Buffer(WB)
MMU有兩層頁表(two-level page table)用來進行虛擬地址向物理地址轉(zhuǎn)換,CP15定義16個寄存器,只有MRC和MCR指令才能對它們操作.
在VxWorks系統(tǒng)中,MMU表分成兩部分:boot up table和final table.在文件ramAtHigh.h中定義.該表在文件romInit.s中初始化,語句為:
BL _ramAtHigh_1(2)[/BLOCKQUOTE]
MMU映射實例
虛擬(邏輯)地址(VxWorks系統(tǒng)) 硬件物理地址RAM 首地址 0x0000.0000
Low Address 0x0000.1000
High Address 0x0060.0000
ROM 0x0100.0000
其他的地址邏輯地址和物理地址映射地址不變
0x8000.0000 內(nèi)部寄存器
..................
.................
相同的顏色映射對應(yīng)的地址
ROM 0x0000.0000 VxWorks image和文件系統(tǒng)
RAM 首地址 0xC000.0000 存放LCD,MMU表等
0xC004.0000 中斷向量表等
0xC004.1000 VxWorks運行位置
0xC064.0000 VxWorks從ROM解壓后Copy的位置
其他的地址映射地址不變
0x8000.0000 內(nèi)部寄存器
..............
..............
其中,Low Address,High Address在系統(tǒng)配置文件config.h和Makefile中設(shè)置,參見BSP文件示例
評論