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