×

中断控制基本编程方法和库函数及例程的详细中文介绍

消耗积分:0 | 格式:rar | 大小:0.40 MB | 2018-05-09

分享资料个

  中断基本编程方法

  利用《Stellaris外设驱动库》编写一个中断程序的基本方法如下:

  1. 使能相关片内外设,并进行基本的配置

  对于中断源所涉及的片内外设必须要首先使能,使能的方法是调用头文件《sysctl.h》中的函数SysCtlPeripheralEnable( )。使能该片内外设以后,还要进行必要的基本配置。

  2. 设置具体中断的类型或触发方式

  不同片内外设具体中断的类型或触发方式也各不相同。在使能中断之前,必须对其进行正确的设置。以GPIO为例,分为边沿触发、电平触发两大类,共5种,这要通过调用函数GPIOIntTypeSet( )来进行设置。

  3. 使能中断

  对于Stellaris系列ARM,使能一个片内外设的具体中断,通常要采取分3步走的方法:

  调用片内外设具体中断的使能函数

  调用函数IntEnable( ),使能片内外设的总中断

  调用函数IntMasterEnable( ),使能处理器总中断

  4. 编写中断服务函数

  中断服务函数从形式上跟普通函数类似,但在命名及具体的处理上有所不同。

  中断服务函数命名 对于GCC编译器下的程序,中断服务函数的名称是事先约定好的。用户可以打开启动文件“LM3S_Startup.s”来查看每个中断服务函数的标准名称(参见表1.1)。例如,GPIOB端口的中断服务函数名称是GPIO_Port_B_ISR,对应的函数头应当是“void GPIO_Port_B_ISR(void)”,参数和返回值都必须是void类型。在Keil或IAR开发环境下,中断服务函数的名称可以由程序员自己指定,但还是推荐采用GCC下的标准名称,这样有利于程序移植。

  中断状态查询 一个具体的片内外设可能存在多个子中断源,但是都共用同一个中断向量。例如GPIOA有8个管脚,每个管脚都可以产生中断,但是都共用同一个中断向量号16,任一管脚发生中断时都会进入同一个中断服务函数。为了能够准确区分每一个子中断源,就需要利用中断状态查询函数,例如GPIO的中断状态查询函数是GPIOPinIntStatus( )。如果不使能中断,而采取纯粹的“轮询”编程方式,则也是利用中断状态查询函数来确定是否发生了中断以及具体是哪个子中断源产生的中断。

  中断清除 对于Stellaris系列ARM的所有片内外设,在进入其中断服务函数后,中断状态并不能自动清除,而必须采用软件清除(但是属于Cortex-M3内核的中断源例外,因为它们不属于“外设”)。如果中断未被及时清除,则在退出中断服务函数时会立即再次触发中断而造成混乱。清除中断的方法是调用相应片内外设的中断清除函数。例如,GPIO端口的中断清除函数是GPIOPinIntClear( )。

  程序清单1.1以GPIOA中断为例,给出了外设中断服务函数的经典编写方法。关键是先将外设的中断状态读到变量ulStatus里,然后及时地、放心地清除全部中断状态,剩下的工作就是排列多个if语句分别进行处理了。

  程序清单1.1 典型的中断服务函数编写方法

中断控制基本编程方法和库函数及例程的详细中文介绍

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !