S3C2440 中断控制寄存器

来源:互联网 发布:淘宝助手批量上传图片 编辑:程序博客网 时间:2024/05/22 15:31

1、 SUBSRCPND 寄存器(SUB SOURCE PENDING)

    SUBSRCPND 寄存器被用来标识 INT_RXD0、INT_TXD0 等中断(S3C2410中这类中断有 11 个,而 S3C2440 中有 15 个)是否已经发生,每位对应一个中断。当这些中断发生并且没有被 INTSUBMSK 寄存器屏蔽,则它们中的若干位将“汇集”出现在 SRCPND 寄存器的一位上。比如 SUBSRCPND 寄存器中的 3 个中断 INT_RXD0、INT_TXD0、INT_ERR0,只要有一个发生了并且它没有被屏蔽,则 SRCPND 寄存器中的 INT_UART0 位被置 1。

    要清楚中断时,往 SUBSRCPND 寄存器中某位写入 1 即可令此位为 0;写入 0 无效果,数据保持不变。

    SUBSRCPND 寄存器中各位对应的中断、SUBSRCPND 寄存器中哪几位“汇集”成 SRCPND 寄存器中的哪一位,参考数据手册。


2、 INTSUBMSK 寄存器(INTERRUPT SUB MASK)

    INTSUBMSK 寄存器被用来屏蔽 SUBSRCPND 寄存器所标识的中断。 INTSUBMSK 寄存器中某位被设为 1 时, 对应的中断被屏蔽。


3、SRCPND 寄存器(SOURCE PENDING)

    SRCPND 中每一位被用来表示一个(或一类)中断是否已经发生,“SPCPND”的两类中断:使用 SUBSRCPND/INTSUBMSK 控制的中断,不使用 SUBSRCPND/INTSUBMSK 控制的中断。

    SRCPND 寄存器的操作与 SUBSRCPND 寄存器相似,若想清除某一位,往此位写入 1.

    SRCPND 寄存器中各位对应哪个(或哪类)中断,参考数据手册。


4、INTMSK 寄存器(INTERRUPT MASK)

    INTMSK 寄存器被用来屏蔽 SRCPND 寄存器所标识的中断。 INTMSK 寄存器中某位被设为 1 时,对应的中断被屏蔽。

    INTMSK 寄存器只能屏蔽被设为 IRQ 的中断,不能屏蔽被设为 FIQ 的中断。


5、 INTMOD 寄存器(INTERRUPT MODE)

    当 INTMOD 寄存器中某位被设为 1 时,它对应的中断被设为 FIQ,即此中断发生时, CPU 将进入快速中断模式,这通常用来处理特别紧急的中断。

    注意:同一时间里, INTMOD 寄存器中只能有一位被设为 1.


6、 PRIORITY 寄存器

    上面 INTMOD 寄存器中,将设为 1 的中断称为快速中断(FIQ),将其余设为 0 的中断称为普通中断(IRQ)。

    当有多个普通中断同事发生时,中断控制器将选出最高优先级的中断,首先处理它。终端优先级的判选通过 7 个仲裁器来完成,包括 6 个一级仲裁器和 1 一个二级仲裁器。

    每个仲裁器含 6 个输入引脚 REQ0 ~ REQ5。对于每个仲裁器, PRIORITY 寄存器使用三位来控制其行为:一位被用于选择仲裁器工作模式,称为 ARB_MODE;两位被用于控制各输入信号的优先级,称为 ARB_SEL。

    ARM_SEL 的取值和 REQ0 ~ REQ5 的优先级如下。 

 ARB_SEL              优先级(从高到低)  00b REQ0, REQ1, REQ2, REQ3, REQ4, REQ5  01b REQ0, REQ2, REQ3, REQ4, REQ1, REQ5 10b REQ0, REQ3, REQ4, REQ1, REQ2, REQ5 11b REQ0, REQ4,  REQ1,  REQ2,  REQ3, REQ5    注:REQ0 的优先级永远是最高的,REQ5 的优先级用于是最低的。

    当某个仲裁器的 ARB_MODE 被设为 0 时, 它的 ARB_SEL 位是不会自动变化的,此时这个仲裁器的 6 个输入引脚的优先级固定不变(当然,可以通过软件修改 ARB_SEL 来改变它们的优先级)。当 ARB_MODE 位被设为 1 时, ARB_SEL 会随着“已经被服务的 REQx”(x 为 1 ~ 4)自动变化,变化顺序如下。

 已经被服务的REQx      ARB_SEL 的新值                           REQ0/REQ5 维持不变 REQ1 01b REQ2 10b REQ3 11b REQ4 00b    结合上面2个表可知:当 ARB_MODE 为 1 时, 某个 REQx(x 为 1 ~ 4)被服务之后,它的优先级变为 REQ0 ~ REQ4 中的最低。

    PRIORITY 寄存器中位[0:6]对应这 7 个仲裁器的 ARB_MODE 位(位[0]是 ARB_MODE0,依次类推),位[7:20]位对应这 7 个 仲裁器的 ARB_SEL ([7:8]是 ARB_SEL0,依次类推)


7、INTPND 寄存器(INTERRUPT PENDING)

    经过中断优先级仲裁器选出优先级最高的中断后,这个中断在 INTPND 寄存器中的相应位被置 1 ,随后,CPU将进入中断模式处理它。

    同一时间内,此寄存器只有一位被置 1; 在 ISR 中,可以根据这个位确定是哪个中断。清除中断时,往这个位写入 1。


8、INTOFFSET 寄存器(INTERRUPT OFFSET)

    这个寄存器被用来表示 INTPND 寄存器中那位被置 1 了, 即 INTPND 寄存器中位 [x] 为 1 时, INTOFFSET 寄存器的值为 x(x 为 0 ~ 31)。

    在清除 SRCPND、 INTPND 寄存器时, INTOFFSET 寄存器被自动清除。




0 0