Board logo

标题: E398 CPU ARM7 简介及编程 (2) [打印本页]

作者: yuyang911220    时间: 2015-10-22 20:47     标题: E398 CPU ARM7 简介及编程 (2)

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映射后的地址)处.

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

如系统执行从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

 

 

中断号分配 (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中中断的编程要点是

看硬件图纸, 该外设和CPU的那一个管脚连结.

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

编程

注: 如果不是写底层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




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0