F28335

您所在的位置:网站首页 外部中断的触发方式有哪些 F28335

F28335

2024-07-11 14:52:18| 来源: 网络整理| 查看: 265

前言

F28335外部中断有7个,外部中断1-7,其中外部中断1和2只能对GPIO0-31配置;外部中断3、4、5、6、7只能对GPIO32-63配置,配置它们的方法是一样的,所以只要学会一个即可掌握所有的外部中断。

本章所要实现的功能是:使用外部中断 1 功能通过按键 K1 控制 D2 亮灭,K4 按键控制D3亮灭 , D1 指 示 灯 闪 烁 提 示 系 统 运 行 状 态 。

一、外部中断介绍 1.1 外部中断简介

F28335共支持7个外部中断XINT1~XINT7,其中XINT1-XINT2只能对GPIO0-GPIO31进行配置;XINT32-XINT63配置。XINT13还有一个不可屏蔽的外部中断XNMI共用中断源。

每一个中断可以被选择为正边沿或负边沿触发,也可以被使能或者禁止(包括XNMI)。可屏蔽中断单元包括一个16位增计数器,该计数器在检测到有效中断边沿时复位为0,同时用来准确记录中断发生时间。

其结构框图如下图所示:

在这里插入图片描述

1.2 外部中断相关寄存器 1) 外部中断控制寄存器(XINTnCR)

F28335 共支持 7 个外部中断 XINT1-XINT7,XINT13 还有一个不可屏蔽的外部 中断 XNMI 共用中断源。每一个外部中断可以被选择为正边沿或负边沿触发,也 可以被使能或者禁止(包括 XNMI)。可屏蔽中断单元包括一个 16 位增计数器, 该计数器在检测到有效中断边沿时复位为 0,同时用来准确记录中断发生的时间。

外部中断控制寄存器(XINTnCR n=1-7)各位信息如下图所示:

在这里插入图片描述

2) 外部NMI中断控制寄存器(XNMICR)

外部 NMI 中断控制寄存器(XNMICR)各位信息如下图所示: 在这里插入图片描述

3) 外部中断x计数器(XINTxCTR)

外部中断 x 计数器(XINTxCTR)(只读寄存器)各位信息如下图所示:

在这里插入图片描述

二、外部中断配置步骤

1) 失能 CPU 级中断,并初始化 PIE 控制器寄存器和 PIE 中断向量表;

在前面学习中断章节中,我们知道 F28335 的外设中断需通过 PIE 控制器来 管理,因此需要初始化 PIE 相应的寄存器和中断向量表。TI 公司已经提供了对应的函数来完成这些操作。分别是 InitPieCtrl()和 InitPieVectTable()。从函 数名即可明白它的功能,所以在开发 F28335 程序时不需要准确记住函数,知道 其含义然后查找即可。这两个函数分别在 DSP2833x_PieVect.c、 DSP2833x_GlobalVariableDefs.c 文件中。 此步代码如下: InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable();

2) 使能 IO 口时钟,配置 IO 口为输入;

由于使用开发板上按键 IO 口作为外部中断输入线,因此需要使能对应的 IO 口时钟及配置 IO 口模式,把对应 IO 口设置为输入模式。

3) 设置IO口与中断线的映射关系;

前面说过,F28335 共支持 7 个外部中断 XINT1-XINT7,其中 XINT1-XINT2 只 能对 GPIO0-GPIO31 配置;XINT3-XINT7 只对 GPIO32-GPIO63 配置。所以需要选 择对应的外部中断线及 IO 口配置,比如我们 K1 它是连接在 GPIO12 上,要使用 外部中断功能可以是外部中断 1 或者外部中断 2,假如使用外部中断 1,其代码如下:

EALLOW; GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 12; // XINT1 是 GPIO12 EDIS;

4) 指定中断向量表中断服务函数地址;

这个通过对 PIE 中断向量表寄存器的相应位进行设置,中断服务函数名可自 定义,但是要符合 C 语言标识符命名规则,在中断函数名前需加上地址符“&”。 在对 PIE 中断向量表寄存器设置时要先声明 EALLOW,修改完成后还要声明 EDIS。 比如外部中断 1,其设置如下:

EALLOW; // 修改被保护的寄存器,修改前应添加 EALLOW 语句 PieVectTable.XINT1 = &EXTI1_IRQn; EDIS; // EDIS 的意思是不允许修改被保护的寄存器

5) 使能外设对应的 PIE 中断; 由于外设中断较多,它们是由 PIE 统一管理,所以要根据你所使用的外设中 断选择对应的组和该组内的通道,比如外部中断 1,它是由 PIE 组 1 的第 4 通道 连接,这个在前面中断介绍时讲解过。因此可由 PIE 控制寄存器中相应中断使能 位来控制。其实现代码如下所示: PieCtrlRegs.PIEIER1.bit.INTx4 = 1; // 使能 PIE 组 1 的 INT4

6) 设置外部中断出发方式并使能中断;

我们知道外部中断的触发方式有上升沿触发(正边沿)和下降沿触发(负边 沿),根据自己的需求来选择。当按键按下时,我们是让其输入一个低电平到 IO 口,而默认处于高电平,所以按键按下时会产生一个下降沿,因此选择下降 沿触发。外部中断的触发方式及中断使能是由 XIntruptRegs 寄存器控制,具体 实现代码如下: XIntruptRegs.XINT1CR.bit.POLARITY = 0; // 下降沿触发中断 XIntruptRegs.XINT1CR.bit.ENABLE= 1; //使能 XINT1

7) 使能CPU级中断及全局中断,这个通过对IER和EINT寄存器相应位设置进行使能或者失能。其代码如下: IER |= M_INT1; // 使能 CPU 中断 1 (INT1) EINT; // 开全局中断 ERTM;// 当使用仿真器调试时可开启DEBUG中断,即使用ERTM语句

8) 编写外部中断服务函数

配置好中断后如果有触发,即会进入中断服务函数,中断服务函数名在前面 已定义好,所以要保证一致,否则将不会进入中断服务函数内执行。在 DSP28335 软件开发中,要在中断服务函数名前加上关键字 interrupt。例如外部中断 1 的 中断服务函数: interrupt void EXTI1_IRQn(void) { …功能程序 } 在中断执行结束前要清除相应的中断标志位,以等待下次中断的到来。

三、程序设计 步骤如下:

1) 初始化对应端口的外部中断功能; 2) 编写外部中断函数; 3) 编写主函数;

3.1 外部中断初始化函数

要使用外部中断,我们必须先对它进行配置。其初始化代码如下:

void EXTI1_Init(void) { EALLOW; SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1; // GPIO input clock EDIS;

EALLOW; //KEY 端口配置 GpioCtrlRegs.GPAMUX1.bit.GPIO12=0; GpioCtrlRegs.GPADIR.bit.GPIO12=0; GpioCtrlRegs.GPAPUD.bit.GPIO12=0; GpioCtrlRegs.GPAQSEL1.bit.GPIO12 = 0; // 外部中断 1 (XINT1)与系统时钟 SYSCLKOUT 同步

GpioCtrlRegs.GPBMUX2.bit.GPIO48=0; GpioCtrlRegs.GPBDIR.bit.GPIO48=1; GpioCtrlRegs.GPBPUD.bit.GPIO48=0; GpioDataRegs.GPBCLEAR.bit.GPIO48=1; EDIS;

EALLOW; GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 12; // XINT1 是 GPIO12 EDIS;

EALLOW; // 修改被保护的寄存器,修改前应添加 EALLOW 语句 PieVectTable.XINT1 = &EXTI1_IRQn; EDIS; // EDIS 的意思是不允许修改被保护的寄存器

PieCtrlRegs.PIEIER1.bit.INTx4 = 1; // 使能 PIE 组 1 的 INT4 XIntruptRegs.XINT1CR.bit.POLARITY = 0; // 下降沿触发中断 XIntruptRegs.XINT1CR.bit.ENABLE= 1; // 使能 XINT1

IER |= M_INT1; // 使能 CPU 中断 1 (INT1) EINT; // 开全局中断

ERTM; }

在 EXTI1_Init()函数中,首先开启 GPIO 时钟,并初始化 GPIO12 为输入状态, 然后选择 GPIO12 为外部中断 1 功能,设置外部中断入口函数,使能 PIE 中断, 最后选择外部中断触发方式为下降沿触发,并开启外部中断功能和总中断。这些 配置是按照前面介绍的步骤完成,除了时钟外,其他顺序可以调换。 其实如果你会配置外部中断 1,那么其他外部中断都是类似的。

3.2 外部中断服务函数

初始化外部中断后,中断就已经开启了,当指定按键按下后会触发一次中断, 这时程序就会进入中断服务函数执行,所以我们还需要编写对应的 外部中断函 数,这里我们以 GPIO12 管脚的 K1 按键进行讲解,其他的按键的中断函数类似, 具体代码如下: interrupt void EXTI1_IRQn(void) { Uint32 i; for(i=0;i i++; if(i%2000==0) { LED1_TOGGLE; } DELAY_US(100); } }



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭