ARM簡介及編程

ARM 200瀏覽

ARM簡介及編程

??? ARM公司網址

??? 介紹ARM的相關文章??????? ARM's Way ?????????????? Processor Core Overview ???????? ?

?????????????????????????????????????????? ?? ? The Palm Device of the Future: ARM Processing
  

1.ARM簡介(摘錄) ???????????


  ARM(Advanced RISC Machines)是微處理器行業的一家知名企業,設計了大量高性能、廉價、耗能低的RISC處理器、相關技術及軟件。技術具有性能高、成本低和能耗省的特點。適用于多種領域,比如嵌入控制、消費/教育類多媒體、DSP和移動式應用等。
  ARM將其技術授權給世界上許多著名的半導體、軟件和OEM廠商,每個廠商得到的都是一套獨一無二的ARM相關技術及服務。利用這種合伙關系,ARM很快成為許多全球性RISC標準的締造者。
  目前,總共有30家半導體公司與ARM簽訂了硬件技術使用許可協議,其中包括Intel、IBM、LG半導體、NEC、SONY、菲利浦和國民半導體這樣的大公司。至于軟件系統的合伙人,則包括微軟、升陽和MRI等一系列知名公司。
  ARM架構是面向低預算市場設計的第一款RISC微處理器。
  2.產品介紹
  ARM提供一系列內核、體系擴展、微處理器和系統芯片方案。由于所有產品均采用一個通用的軟件體系,所以相同的軟件可在所有產品中運行(理論上如此)。典型的產品如下。
   ①CPU內核
   --ARM7:小型、快速、低能耗、集成式RISC內核,用于移動通信。
  -- ARM7TDMI(Thumb):這是公司授權用戶最多的一項產品,將ARM7指令集同Thumb擴展組合在一起,以減少內存容量和系統成本。同時,它還利用嵌入式ICE調試技術來簡化系統設計,并用一個DSP增強擴展來改進性能。該產品的典型用途是數字蜂窩電話和硬盤驅動器。
  --ARM9TDMI:采用5階段管道化ARM9內核,同時配備Thumb擴展、調試和Harvard總線。在生產工藝相同的情況下,性能可達ARM7TDMI的兩倍之多。常用于連網和頂置盒。
  ②體系擴展
  -- Thumb:以16位系統的成本,提供32位RISC性能,特別注意的是它所需的內存容量非常小。
  ③嵌入式ICE調試
  由于集成了類似于ICE的CPU內核調試技術,所以原型設計和系統芯片的調試得到了極大的簡化。
  ④微處理器
  --ARM710系列,包括ARM710、ARM710T、ARM720T和ARM740T:低價、低能耗、封裝式常規系統微型處理器,配有高速緩存(Cache)、內存管理、寫緩沖和JTAG。廣泛應用于手持式計算、數據通信和消費類多媒體。
   --ARM940T、920T系列:低價、低能耗、高性能系統微處理器,配有Cache、內存管理和寫緩沖。應用于高級引擎管理、保安系統、頂置盒、便攜計算機和高檔打印機。
  --StrongARM:性能很高、同時滿足常規應用需要的一種微處理器技術,與DEC聯合研制,后來授權給Intel。SA110處理器、SA1100 PDA系統芯片和SA1500多媒體處理器芯片均采用了這一技術。
  --ARM7500和ARM7500FE:高度集成的單芯片RISC計算機,基于一個緩存式ARM7 32位內核,擁有內存和I/O控制器、3個DMA通道、片上視頻控制器和調色板以及立體聲端口;ARM7500FE則增加了一個浮點運算單元以及對EDO DRAM的支持。特別適合電視頂置盒和網絡計算機(NC)。

Windows CE的Pocket PC只支持ARMWindows CE可支持多種嵌入式處理器,但基于Windows CE的Pocket PC則只支持ARM一種。微軟在對SH3、MIPS、ARM等嵌入式處理器做了評估后認為,ARM是一種性價比較好的選擇。由于目前ARM在手持設備市場占有90%以上的份額,只支持ARM,可以有效地縮短應用程序開發與測試的時間,也降低了研發費用。由于ARM開放其處理器授權,因此,用戶在市場上可以在多家整機廠商中進行選擇,從而保證了這一市場的競爭性。

2. ARM芯片CL-PS7111主要特點

 

電平2.7v/3.3v.相對應CPU工作頻率13MHz/18MHz. 13MHz位節電模式, 性能相當于33MHz Inter 486 PC

ARM710A內核

  • 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 片內 SRAM用于程序快速執行

片內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 波特率
  • 內有兩個接收發送(TX,RX) 16Bytes FIFOs緩沖
  • 支持MODEM控制信號

DC-to-DC轉換器接口

  • 提供兩個96KHz時鐘輸出,通過編程duty ratio(1/16---15/16)操作

LCD控制器

  • 直接信號掃描板接口,單色LCD
  • 面板的大小可編程從16到1024個像素,16個像素為一個單位
  • 視頻幀大小可編程到128K byte
  • 每個像素點的位數可編程1,2,4位

計時器和實時時鐘

  • 兩個16位計時器(Timer counter)和一個32位實時時鐘(RTC)

 

3. 調試工具及調試方法

  1. ARM Project Manager (APM) include ARM Debuger: 這個工具由ARM提供主要是開發程序, 編程調試ARM芯片, 有相當不錯的開發環境和遠端調試功能, 支持匯編和C. 它帶有一個ARM自己的嵌入式操作系統ARM Angel, 用戶可以在它的上面開發自己的嵌入式軟件, 不過這個操作系統不是實時多任務的.

  1. 通過計算機串口與處理器UART相連,設置計算機的超級終端 ( Hyper Terminal ), 通過超級終端察看硬件情況(寄存器設置,數據等)和程序運行情況,當然程序重要加入向UART送出數據的指令, 用Beep報警也是經常用的. 這種調試方法是用于底層調試硬件,找出硬件存在的問題.

  1. VxWorks 在Shell 不能正常運行前,也是采取這種方法來調試程序,不過一般不是硬件問題,而是BSP中存在的問題,需要根據硬件,修改BSP.

需要說明的是:上述方法是在沒有硬件仿真器的情況下采用的,仿真器是底層調試硬件程序最好,最簡便直觀的辦法。

 

4.? ARM7 編程要點及示例

??? ARM編程可參考程序示例 ARM_Boot??? Flash ROM驅動

  • VxWorks image 裝入ARM的過程:

???ARM7 有兩種運行模式, Boot 模式和 Normal 模式, Boot模式主要是把程序裝入(down load 或load )Flash ROM中用的, Normal模式是一般運行程序用的.

???ARM7 Boot 模式時, Flash 的地址是0x70000000片選型號是CS0? (Normal模式下,Flash地址為0x00000000)

??? ARM7內部有128byte的BootROM和2K的SRAM,當需要Download VxWorks image時,ARM啟動采用Boot方式啟動運行存在128byte BootROM中的程序初始化ARM內部的COM口,從COM口接受數據到2K的SRAM,這2K程序是用來真正Load VxWorks的,2K程序Load完畢后系統自動跳轉到這2K程序執行,它的作用是再次初始化內部的COM口,通過COM口接受VxWorks到DRAM,然后由DRAM寫入FLASH。在主板2K SRAM運行的Boot Load程序執行過程,可參看程序示例中ARM Boot Load程序


寫入完畢后,切換到Normal模式重新啟動系統,系統自動跳到FLASH 0X00000000開始運行VXWORKS。

用PC機上的COM1與ARM內部的UART1(COM)通信來Download VxWorks。


  • 主要管腳定義

??? 32條數據線: D0-------D31

??? 28條地址線: A0-------A27 ????? little endian 定義, 相對應數據排列 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.

??????? 編程時要根據主板原理圖和硬件手冊進行. ???????????

看硬件圖紙, 該芯片和CPU的那些管腳連結. 特別是 PORT 口和片選線.

查CPU手冊, 得到PORT 口和該片選的硬件地址.

編程: 用PORT口直接對芯片操作,如開,關,RESET等, 用片選地址和芯片內地址結合對該外圍芯片操作.

 

  • Exception vectors, 中斷向量表及中斷分配

??

Vector 地址

Exception

Exception Mode Priority(1=High)
0x0

Reset

Svc 1
0x4

Undefined Instruction

Undef 6
0x8

Software Interrupt

Svc 6
0xC

Prefetch Abort

Abort 5
0x10

Data Abort

Abort 2
0x14

Reserved

Not applicable Not applicable
0x18

Interrupt (IRQ)

irq 4
0x1C

Fast Interrupt (FIQ)

Fiq 3

 

這個向量表必須要放置在系統地址0x00000000 (一般是邏輯地址, 即經過MMU映射后的地址)處.

一般是在這些地址上放跳轉指令

如系統執行從0x00000000 Reset開始, Reset 跳轉到某一地址開始運行操作系統.

 

程序示例,中斷向量表 (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

 

 

BL, 跳到相應的地址空間執行相應的程序.

中斷號分配 (FIQ, IRQ)

中斷類型 中斷號

Name

說明

FIQ 0 外部中斷 EXTFIQ 管腳 NEXT FIQ
IRQ 5 外部中斷 EINT1 管腳 NEINT1
IRQ 6 外部中斷 EINT2 管腳 NEINT2
IRQ 7 外部中斷 EINT3 管腳 NEINT3
IRQ 12 內部中斷 UTXINT1 UART1 TX FIFO 為空

 

中斷號也是寄存器INTMR和INTSR的位,所以在ARM中中斷的編程要點是

  1. 看硬件圖紙, 該外設和CPU的那一個管腳連結.

  2. 查CPU手冊, 得到中斷號及INTMR,INTSR的地址.

  3. 編程

注: 如果不是寫底層driver, 只是在系統上層編程(如VxWorks, Linux) 知道中斷號即可.

程序示例(VxWorks):

//登記中斷號 5, 和相應的中斷例程 ComISR.

intConnect ( ( VOIDFUNCPTR * ) 5, ComISR, 0 ) ;

//使能這中斷

intEnable ( ( VOIDFUNCPTR * ) 5 );

……

??? 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.

 

計時器中斷編程過程

??? ARM7一般內部有兩個16位計時器(Timer counter)和一個32位實時時鐘(RTC),計時器中斷屬于IRQ中斷,這里以計時器1為例敘述一下中斷的編程過程

??? 設置interrup mask INTMR1寄存器 0x80000240 第8位TC1OI計時器1為使能. 在0x800000300 計時器 1 的數據寄存器TC1D寫入指定數據,這樣數據開始從這個給定的數開始遞減計數,計數遞減至 0 后,會產生一個溢出underflow IRQ中斷請求,中斷狀態寄存器INTSR1 0x80000240 第8位TC1OI置位.系統會跳到中斷向量表地址 0x00000018 處,執行相應的中斷程序,中斷程序通過判斷中斷的類型(判斷中斷狀態寄存器的位),來執行相應的中斷服務程序ISR. 中斷狀態寄存器標志位復位,計時器開始重新開始計時.

 

  • 存儲空間管理單元(MMU)

???? 物理地址映射


??????????? 重點在于片選地址CS的選取,另外MMU映射需要參考這個物理地址

 

ARM7 物理地址映射表

地址

內容

大小

備注

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 內部寄存器地址 8Kbytes 主要的I/O和控制
0x7000.0000 Boot ROM 128 bytes 片內,封有Boot程序
0x6000.0000 On-chip SRAM 2 Kbytes 片內,存放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 虛擬(邏輯)地址和物理地址的映射實例

??? Vxworks支持的ARM架構的處理器,一般是RAM的起始位置為0x0,而實際上ARM的物理地址0x0是ROM的起始地址,RAM在高位地址.這就需要系統在Boot過程中,執行MMU程序,重新映射RAM和ROM的地址.即RAM起始地址為0x0.

??? MMU主要有ARM7中協處理器coprocessor 15控制,coporocessor主要控制:

  • 片內的MMU

  • 指令和數據緩存(IDC)

  • Write Buffer(WB)

MMU有兩層頁表(two-level page table)用來進行虛擬地址向物理地址轉換,CP15定義16個寄存器,只有MRCMCR指令才能對它們操作.

在VxWorks系統中,MMU表分成兩部分:boot up table和final table.在文件ramAtHigh.h中定義.該表在文件romInit.s中初始化,語句為:

??? BL _ramAtHigh_1(2)

???

MMU映射實例

?????? 虛擬(邏輯)地址(VxWorks系統) ??????????????????????????????? 硬件物理地址

RAM 首地址 0x0000.0000
Low Address 0x0000.1000
High Address 0x0060.0000
ROM   0x0100.0000
 

 

 

其他的地址邏輯地址和物理地址映射地址不變
0x8000.0000 內部寄存器
..................
.................
?

相同的顏色映射對應的地址

 

 

 

 

 

 

ROM 0x0000.0000 VxWorks image和文件系統
RAM 首地址 0xC000.0000 存放LCD,MMU表等
? 0xC004.0000 中斷向量表等
0xC004.1000 VxWorks運行位置
0xC064.0000 VxWorks從ROM解壓后Copy的位置
?
其他的地址映射地址不變
0x8000.0000 內部寄存器
..............
..............
?

 

其中,Low Address,High Address在系統配置文件config.h和Makefile中設置,參見BSP文件示例

 

 

 

?

七星彩走势图2元网官网