精华内容
下载资源
问答
  • 中断系统的基本知识

    2008-10-29 22:36:00
    中断系统的基本功能如下:及时记录各种中断请求 对于外部中断,中断系统中必须要有能够及时记录各种外部中断请求信号的部件,一般是用一个中断请求寄存器来保存。及时相应中断请求 中断事件是在异常情况下发生或...

    中断系统由CPU的中断机构、I/O系统的中断控制接口和操作系统中相应的中断服务程序组成。中断系统的基本功能如下:

    1. 及时记录各种中断请求    对于外部中断,中断系统中必须要有能够及时记录各种外部中断请求信号的部件,一般是用一个中断请求寄存器来保存。
    2. 及时相应中断请求    中断事件是在异常情况下发生或外部设备需要CPU干预时产生的,所以CPU必须能够在发生中断事件后,自动响应并处理。中断响应操作是在CPU执行指令流程中固定安排的:总是在一条指令执行完、下一条指令执行前去检查有无中断请求发生。若有,则根据情况决定是否响应响应相应的中断判优机构,在有多个中断请求同时产生时能够判断出哪个中断的优先级高,选择优先级高的中断先响应。
    3. 保护被中断的断点和现场    因为中断响应后要转去执行中断服务程序,而执行完中断服务程序后,还要回到原来的程序继续执行。所以原程序被中止处的指令地址和当时的程序状态以及各寄存器的内容必须保存,以便能正确的回到原处继续去执行。
    4. 中断屏蔽    现代计算机的中断系统允许处理器在执行某个中断处理程序时,可以被新的中断请求打断。但是对于一些重要的紧急的异常处理,就要设置成不能被其它新的中断事件打断,这就是在中断屏蔽的概念。它是通过在中断系统中的中断屏蔽寄存器中设置中断屏蔽字来实现的。
    展开全文
  • 中断功能: INT N;N代表整数 一般DOS下使用INT 21H中断代码 终止功能: 可以使用INT 20H终止程序但不建议 一般使用4CH功能号: MOV AH,4CH 或MOV AX,4C00H,都一样 字符功能: 几乎每个功能都与AH或AX,AL有关 格式...

    中断功能:
    INT N;N代表整数
    一般DOS下使用INT 21H中断代码
    终止功能:
    可以使用INT 20H终止程序但不建议
    一般使用4CH功能号:
    MOV AH,4CH
    MOV AX,4C00H,都一样

    字符功能:
    几乎每个功能都与AH或AX,AL有关
    格式一般为
    MOV AH,功能号
    MOV 寄存器,目标值

    01H、07H和08H—从标准输入设备输入字符

    	从标准输入设备(如:键盘)读入一个字符。该中断在处理过程中将一直处于等待状态直到有字符可读为止。该输入还可被重定向,如果这样做,则无法判断文件是否已到文件尾
    	
    	入口参数:AH=01H,过滤掉控制字符,并回显
    	
    	 =07H,不过滤掉控制字符,不回显
    	
    	 =08H,过滤掉控制字符,不回显
    

    02H—DL中字符输出

    一般可用于输出回车换行
    字符是	ascii内
    

    03H—辅助设备的输入
    04H—辅助设备的输出
    05H—打印输出
    06H—控制台输入/输出

    09H—AH显示DX字符串

    字符串一般以$结尾
    

    0AH— 键盘缓冲输入

    输入一个以回车键结尾的字符串并显示,
    注意字符串是字节类型的DB
    

    0BH—检测输入状态

    检查标准输入设备上是否有字符可读。该输入操作可被重定向
    
    入口参数:AH=0BH
    
    出口参数:AL=00H——无字符可读;FFH——有字符可读
    

    0CH—清输入缓冲区的输入功能

    清空当前的标准输入缓冲区,重新读入字符
    

    只知道这些了

    加油!

    展开全文
  • ARM多核处理器一般搭建一个GIC来提供中断控制功能,中端控制器是连接外设中断系统和CPU系统的桥梁。   ARM上把中断分为三类: PPI(private peripheral interrupt) 16~31 这些中断一般是发送给特定的Cpu的,...

    GIC是ARM推出的一个通用的中断控制器,全志H3中使用了GIC的多核方案,符合GIC V2规格。ARM多核处理器一般搭建一个GIC来提供中断控制功能,中端控制器是连接外设中断系统和CPU系统的桥梁。

     

    ARM上把中断分为三类:

    • PPI(private peripheral interrupt) 16~31

    这些中断一般是发送给特定的Cpu的,比如每个Cpu有自己对应的Physicaltimer,产生的中断信号就发送给这个特定的cpu进行处理

    • SPI(shared processor interrupts)

    这是常见的外部设备中断,也定义为共享中断,比如按键触发一个中断,手机触摸屏触发的中断,共享的意思是说可以多个Cpu或者说Core处理,不限定特定的Cpu。一般定义的硬件中断号范围31~1019.Cortex-A15和A9上的GIC最多支持224个SPI。

    • SGI(software generated interrupts)

    软件出发产生的中断,中断号范围0~15,也就是最前的16个中断,相当于IPI,简单的说Cpu_1要给Cpu_2发送特定信息,比如时间同步,全局进程调度信息,就通过软件中断方式,目标Cpu接受到这样的中断信息,可以获取到信息是哪个Cpu发送过来的,具体的中断ID是哪个数字,从而找到对应处理方式进行处理。

     

    全志H3中断体系结构的拓扑如下所示,4个CPU核连接到root GIC,然而子中断控制器(比如GPIO控制器)不与CPU直接相连,而是上报至root GIC的某个SPI中断上,root GIC负责接收子中断控制器信息然后向某个CPU汇报。

     

     

    在全志H3中,不是每个GPIO bank都可以作为中断控制器的,只有PA,PG,和PL可以作为中断控制器。PA这一bank下的PA0,PA1,PA2。。。等request line公用一个SPI-43号中断。

     

    使用nanopi-m1的PA9 外部中断

     

    在设备树源文件sun8i-h3-nanopi-m1.dts添加interrupt-demo节点

    interrupt_demo: interrupt_demo {
    	compatible = "nanopi-m1,interrupt_demo";
    	interrupt-parent = <&pio>;
    	//interrupts = <0 9 IRQ_TYPE_EDGE_FALLING>; 
    	key-gpio = <&pio 0 9 GPIO_ACTIVE_LOW>;
    };

     

    interrupt-demo节点用interrupt-parent属性指明其中断父亲属于pinctrl,pinctrl节点的描述如下所示,其中interrupt-cells为3说明interrupt-demo节点的interrupts属性值需要3个bytes来表示,

            pio: pinctrl@01c20800 {
                /* compatible is in per SoC .dtsi file */
                reg = <0x01c20800 0x400>;
                interrupts = <GIC_SPI 11 IRQ_TYPE_LEVEL_HIGH>,
                         <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
                clocks = <&ccu CLK_BUS_PIO>, <&osc24M>, <&osc32k>;
                clock-names = "apb", "hosc", "losc";
                gpio-controller;
                #gpio-cells = <3>;
                interrupt-controller;
                #interrupt-cells = <3>;
                ......
        };

    驱动程序

    #include <linux/init.h>
    #include <linux/module.h>
    #include <linux/platform_device.h>
    #include <linux/gpio.h>
    #include <linux/of.h>
    #include <linux/of_gpio.h>
    #include <linux/interrupt.h>
    
    typedef struct
    {
        int gpio;
        int irq;
    }int_demo_data_t;
    
    static irqreturn_t int_demo_isr(int irq, void *dev_id)
    {
        int_demo_data_t *data = dev_id;
    
        printk("%s enter, gpio:%d, irq: %d\n", __func__,  data->gpio, data->irq);
    
        return IRQ_HANDLED;
    }
    
    static int int_demo_probe(struct platform_device *pdev) {
        struct device *dev = &pdev->dev;
        int irq_gpio = -1;
        int irq = -1;
        int ret = 0;
        int i = 0;
        int_demo_data_t *data ;
    
        printk("%s enter.\n", __func__);
    
    
        data = devm_kmalloc(dev, sizeof(*data), GFP_KERNEL);
        if (!data) {
            printk("malloc fail for data\n");
            return -1;
        }
    
    
    
            irq_gpio = of_get_named_gpio(dev->of_node,"key-gpio", 0);
    
            data[0].gpio = irq_gpio;
    
            irq = gpio_to_irq(irq_gpio);
    
    
            data[0].irq = irq;
    
            printk("%s: gpio: %d ---> irq (%d)\n", __func__, irq_gpio, irq);
    
            ret = devm_request_any_context_irq(dev, irq,
                int_demo_isr, IRQF_TRIGGER_FALLING, "key-gpio", data);
            if (ret < 0) {
                dev_err(dev, "Unable to claim irq %d; error %d\n",
                    irq, ret);
                return -1;
            }
    
    
        return 0;
    
    
    }
    
    static int int_demo_remove(struct platform_device *pdev) {
    
        printk("%s enter.\n", __func__);
    
        return 0;
    }
    
    static const struct of_device_id int_demo_dt_ids[] = {
        { .compatible = "nanopi-m1,interrupt_demo", },
        {},
    };
    
    
    static struct platform_driver int_demo_driver = {
        .driver        = {
            .name    = "interrupt_demo",
            .of_match_table    = int_demo_dt_ids,
        },
        .probe        = int_demo_probe,
        .remove        = int_demo_remove,
    };
    
    static int  int_demo_init(void)
    {
         platform_driver_register(&int_demo_driver);
        return 0;
    }
    static void __exit int_demo_exit(void)
    {
        platform_driver_unregister(&int_demo_driver);
    }
    
    module_init(int_demo_init);
    module_exit(int_demo_exit);
    
    MODULE_LICENSE("GPL");
    MODULE_AUTHOR("WU");

     

    编写驱动程序的Makefile,编译,加载模块

    root@wu:/mnt/driver_test/irq_test# [  377.666140] int_demo_isr enter, gpio:9, irq: 71
    [  377.743009] int_demo_isr enter, gpio:9, irq: 71
    [  377.927100] int_demo_isr enter, gpio:9, irq: 71
    [  378.000418] int_demo_isr enter, gpio:9, irq: 71
    [  480.665685] int_demo_isr enter, gpio:9, irq: 71
    
    
    root@wu:/mnt/driver_test/irq_test# cat /proc/interrupts
     71:          0          0          0          0  sunxi_pio_edge   9 Edge      key-gpio

     

     

     

     

     

     

     

     

    展开全文
  • 中断控制是所有计算机系统的一个核心模块,不同的硬件平台有不同的中断机制。不管怎样,中断机制最核心的部分是中断向量表,每一种硬件体系根据自己的实现提供一张中断向量表。 中断向量表提供了所有支持的中断定义...

    中断向量表

    中断控制是所有计算机系统的一个核心模块,不同的硬件平台有不同的中断机制。不管怎样,中断机制最核心的部分是中断向量表,每一种硬件体系根据自己的实现提供一张中断向量表。

    中断向量表提供了所有支持的中断定义以及相应的中断服务程序。当发生异常时,首先要保存当前的处理器状态,然后进入到相应的异常向量地址。一般来说,异常向量地址处是一个跳转指令,使程序进入相应的异常处理过程

    中断的种类

    根据中断向量表,可以把这些中断具体分为:同步中断、异步中断和软件中断。

    1. 异步中断interrupt)是由于CPU外部的原因而改变程序执行流程的过程,属于异步事件,又称为硬件中断
    2. 软件中断software interrupt自陷(trap)表示通过处理器所拥有的软件指令、可预期地使处理器正在执行的程序的执行流程发生变化,以执行特定的程序。自陷是显式的事件,需要无条件地执行.相当于函数调用
    3. 同步中断exception)即异常,是CPU自动产生的自陷,以处理异常事件,如被0除、执行非法指令和内存保护故障等。异常没有对应的处理器指令,当异常事件发生时,处理器也需要无条件地挂起当前运行的程序,执行特定的处理程序。

    其他中断的分类

    中断还可以有以下几种分类方法:

    • 可屏蔽中断和不可屏蔽中断
      根据硬件中断是否可以被屏蔽,中断分为可屏蔽中断和不可屏蔽中断。
      能够被屏蔽掉的中断称为可屏蔽中断。对于可屏蔽中断,外部设备的中断请求信号一般需要先通过CPU外部的中断控制器,再与CPU相应的引脚相连。在任何时候都不可屏蔽的,称为**不可屏蔽中断

    • 边沿触发中断和电平触发中断

      根据中断触发的方式,中断分为边沿触发中断和电平触发中断
      在边沿触发方式中,中断线从低变到高或是从高变到低时,中断信号就被发送出去,并只有在下一次的从低变到高或是从高变到低时才会再度触发中断。
      对于电平触发方式,在硬件中断线的电平发生变化时产生中断信号,并且中断信号的有效性将持续保持下去,直到中断信号被清除。

    • 向量中断、直接中断和间接中断

      根据中断服务程序的调用方式,可把中断分为向量中断直接中断间接中断

      向量中断是通过中断向量来调用中断服务程序的方式。80x86

      在直接中断调用方式中,中断对应的中断服务程序的入口地址是一个固定值,当中断发生的时候,程序执行流程将直接跳转到中断服务程序的入口地址,执行中断服务程序。8051ARM

      对于间接中断,中断服务程序的入口地址由寄存器提供

    实时内核的中断管理

    在实时多任务系统中,中断服务程序通常包括3个方面的内容:

    • 中断前导:保存中断现场,进入中断处理;
    • 用户中断服务程序:完成对中断的具体处理;需要用户编程位置。
    • 中断后续:恢复中断现场,退出中断处理

    微处理器一般允许中断嵌套,也就是说在中断服务期间,微处理器可以识别另一个更重要的中断并服务于那个更重要的中断。具体程序需要考虑中断判优,中断选择

    在这里插入图片描述

    中断管理功能

    • 挂接中断服务程序:把一个函数(用户中断服务程序)同一个虚拟中断向量表中的中断向量联系在一起;

    • 获得中断服务程序入口地址:根据中断向量,获得挂接在该中断向量上的中断服务程序的入口地址;

    • 获取中断嵌套层次:在允许中断嵌套的处理中,获取当前的中断嵌套层次信息;

    • 开中断:使能中断;

    • 关中断:屏蔽中断

    中断服务程序

    在中断服务程序中可以使用实时内核提供的应用编程接口。但一般只能使用不会导致调用程序可能出现阻塞情况的编程接口,而不要使用分配内存、获得信号量等可能导致中断服务程序的执行流程被阻塞的操作。中断服务程序不能使用关于对象创建和删除方面的操作

    • 当发生中断的时候,对应中断向量中注册的中断服务程序就会被调用执行。中断服务程序的注册即以中断号为索引,把处理中断的函数地址放置到中断向量的地址表中。

    • 中断服务程序的启动完全由CPU来负责,不需要操作系统的处理。

    展开全文
  • Linux内核中断系统

    2019-06-06 09:37:01
    第一部分 中断系统的总体逻辑 CPU的主要功能是运算,因此CPU并不处理中断优先级,那是Interrupt controller的事情。对于CPU而言,一般有两种中断请求,例如:对于ARM,是IRQ和FIQ信号线,分别让ARM进入IRQ mode和...
  • 关键词:动态配置 嵌入式系统 ARM 中断向量表一般32位ARM嵌入式系统的中断向量表是程序编译前设置好的。在编写32位ARM嵌入式系统的中断服务程序、设置和修改ARM体系结构的中断向量表时,常感到相当麻烦,不得不修改...
  • 中断系统的概念和基本结构 CPU正在处理某一程序时,发生了另一突发事件请求CPU迅速去处理(中断发生);CPU暂时停止当前的工作,转到需要处理的中断源的服务程序的入口(中断响应),一般在入口处执行一跳转...
  • PIC877a定时器、中断系统总结:定时,计数从其内部工作方式分析一般表现为计数累加功能,通常是由特定时钟脉冲来触发驱动。PIC16F877单片机有14个中断源,每个中断源都可配置有一个中断使能位(IE)和一个中断标志...
  • 中断控制器是连接外设中断系统和CPU系统的桥梁。根据外设irq request line的多少,中断控制器可以级联。CPU的主要功能是运算,因此CPU并不处理中断优先级,那是中断控制器的事情。 对于CPU而言,一般有两种中断
  • 在单片机程序设计中,设置一个好的时钟中断,将能使一个CPU发挥两个CPU的功效,大大方便和简化程序的编制,提高系统的效率与可操作性。我们可以把一些例行的及需要定时执行的程序放在时钟中断中,还可以利用时钟中断...
  • 中断服务程序设计和响应的一般过程 1. 确定要使用的中断类型号 ○ 中断类型号不能随便使用,不能占用系统已经用过的类型号 2. 保存原中断向量 ○ 将向量表中原来的中断入口地址保存起来,存进附加段或数据段(将向...
  • 定时器系统是单片机内部一个独立硬件部分,与CPU和晶振之间通过内部某些控制线连接并相互作用,CPU一旦启动定时功能,定时器便会在晶振作用下自动计时,当定时器计数器积满之后就会产生中断,通知CPU接下来做什么...
  •  嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统,而高实时性是嵌入式系统的基本要求。  IEEE(美国电气电子...
  • 摘要:通常32位ARM嵌入式系统的中断向量表是在程序编译前设置好的,每次编写中断程序都要改C程序的汇编启动代码,相当繁琐...一般32位ARM嵌入式系统的中断向量表是程序编译前设置好的。在编写32位ARM嵌入式系统的中断
  • Dos系统功能的调用

    千次阅读 2018-12-22 16:26:25
    dos提供给程序员的编程资源是以程序调用的方法使用各种子程序,windows则以应用程序接口API形式提供动态链接库DLL。 中断是一种增强处理器功能的...调用DOS操作系统的功能一般如下: 在AH寄存器中设置系统功能调...
  • linux kernel 中断系统 -- ARM GIC 硬件

    千次阅读 2016-03-10 11:26:40
    一个系统中,中断是很重要组成部分之一...一般系统中,中断控制分为三个地方:模块、中断控制器、处理器,模块通常有寄存器可以控制是否使能中断功能中断触发条件等;中断控制器可以管理中断的优先级等,而处理所有
  • Zigbee之旅(九):几个重要CC2430基础实验——系统睡眠及中断唤醒 一、承上启下  这一篇,我们来讨论一下CC2430睡眠功能及唤醒方法。在实际运用中CC2430节点一般是靠电池来供电,因此对其功耗...
  • Linux的中断屏蔽

    千次阅读 2018-11-11 16:08:31
    在单CPU范围内避免竞态的一种简单而有效的方法是在进入临界区之前屏蔽系统的中断,但是在驱动编程中不值得推荐,驱动通常需要考虑跨平台特点而不假定自己在单核上运行。 CPU一般都具备屏蔽中断和打开中断功能,这...
  • 改进系统的结构,开发系统的并行性 并行:包含同时性和并发性两方面。 同时性指两个或多个事件在同一时刻发生,并发性指两个或多个事件在同一时间段发生。 在同一时刻或同一时间段内完成两种或两种以上性质相同或...
  • 一个系统中,中断是很重要组成部分之...一般系统中,中断控制分为三个地方:模块、中断控制器、处理器,模块通常有寄存器可以控制是否使能中断功能中断触发条件等;中断控制器可以管理中断的优先级等,而处理所...
  • 一个系统中,中断是很重要组成部分之一,...一般系统中,中断控制分为三个地方:模块、中断控制器、处理器,模块通常有寄存器可以控制是否使能中断功能中断触发条件等;中断控制器可以管理中断的优先级等,而处理所
  • 一个系统中,中断是很重要组成部分之...一般系统中,中断控制分为三个地方:模块、中断控制器、处理器,模块通常有寄存器可以控制是否使能中断功能中断触发条件等;中断控制器可以管理中断的优先级等,而处理所...
  • ARM中的中断向量表

    2021-01-19 17:19:52
     在32位ARM系统中,一般都是在中断向量表中放置一条分支指令或PC寄存器加载指令,实现程序跳转到中  断服务例程的功能。例如:  IRQEntry B HandleIRQ ;跳转范围较小  LDR PC,=HandleFIQ ...
  • 存储器管理对象是主存储器(主存、内存)。存储器是计算机系统关键性资源,是存放各种信息主要场所。如何对存储器实施有效管理,不仅直接影响到存储器利用率,而且还对系统性能有...一般存储器结构有“...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 679
精华内容 271
关键字:

中断系统的一般功能