Interrupt in Linux(硬件篇)—— PIC
本文来自:http://blog.chinaunix.net/u2/66786/showart.php?id=601766
1.1史前的PIC
8259A是即我们通常说的PIC,如图1-1所示:
图1-1 8259A
其中最重要的管脚是IR0~IR7(Interrupt Request0~7,用于连接设备)、INT(连接CPU,当有中断请求时,拉高该管脚以通知CPU中断的到来)、INTA(连接CPU,CPU通过该管脚应答中断请求,并通知PIC提交中断的vector到数据线)。此外,由于一片8259A只能连接8个设备,对于现代PC架构来说显得过少,通常会通过CS(片选)将两个8259A连在一起构成一个可以连接15个设备(有一个管脚用于串联另一片8259A)的PIC。
既然是可编程的芯片,8259A当然少不了寄存器。除了ICW(Initialization Command Word,初始化命令寄存器,用于初始化8259A)和OCW(Operation Command Word,操作命令字,用于控制8259A)外,最重要的有3个寄存器:
u IRR:Interrupt Request Register,中断请求寄存器,共8bit,对应IR0~IR7八个中断管脚。当某个管脚的中断请求到来后,若该管脚没有被屏蔽,IRR中对应的bit被置一。表示PIC已经收到设备的中断请求,但还未提交给CPU。
u ISR:In Service Register,服务中寄存器,共8bit,每bit意义同上。当IRR中的某个中断请求被发送给CPU后,ISR中对应的bit被置一。表示中断已发送给CPU,但CPU还未处理完。
u IMR:Interrupt Mask Register,中断屏蔽寄存器,共8bit,每bit意义同上。用于屏蔽中断。当某bit置一时,对应的中断管脚被屏蔽。
与APIC不同,PIC的每个管脚具有优先级,以0号管脚最高。也就说,连接号码较小的设备具有较高的中断优先级。通过对PIC的ICW寄存器编程,可以设定起始vector号,以计算当前中断的vector。例如,起始vector号设为16,IR3管脚产生了中断请求,则IR3对应的vector = 16+3 =19。通过PIC发起中断的典型流程如下:
1、 一个或多个IR管脚上产生电平信号,若对应的中断没有被屏蔽,IRR中相应的bit被置一。
2、 PIC拉高INT管脚通知CPU中断发生。
3、 CPU通过INTA管脚应答PIC,表示中断请求收到。
4、 PIC收到INTA应答后,将IRR中具有最高优先级的bit清零,并设置ISR中对应的bit。
5、 CPU通过INTA管脚第二次发出脉冲,PIC收到后计算最高优先级中断的vector,并将它提交到数据线上。
6、 等待CPU写EO
相关文档:
手头有个ep9315的板,今天突然想起跑一下adsl上网。晚上回来就开始搞。
从10点到现在,终于能够跑起来。
给大家借鉴一下。
1.编译内核,把ppp的那些选项选上。 (我用2.6.8.1的kernel,cirrus 的patch)
2.libpcap-0.9.1 这个包是pppd需要的。
./configure CC=arm-linux-gcc CFLAGS=-msoft-float --target=arm-linu ......
-------------------------------------------------------------------------------------------------------
By:yuyongbao
QQ:673360056
1、 linux下共享文件。安装smbserver。然后在《系统设置》中打开《服务器设置》的《smb server》服务器,输入相关路径即可。然后在window中,使用网络邻居查找linux。(注 ......
-------------------------------------------------------------------------------------------------------
//By:yuyongbao
//QQ:673360056
LINUX 内核结构体
struct attribute
{
const char * name;
struct module &nb ......
在Solaris上面工作有几个不方便地方:
一个是ls不能按照文件类型显示颜色;
另一个是VI也不能显现语法色彩;
这里就来说明如何解决这两个问题:
其实这两个问题都是Solaris自身所带的ls和vi版本的问题;
所以解决办法就是下载最新的ls和vim源文件包重新编译进行安装,看上去好像挺麻烦,其实就几步,很简单的:
最新的ls是在 ......
我们知道,从CMOS中读出来的系统时间并不是time_t类型,而是类似于struct tm那样,年月日时分秒是分开存储的。
那么,要把它转化为系统便于处理的time_t类型,就需要算法进行转换。
我们都知道我们的公历还是比较复杂的,有大月小月,有闰年非闰年,处理起来会很麻烦。
&n ......