DSP2833x实验_外部中断实验

1.外部中断简介

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

 

   

 

 

相关寄存器:

(1)外部中断控制寄存器(XINTnCR)。(n:1~7)

 

 

 外部中断配置:

外部中断相关函数及寄存器在DSP2833x_PieCtrl.c、DSP2833x_PieVect.c、DSP2833x_GlobalVariableDefs.c文件及其对应的头文件内查找到
(1)使能CPU级中断,并初始化PIE控制器寄存器和PIE中断向量表
  InitPieCtrl();
  IER = 0x0000;
  IFR = 0x0000;
  InitPieVectTable();

(2)使能IO口时钟,配置IO口为输入
(3)设置 IO 口与中断线的映射关系
  比如我们K1它是连接在GPIO12上,要使用外部中断功能可以是外部中断1或者外部中断2,假如使用外部中断1,代码如下:
  EALLOW;
  GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 12; // XINT1是GPIO12
  EDIS;

(4)指定中断向量表中断服务函数地址
  比如外部中断1,其设置如下:
  EALLOW; // 修改被保护的寄存器,修改前应添加EALLOW语句
  PieVectTable.XINT1 = &EXTI1_IRQn;
  EDIS; // EDIS的意思是不允许修改被保护的寄存器
(5)使能外设对应的PIE中断
  比如外部中断1,它是由PIE组1的第4通道连接
  PieCtrlRegs.PIEIER1.bit.INTx4 = 1; // 使能PIE组1的INT4
  EDIS;

(6)设置外部中断触发方式并使能中断
  外部中断的触发方式及中断使能是由XIntruptRegs寄存器控制,具体实现代码如下:
  XIntruptRegs.XINT1CR.bit.POLARITY = 0; // 下降沿触发中断
  XIntruptRegs.XINT1CR.bit.ENABLE= 1; // 使能XINT1
(7)使能CPU级中断及全局中断
  IER |= M_INT1; // 使能CPU中断1(INT1)
  EINT; // 开全局中断
  ERTM;

(8)编写外部中断服务函数
  例如外部中断1的中断服务函数:
  interrupt void EXTI1_IRQn(void)
  {
  ...功能程序
  }

代码实现:

 

posted @ 2021-07-08 10:48  百叶集  阅读(812)  评论(0编辑  收藏  举报