• 中断系统以及外部中断


    参考链接:点击这里

    一、中断相关的基础概念

            内核外设之间的主要交互方式有两种:轮询中断。 轮询的方式貌似公平,但实际工作效率很低,且不能及时响应紧急事件;中断系统使得内核具备了应对突发事件的能力。

            在执行CPU当前程序时,由于系统中出现了某种急需处理的情况,CPU暂停正在执行的程序,转而去执行另外一段特殊程序来处理出现的紧急事务,处理结束后,CPU自动返回到原来暂停的程序中去继续执行。 这种程序在执行过程中由于外界的原因而被中间打断的情况,称为中断

            两个重要的概念:

            <1> 中断服务函数: 内核响应中断后执行的相应处理程序。

            <2> 中断向量:中断服务程序的入口地址。每个中断源都对应一个固定的入口地址。当内核响应中断请求时,就会暂停当前的程序执行,然后跳转到该入口地址执行代码。

    二、CC2530的中断系统

            CC2530具有18个中断源,每个中断源都由各自的一系列特殊功能寄存器来进行控制。可以编程设置相关特殊功能寄存器,设置18个中断源的优先级以及使能中断申请响应等。我们常用的中断源有下面几个:

    三、CC2530的中断处理函数编写方法

            中断服务函数与一般自定义函数不同,有特定的书写格式

    <1> 在每一个中断服务函数之前,都要加上一句起始语句

            #pragma vector = <中断向量>

            <中断向量>表示接下来要写的中断服务函数是为那个中断源服务的,该 语句有两种写法:

            #pragma  vector = 0x7B    或者    #pragma  vector = P1INT_VECTOR

            前者是中断向量的入口地址,后者是头文件“ioCC2530.h”中的宏定义。

    <2> _ _interrupt关键字表示该函数是一个中断服务函数,<函数名称>可以 自定义,函数体不能带有参数,也不能有返回值

    四、CC2530的外部中断

            CC2530的P0、P1和P2端口中的每个引脚都具有外部中断输入功能,要使某些引脚具有外部中断功能,需要对IENx寄存器、PxIEN寄存器和PICTL寄存器进行适当的设置。 除了各个中断源都有自己的中断使能开关之外,中断系统还有一个总开关,可以同“EA = 1;”来打开总中断。

            P0、P1和P2端口分别使用P0IF、P1IFP2IF作为中断标志位,任何一个端口组上的引脚产生外部中断时,都会将对应端口组的中断标志自动置位。注意,外部中断标志必须在中断服务函数中手工清除,否则CPU会反复进入中断。 端口状态标志寄存器P0IFGP1IGFP2IFG,分别对应3个端口中各引脚的中断触发状态,当某引脚发生外部中断触发时,对应的标志位会自动置位,这个标志同样需要手工清除。

    本次整理为直接复制粘贴部分内容,如有涉权,联系删除(QQ:631025319)

  • 相关阅读:
    剑指Offer 13.机器人的运动范围
    笔试题目-无向图是否全连通
    面试题目-最小代价的寻路问题
    京东一面问题
    剑指Offer 07.重建二叉树
    剑指Offer 12.矩阵中的路径
    剑指Offer 10-I.斐波那契数列
    剑指Offer 06.从尾到头打印链表
    剑指Offer 05.替换空格
    剑指Offer 04.二维数组中的查找
  • 原文地址:https://www.cnblogs.com/2020zxc/p/13740623.html
Copyright © 2020-2023  润新知