DSP28335外部中断

一、概述

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

二、DSP28335外部中断介绍

   DSP28335处理器共支持7个外部中断XINT1~XINT7,其中XINT1~XINT2只能对GPIO0~GPIO31配置;XINT3~XINT7只对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灯进行翻转。

更过精彩内容请关注“电机人生”微信公众号

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值