网站导航: 首页 > 设计参考 > 正文 文章搜索
S3C2410 中断程序的实现
 
文章编号:
081209215909
文章分类: 单片机 ARM
点 击:
...
关 键 词: S3C2410,,中断
文章来源:
网络,作者:ZWJXMLR
摘 要:

    S3C2410(IRQ)中断处理过程:
 
    在此要注意的是区别中断向量表和异常向量表。中断发生后总是从IRQ 或者FIQ 异常入口处进入,然后跳转到相应的异常处理程序处执行,这个异常处理程序一般都是进行查找中断向量表的操作,然后调用中断处理程序。
    以下是在应用中中断处理实现的过程:从中不难体会到中断的处理过程。
定义中断向量表的物理地址:
代码
  1. .equ pISR_DABORT , (_ISR_STARTADDRESS+0x10)   
  2. .equ pISR_RESERVED, (_ISR_STARTADDRESS+0x14)   
  3. .equ pISR_IRQ , (_ISR_STARTADDRESS+0x18)   
  4. .equ pISR_FIQ , (_ISR_STARTADDRESS+0x1c) //异常向量表   
  5. ……………………………………………………………………   
  6. .equ pISR_EINT0 , (_ISR_STARTADDRESS+0x20) //中断向量表   
  7. .equ pISR_EINT1 , (_ISR_STARTADDRESS+0x24)   
  8. .equ pISR_EINT2 , (_ISR_STARTADDRESS+0x28)   
  9. .equ pISR_EINT3 , (_ISR_STARTADDRESS+0x2c)  
将中断处理程序入口地址放入中断向量表:
代码
  1. pISR_EINT0 = (unsigned int)isrEINT0; // isrEINT0 中断处理程序   
  2. pISR_EINT1 = (unsigned int)isrEINT1;  
定义中断处理程序:
代码
  1. .extern Interrupt_Rbutton   
  2. .global isrEINT0   
  3. isrEINT0:   
  4. IRQHandle Interrupt_Rbutton  
定义异常向量表:
代码
  1. b HandlerUndef /* handler for Undefined mode */  
  2. b HandlerSWI /* handler for SWI interrupt */  
  3. b HandlerPabort /* handler for PAbort */  
  4. b HandlerDabort /* handler for DAbort */  
  5. .long FileIDTable /* id */  
  6. b HandlerIRQ /* handler for IRQ interrupt */  
  7. b HandlerFIQ  
定义异常处理函数:
代码
  1. HandlerFIQ: HANDLER HandleFIQ   
  2. HandlerIRQ: HANDLER HandleIRQ   
  3. HandlerUndef: HANDLER HandleUndef   
  4. HandlerSWI: HANDLER HandleSWI   
  5. HandlerDabort: HANDLER HandleDabort   
  6. HandlerPabort: HANDLER HandlePabort  
异常处理宏HANDLER的定义:
代码
  1. .macro HANDLER HandleLabel   
  2. sub sp,sp,#4 /* decrement sp(to store jump address) */  
  3. stmfd sp!,{r0} /* PUSH the work register to stack(lr does't push bec  
  4. ause it return to original address) */  
  5. ldr r0,=HandleLabel /* load the address of HandleXXX to r0 */  
  6. ldr r0,[r0] /* load the contents(service routine start address) of  
  7. HandleXXX */  
  8. str r0,[sp,#4] /* store the contents(ISR) of HandleXXX to stack */  
  9. ldmfd sp!,{r0,pc} /* POP the work register and pc(jump to ISR) */  
  10. .endm  
定义IRQ 中断处理宏IRQHandle:
代码
  1. .macro IRQHandle isrHandle:   
  2. stmdb sp!, {r0-r11, ip, lr} /* save r0-r11, ip, lr */  
  3. ldr r0, =isrHandle   
  4. mov lr, pc   
  5. bx r0 /* jump to user_handle(void) */  
  6. ldmia sp!, {r0-r11, ip, lr} /* restore r0, ip, lr */  
  7. subs pc, r14, #4 /* return from interrupt */  
  8. .endm  
申明IRQ 异常的服务程序为:IsrIRQ,即,发生IRQ 异常时,执行“b HandlerIRQ”即是
运行IsrIRQ代码:
代码
  1. ldr r0,=HandleIRQ @ This routine is needed   
  2. ldr r1,=IsrIRQ @ if there isn't 'subs pc,lr,#4' at 0x18, 0x1c   
  3. str r1,[r0]  
IRQ 异常处理程序:
代码
  1. IsrIRQ:   
  2. sub sp,sp,#4 @ reserved for PC   
  3. stmfd sp!,{r8-r9}   
  4. ldr r9,=INTOFFSET   
  5. ldr r9,[r9]   
  6. ldr r8,=HandleEINT0   
  7. add r8,r8,r9,lsl #2   
  8. ldr r8,[r8]   
  9. str r8,[sp,#8]   
  10. ldmfd sp!,{r8-r9,pc}  
    由上可以知道,当一个IRQ 中断发生时,CPU将从0X18(IRQ 异常入口地址)取指执行,在这一步PC 的跳转是有硬件实现的。在入口0x18 地址处放的是一条跳转指令,这条指令将跳到IRQ 异常处理程序运行,IRQ 异常处理程序主要是根据中断源查找中断向量表。获得中断入口地址后,接着CPU 跳转中断处理程序运行。
    在嵌入式系统中异常向量表和中断向量表都是存于FLASH起始的一段空间中。而异常处理和中断处理程序都是运行在RAM中的。
 
相关文章:
S3C2440A驱动RGB接口TFT LCD的研究[图]
关于arm汇编中的align
s3c2410 Timer工作原理[图]
ARM920T的MMU与Cache
32 位ARM 嵌入式系统扩展USB 接口设计[图]
虚拟SPI时序在TC77与S3C2410通信中的应用[图]
s3c2410 MMU(存储器管理单元)讲解[图]
s3c2410 CACHES,WRITE BUFFER讲解[图]
S3C2410中的脉宽调制定时器(PWM)
s3c2410 watchdog详解
s3c2410 中断异常处理[图]
基于ARM9芯片S3C2410a的GPRS数据终端设计
基于ARM920T的IDE硬盘接口设计
ARM9远程图像无线监控系统[图]
S3C2440 Windows CE的RTC模块驱动设计与实现[图]
嵌入式系统中Nand-Flash的原理及应用[图]
ARM系统中DMA方式在数据采集中的应用[图]
AD7888与S3C2410的SPI接口及Linux下嵌入式驱动的实现[图]
基于s3c2410的ARMer9开发平台的使用
S3C44B0X的最小系统构架[图]
ARM S3C2410硬件手册重点
基于ARM S3C2410与TMS320C6416的接口设计[图]
S3C2410上Jffs2的移植
ARM S3C2410驱动TFT-LCD的研究[图]
Blob 在S3C44B0 上的移植
Arm结构体gcc内存边界对齐问题
ARM汇编伪指令介绍
ARM中C和汇编混合编程及示例
MINIGUI在S3C2410开发板的移植
使用ARM标准C函数库进行嵌入式应用程序开发
基于S3C44B0的大型LED显示系统设计[图]
ARM MPlayer移植过程
mplayer在S3C2410上的移植
在S3C2410上移植yaffs2文件系统
S3C2410 bootloader(vivi)阅读笔记
ARM 嵌入式系统C 语言编程
U-boot的修改简介
U-Boot 在44B0X 开发板上的移植以及代码分析
s3c2410 LCD图片显示
关于ARM芯片浮点运算的资料
s3c2440(2410) USB HOST不稳定的原因及解决方法
ARM 汇编的必知必会
使用ads1.2调试2440开发板的过程
S3C2410 LCD 驱动程序移植及GUI程序编写[图]
ARM开发笔记
S3C2410X开发总结及心得
U-Boot在S3C2410开发板上的移植
S3C44B0X上的一款Boot Loader解析
flashpgm 使用注意事项
自制wiggler-附原理图
ARM JTAG仿真器电路讨论[图]
ARM 中断程序的原理和实现
ARM 万年历程序
用ADS1.2进行嵌入式软件开发
ARM7常用启动流程
AT91系列ARM 硬件设计笔记
ARM的三种中断调试方法的探讨
用ADS(AXD)在线调试恒坚4510开发板
用AXD 和Multi-ICE调试uClinux内核
用AXD 在线调试uClinux-2.4.x操作系统
ads(axd)使用心得
关于ARM处理器Remap的理解
ARM汇编器与GCC汇编器支持的汇编语言差别
ARM SDT汇编格式与GNU汇编格式的移植
ARM开发调试教程
基于ARM的嵌入式系统Bootloader启动流程分析
S3C44B0 调试笔记—uClinux
S3C44B0 调试笔记-BIOS
基于ARM-uCLinux嵌入式系统启动引导的实现
S3C2410初始化
S3C2410通过IIS总线与音频芯片UDA1380进行通信
在S3C2410上移植bluetooth(蓝牙)
MiniGUI在AT91RM9200开发板上的移植
S3c2410软件调试总结
uboot移植到S3C44B0X开发板的经历
Flash ROM编程示例
S3C2410上触摸屏的应用实例
S3c2410的触摸屏及模数转换
S3C2410的快速启动技术
关于三星S3C44B0X目标板的uClinux Bootloader
ARM中LDR伪指令与LDR加载指令
基于嵌入式linux和s3c2410平台的视频采集
FLASH地址线接线原理及设置小结
S3C44b0的中断控制
关于S3C44b0向量中断的疑问
S3C44b0 RTC调试经验
ARM内核的中断技术
一步一步制作arm-linux 交叉编译环境
ARM的开发步骤
S3C44B0下ucos-ii的移植
S3C44B0存储器的BANK设计和控制
S3C44B0 寄存器描述
S3c44b0 RTC程序
S3C44b0引导注释
S3C2440应用笔记
ARM开发软件及实用工具介绍
嵌入式C语言的0x8本“经书”
ARM7和Cortex-M3比较
ARM启动代码研究
S3c2410 LCD驱动学习心得
基于S3C44B0X和M12模块的GPS接收终端
ARM9的QT开发平台的建立
静态编译web server Appweb(带Matrixssl支持) For linux 、ARM9
uclinux平台下ucd-snmp的编译
OpenWrt嵌入式Linux开发环境
ucos WiFi无线网卡驱动程序的开发
LwIP在,uCOS II下的实现
uCOS II 的移植
uCGUI 移植到 S3C44B0X的实验
基于 uCGUI 数据显示系统的设计
uCOS II在ARM处理器上移植过程中的中断处理
在UCGUI中增加汉字显示
基于uCOS II的MP3文件播放系统设计
提高uCOS-II在ARM上的执行效率
Google Android 内核编译教程
将Android移植到FS2410开发板上
RT73 USB无线网卡驱动在armlinux平台上的移植实例
STM8S系列单片机开发环境快速入门教程
Linux内核同步机制-自旋锁
s3c2410移植MPlayer到linux2.6
基于VxWorks的多串口卡通信实现
VxWorks下的任务监控方法及应用
实时操作系统VxWorks的内核任务调度研究

 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4