Chinaunix首页 | 论坛 | 博客
  • 博客访问: 53545
  • 博文数量: 9
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 80
  • 用 户 组: 普通用户
  • 注册时间: 2014-07-16 22:03
个人简介

Small thing follow your head, big thing follow your heart.

文章分类

全部博文(9)

文章存档

2015年(4)

2014年(5)

我的朋友

分类: 嵌入式

2015-03-30 09:39:35

疑问:
    1.为什么s3c2440的裸机中断程序里面的某些函数没有用到也要声明?不声明运行会出错.
    2.为什么eint11需要EINTMASK使能中断它,而eint0, eint2不需要,是因为,[0-3]保留吗?(EINTMASK是外部中断屏蔽寄存器)

关于问题1:(一下声明中只用到0x18,中断模式,其他都没有用到)

点击(此处)折叠或打开

  1. @中断向量,0xxx即相应的入口地址.(注意地址即可,函数名称可以改)

  2. @ 0x04: 未定义指令中止模式的向量地址
  3. HandleUndef:
  4.     b HandleUndef
  5. @ 0x08: 管理模式的向量地址,通过SWI指令进入此模式
  6. HandleSWI:
  7.     b HandleSWI
  8. @ 0x0c: 指令预取终止导致的异常的向量地址
  9. HandlePrefetchAbort:
  10.     b HandlePrefetchAbort
  11. @ 0x10: 数据访问终止导致的异常的向量地址
  12. HandleDataAbort:
  13.     b HandleDataAbort
  14. @ 0x14: 保留
  15. HandleNotUsed:
  16.     b HandleNotUsed
  17. @ 0x18: 中断模式的向量地址
  18.     b HandleIRQ
  19. @ 0x1c: 快中断模式的向量地址
  20. HandleFIQ:
  21.     b HandleFIQ

中断优先级:(需要设置模式控制,和选择控制信号)

注意区别EINTMASK(外部中断屏蔽寄存器)和INTMSK(中断屏蔽寄存器)
中断屏蔽寄存器(INTMSK)[部分截图]:(注意使能8-23是bit5,使能4-7是bit4)

清除中断:
1.EINTPEND(外部中断挂起寄存器)
   写"1"清除!(bit0-3不需要专门清除,bit4-23则要)
    例如:(清除11位,中断实验中eint11对应的是irq5[中断5])

2.源挂起(SRCPND)寄存器
SRCPND 寄存器由 32 位组成,其每一位都涉及一个中断源。如果中断源产生了中断则相应的位被设置为 1 并
且等待中断服务。因此此寄存器指示出是哪个中断源正在等待请求服务。注意 SRCPND 寄存器的每一位都是由中
断源自动置位,其不顾 INTMASK 寄存器中的屏蔽位。另外 SRCPND 寄存器不受中断控制器的优先级逻辑的影响。
在指定中断源的中断服务程序中,必须通过清除 SRCPND 寄存器的相应位来正确的获得来自相同源的中断请
求。如果从 ISR 中返回并且未清除相应位,则中断控制器的操作就好像其它中断请求已经从同一个源进入了。换句
话说,如果 SRCPND 寄存器的指定位被设置为 1,其通常被认作一个有效中断请求正在等待服务。
清除相应位的时间依赖于用户的需要。如果希望收到来自相同冤源的其它有效请求,则应该首先清除相应位,
并且接着使能中断。
可以通过写入一个数据到此寄存器来清除 SRCPND 寄存器的指定位。其只清除那些数据中被设置为 1 的相应
位置的 SRCPND 位。那些数据中被设置为 0 的相应位置的位保持不变.(也是写"1"清除!)

3.清除INTPND寄存器.
就如 SRCPND 寄存器,必须在中断服务程序中清除了 SRCPND 寄存器后清除此寄存器。可以通过写入数据
到此寄存器中来清除 INTPND 寄存器的指定位。
只会清除数据中设置为 1 的相应 INTPND 寄存器位的位置(也就是在对应位写"1"清除!)
数据中设置为 0 的相应位的位置则保持不变

阅读(2554) | 评论(0) | 转发(0) |
0

上一篇:[记录]arm2440裸板程序,第四课,mmu实验

下一篇:没有了

给主人留下些什么吧!~~