- UID
- 133947
- 性别
- 男
|
程序示例,中断向量表 (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. 中断状态寄存器标志位复位,计时器开始重新开始计时. |
51 c8051f(f020,f040) msp430 arm(2410,2510) fpga(xc3s4000) dsp(5116 dm642) keilc vc++ matlab linux protel Ten_layerPCB mpegx h.26x Rscode Turbocode ofdm VideoBroadcasting ldpc_code(now!) |
|