cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 2168|回复: 1

[转帖]ARM芯片s3c44b0x中怎么设中断?

[复制链接]
发表于 2006-2-18 08:13:30 | 显示全部楼层 |阅读模式
转贴自:http://bbs.sjtu.edu.cn/bbstcon?board=Embedded&reid=1113789323&file=M.1113807601.A
S3C44B0X的中断控制器有30个中断源。
S3C44B0X支持新的中断处理模式称为(vectored interrupt mode),在多个中段请求发
生时,
由硬件优先级逻辑确定应该有哪个中断得到服务,同时硬件逻辑使中断相量表的跳转指
令加载到
(0X18或0X1C)位置,在该位置执行跳转指令使程序跳到相应的中断服务线程,因此相
对与传
统的ARM的软件方法能够大大减少中断进入延时。
有两种类型的中断模式,FIQ (快速中断)和IRQ.所有的中断源在中断请求时应该确定
使用的
中断模式。在网络上广为流传的44b0开发板例程中,大部分使用的都是IRQ中断模式(请
查阅
寄存器rINTCON)。

一般来讲,使用44b0开发板进行调试时,无需更改44b.h,44blib.h,def.h,option.h,44
binit.s,
44blib.c,44blib_a.s,memcfg.s,option.s等程序,甚至无需看懂,即可编程使用44b0开
发板。

如前所述,硬件逻辑使中断相量表的跳转指令加载到(0X18或0X1C)位置,在该位置执
行跳转指令
使程序跳到相应的中断服务线程,用户只需定义相应的中断服务程序即可。中断向量表
的定义如下
(节选,请看44b.h)
/* ISR */
#define pISR_RESET (*(unsigned *)(_ISR_STARTADDRESS+0x0))
#define pISR_UNDEF (*(unsigned *)(_ISR_STARTADDRESS+0x4))
#define pISR_SWI (*(unsigned *)(_ISR_STARTADDRESS+0x8))
#define pISR_PABORT (*(unsigned *)(_ISR_STARTADDRESS+0xc))
#define pISR_DABORT (*(unsigned *)(_ISR_STARTADDRESS+0x10))
#define pISR_RESERVED (*(unsigned *)(_ISR_STARTADDRESS+0x14))
#define pISR_IRQ (*(unsigned *)(_ISR_STARTADDRESS+0x18))
#define pISR_FIQ (*(unsigned *)(_ISR_STARTADDRESS+0x1c))
.........................................
#define pISR_EINT4567 (*(unsigned *)(_ISR_STARTADDRESS+0x74))
#define pISR_EINT3 (*(unsigned *)(_ISR_STARTADDRESS+0x78))
#define pISR_EINT2 (*(unsigned *)(_ISR_STARTADDRESS+0x7c))
#define pISR_EINT1 (*(unsigned *)(_ISR_STARTADDRESS+0x80))
#define pISR_EINT0 (*(unsigned *)(_ISR_STARTADDRESS+0x84))

用户定义相应的中断服务程序,可以参考该语句,

pISR_EINT4567=(unsigned)Key_Int;;; //将外部中断4567产生的中断,指向函数Key_I
nit

当然,用户也可以根据自己的爱好,任意改变函数名,

pISR_EINT4567=(unsigned)MyCat; //函数名由用户定义

最好在程序开头声明一下,

void __irq Mycat(void);;;

显然,至此可以基本理解44b0的中断,是如何与程序中的中断服务子程序联系起来的了

中断的硬件逻辑,将检测到的中断,以某种方式指向中断服务程序的地址,该地址在头
文件
中以宏定义的形式出现。用户在自己的程序中,将中断服务子程序的地址付给该指针,
从而
将其联系起来。
[此贴子已经被作者于2006-2-18 0:14:09编辑过]

 楼主| 发表于 2006-2-18 08:41:33 | 显示全部楼层
转贴另一个贴子的:
用户在使用中,只需将中断服务程序的函数地址通过相应的宏来设置重构的中断向量<br>表。例如:用户编写了处理EINT0 中断的服务程序:<br>void __irq EINT0_UserIsr(void)<br>{……………}<br>那么用户只需要在初始化CPU 的中断系统时候,添加<br>pISR_EINT0=(unsigned)EINT0_UserIsr;<br>这条语句即可。
[此贴子已经被作者于2006-2-18 0:42:29编辑过]

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2025-4-6 13:35 , Processed in 0.446947 second(s), 6 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表