电子文章 | 电子资料下载 | 家电维修 | 维修资料下载 | 加入收藏 | 全站地图
您现在所在位置:电子爱好者电子文章电子基础知识ARM简介及编程

ARM简介及编程

08-09 23:02:05 | http://www.5idzw.com | 电子基础知识 | 人气:941
标签:电子基础,电子基础知识应用,电工电子技术基础,http://www.5idzw.com ARM简介及编程,http://www.5idzw.com
Fiq 3

这个向量表必须要放置在系统地址0x00000000 (一般是逻辑地址, 即经过MMU映射后的地址)处.

一般是在这些地址上放跳转指令 BL, 跳到相应的地址空间执行相应的程序.

如系统执行从0x00000000 Reset开始, Reset 跳转到某一地址开始运行操作系统.

程序示例,中断向量表 (ARM asm):
__VectorStart ; Start of ARM processor vec

DR 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

中断号分配 (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和INISR的位,所以在ARM中中断的编程要点是看硬件图纸,该外设和CPU的那一个管脚连结.

A.查CPU手册,得到中断号及INTMR,INTSR的地址.

B.编程

注:如果不是写底层driver,只是在系统上层编程(如VxWorks,Linux)知道中断即可.

程序示例( VxWorks):

//登记中断号,和相应的中断全程ComISR.

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

//使能这中断

intEnable ( ( VOIDFUNCPTR * ) 5 );

计时器中断编程过程

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个寄存器,只有MRC和MCR指令才能对它们操作.

在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中设置。 <--Wrap-tail begin-->

上一页  [1] [2] 

,ARM简介及编程
关于《ARM简介及编程》的更多文章