首页 中国创投网 > 养老 > 正文

DSP28335外部中断的使用

一、概述

处理器的外部中断主要用于捕抓外部输入的高低电平。本篇文章将介绍DSP28335的外部中断的使用。


(资料图片)

二、DSP28335外部中断介绍

DSP28335处理器共支持7个外部中断XINT1XINT7,其中XINT1XINT2只能对GPIO0GPIO31配置;XINT3XINT7只对GPIO32~GPIO63配置。每一个外部中断可以被选择为正边沿或负边沿触发。DSP28335的中断系统框图为:

图1 DSP中断系统

DSP28335中断分为三级,分别为:外设级、PIE级、CPU级。如下图所示:

图2 DSP28335的三级中断机制

DSP28335的三级中断机制可以这样理解(以外部中断为例):外设级为像外部引脚输入高低电平时,同时外设级的中断使能了,这时候外设级会产生一个中断标志位,PIE级检测到该中断标志位,同时PIE自己的中断使能了,这时候PIE会产生一个中断标志位,PIE的中断标志位给CPU,当CPU的中断使能位打开了,就会响应这个中断。总的概况:一个外部中断要得到CPU响应,要越过外设级中断使能、PIE中断使能、CPU中断使能。

图3 DSP28335中断过程

从图3可以看出,只有一道一道开关闭合,才能把中断送到CPU,让CPU去响应中断。

三、外部中断涉及相关寄存器

1. 外部中断控制寄存器---XINTnCR【外设级】

图4 外部中断控制寄存器---XINTnCR

外部中断控制寄存器用于控制上升沿触发还是下降沿触发,中断使能。

2. PIE这一级的寄存器【PIE级】

(1)PIE中断使能寄存器----PIEIERx[x=1~12]

图5 PIE中断使能寄存器

(2)PIE中断标志寄存器----PIEIFRx[x=1~12]

图6 PIE中断标志寄存器

(3)PIE中断应答寄存器----PIACK

图6 PIE中断应答寄存器

3.CPU这一级寄存器【CPU级】

(1)CPU中断标志寄存器---IFR

图7 CPU中断标志寄存器

(2)CPU中断使能寄存器---IER

图8 CPU中断使能寄存器

四、DSP28335外部中断实现

DSP28335外部中断实现主要有以下步骤:

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

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

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

图9 中断映射表

本次使用的是GPIO17,映射到XINT1,即INT1.4

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

(5)使能外设对应的PIE中断**[PIE级使能];**

(6)设置外部中断触发方式并使能中断**[外设级使能];**

(7)使能CPU级中断及全局中断**[CPU级使能];**

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

编程实现:

//外部中断配置步骤//1。失能CPU级中断,并初始化PIE控制器寄存器和PIE中断向量表//2.使能IO时钟,配置IO口为输入//3.设置IO口与中断线的映射关系//4.指定中断向量表中断服务函数地址//5.使能外设对应的PIE中断//6.设置外部中断触发中断触发方式并使能中断//7.使能CPU级中断及全局中断void EXTI_Init(void){

// 步骤 1. 失能CPU级中断,并初始化PIE控制器寄存器和PIE中断向量表

DINT; // 禁止CPU全局中断  InitPieCtrl();  IER = 0x0000;    // 禁止CPU中断和清除所有CPU中断标志  IFR = 0x0000;  InitPieVectTable();      //初始化PIE中断向量表,并使其指向中断服务子程序(ISR)

//步骤 2.使能IO时钟,配置IO口为输入EALLOW;//关闭写保护

SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;    //开启GPIO时钟  GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 0;     //配置为通用IO口  GpioCtrlRegs.GPADIR.bit.GPIO17 = 0;     //配置为输入  GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0;     //配置为上拉  EDIS;//打开写保护 //步骤3:设置IO口与中断线的映射关系  EALLOW;  GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 17;//XINT1 对应 GPIO17脚(GPIO0-31配置XINT1、2;GPIO32-63配置XINT3~7)  EDIS;

//步骤 4. 指定中断向量表中断服务函数地址EALLOW;PieVectTable.XINT1 = &EXTI_IRQ;EDIS;

//步骤 5.使能外设对应的PIE中断PieCtrlRegs.PIEIER1.bit.INTx4 = 1;//使能PIE 1 组 4通道 (这里需要查询PIE的中断矢量表 来确定使能的位)

//6.设置外部中断触发中断触发方式并使能中断XIntruptRegs.XINT1CR.bit.POLARITY = 0;//下降沿触发有效XIntruptRegs.XINT1CR.bit.ENABLE = 1;//使能外部中断

//步骤 7. 使能CPU级中断及全局中断IER |= M_INT1;//使能INT1中断通道 (对应的变量值在 DSP2833x_Device.h中已进行宏定义。要用|或符号赋值,防止改变其他位)

EINT;//打开全局中断  ERTM;//当使用仿真器调试时 开启DEBUG中断

}

int CNT=0;//步骤 8. 编写中断函数,在中断函数结束前写1清零PIEACK对应位interrupt void EXTI_IRQ(void){GpioDataRegs.GPCTOGGLE.bit.GPIO75 = 1;CNT = CNT+1;// DELAY_US(5000);//延时

PieCtrlRegs.PIEACK.bit.ACK1 = 1;//写1清零PIEACK对应位

}

主函数为:

void main(void){

InitSysCtrl();GIOP_Init();EXTI_Init();while(1){

// GpioDataRegs.GPCSET.bit.GPIO75 = 1;}

}

通过上面的程序就能使用按键使得一个LED灯翻转。

*五、总结

本篇文章介绍了DSP28335的外部中断的使用,使用一个按键作为外部输入,触发LED灯进行翻转。

关键词:

关于本站 管理团队 版权申明 网站地图 联系合作 招聘信息

Copyright © 2005-2023 中国创投网 - cn.xunjk.com All rights reserved
联系我们:39 60 29 14 2@qq.com
皖ICP备2022009963号-3