F28335中断系统及其应用————DSP TMS320F28335 学习笔记 (二)

1 中断概述
1.1 中断响应机制和分类
CPU在进程正常的程序处理的时候,有时候会被要求处理更高需求级别的任务,因此不得不中断当前任务进程,进入中断服务程序。而在处理完这些额外的任务之后,还需要回到之前的任务,因此就需要在进入中断程序之前必须保存现场,以确保在主要任务被打断并完成中断程序之后,能够准确地回到之前的任务节点。
另外,额外的任务有时候并不是更高级的需求,
中断请求可以分为

  • 可屏蔽中断:可通过判断优先级选择是否处理
  • 不可屏蔽中断:强制停止CPU进程,进入中断程序,比如复位和NMI。

中断源也可以分成两类:

  • 片内部中断源:PWM、CAP、QEP、定时器等
  • 片外部中断源:外部中断输入引脚XINT1、XINT2引入的信号

1.2 中断结构
F28335有很多的外设资源,这些外设资源有可能会同时发布额外任务给CPU,换句话说就是F28335的中断源有很多,这些中断源想要得到CPU的响应就必须要中断线传递信号给CPU。可是F28335的中断线数是有限的,这个时候PIE模块来分配中断资源了。

在这里插入图片描述

从图中可以看出,

  • 外部中断源均通过PIE模块进行判断处理
  • 内部中断源中定时器1和定时器2单独通过INT13 和INT14处理,其他也通过PIE模块处理
  • PIE模块处理INT1-INT12
  • 总共16路中断线

2 中断管理模块PIE
PIE模块作用是在有限中断线的情况下用来管理多个中断源触发。
2.1 PIE模块结构
在这里插入图片描述
PIE的结构如上图所示,PIE模块是由多个中断组和每个中断组的多路选择器构成的。从INT1~INT12均为PIE模块管理的可屏蔽中断,而这12个中断每个都由8个外设计中断组成,比如途中INT1.X对应的就是由INT1.1 ~ INT 1.8组成,这8个外设级中断就是我们对应的外部中断源引脚。
PIE模块通过一个8选1的多路选择器将这8个外设中断组成一组。我们在程序中配置的时候也是以这个结构为基础来配置的。

补充PIE响应的优先级

  • INT1>INT2>…INT12
  • INT1.1>INT1.2>…INT1.8

2.2 PIE模块的响应机制
PIE模块有这么多的外设需要管理,就必定由相应的响应顺序和寄存器需要配置。
在PIE 模块内每组中断都有相应的中断标志位(PIEIFRx)和使能位(PIE-IERx.y) ,除此之外,每组PIE中断(INT1~INT12)有一个响应标志位(PIEACK)。图6.5给出了PIEIFR和PIEIER不同设置时的PIE硬件的操作流程。
在这里插入图片描述
一旦PIE控制器有中断产生,相应的中断标志位(PIEIFRx.y)将置1。如果相应的PIE中断使能位也置1,则PIE将检查相应的PIEACKx以确定CPU是否准备响应该中断。如果相应的PIEACKx位清零,PIE向CPU申请中断;如果PIEACKx置1,PIE将等待到相应的PIEACKx清零才向CPU申请中断。PIE通过对PIEACKx的位控制来控制每1组中只有1个中断能被响应,一旦响应后,就需要将PIEACKX相应为清零,以让它能够响应该组中后边过来的中断。

举个例子,如果要使CPU反应INT1.1的中断,
就需要

  • PIEIFR1.1 标志位置1
  • PIEIER1.1 使能位置1
  • PIEACK1 响应标志位清0
  • IFR 全局标志位置1(只对INT1-INT12)
  • IER 全局中断使能置1(只对INT1-INT12)

2.3 中断向量表
由于F28335各个中断源对应的地址是事先就设定好的,我们无法更改,所以中断向量表我们必须要备一张。
在这里插入图片描述

从图中可以看出

  • INT1-INT12每个都对应8个外部中断
  • 总共由96个可响应的资源,有很多富裕的资源

TI公司比较人性化的地方就在于,所有的这些中断他在官方的程序中,通过命名的方式与地址已经对应好的,我们直接用名称就可以了。如下图所示
在这里插入图片描述

2.4 中断配置的简单实例
中断的配置是与PIE模块的响应机制完全对应的。
对外部中断 XINT1进行配置。
第一步:
基础的初始化之后,对PIE模块进行指定,一般在InitPieVectTable();PIE模块初始化之后进行指定。

void main(void)
{
 InitSysCtrl();
 DINT;
 InitPieCtrl();
 IER = 0x0000;
 IFR = 0x0000;
 InitPieVectTable();
 EALLOW;
 PieVectTable.XINT1 = &xint1_isr;
 EDIS;
}

第二步:
打开PIE模块的时钟,经过查询中断向量表知道,外部中断XINT1在使能在INT1.4,打开这个中断使能。

void main(void)
{
 InitSysCtrl();
 DINT;
 InitPieCtrl();
 IER = 0x0000;
 IFR = 0x0000;
 InitPieVectTable();

EALLOW;
PieVectTable.XINT1 = &xint1_isr;   //赋予中断地址
EDIS;
 
IER |= M_INT1;                                   //全局使能INT1
PieCtrlRegs.PIEIER1.bit.INTx4 = 1;     //使能INT1.4
EINT;
ERTM;
 
}

当时我疑惑这个PIEIFR标志位置1去哪里了,其实中断响应的时候它是自动置1的。我们只要开使能使他能够顺利通过就好。
第三步:
就是在我们的中断里面写函数,并在中断里面清楚中断响应标志位PIEACK。

interrupt void xint1_isr(void)
  {
 Xint1Count++;
 GpioDataRegs.GPACLEAR.all = 0x4; 
 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
  }
  • 44
    点赞
  • 177
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
TMS320F28335是德州仪器(TI)推出的一款数字信号处理器(DSP),用于实现各种实时控制和信号处理应用学习DSP需要掌握相关的基本知识和编程技巧。 首先,我们可以通过阅读TMS320F28335的官方文档,即TMS320F28335的PDF手册。该手册详细介绍了DSP的硬件架构、指令集、寄存器和外设等内容。通过仔细阅读和理解手册,我们可以全面掌握DSP的基本结构和工作原理。 其次,我们可以选择一个合适的开发环境,如Code Composer Studio(CCS),这是TI为DSP开发提供的集成开发环境。在CCS中,我们可以创建新的项目并配置编译器和调试器。通过CCS集成的调试功能,我们可以方便地调试和验证自己的DSP程序。 为了更好地学习DSP,我们可以按照以下步骤进行实践: 1.了解DSP的基本概念和数学原理,如离散傅里叶变换(DFT)、离散时间傅里叶变换(DTFT)等。 2.学习DSP的编程语言,如C语言或汇编语言。TI提供了DSP的编程工具包,可以帮助我们编写和调试DSP程序。 3.选择合适的实例或项目来进行实践。可以通过加载预定义的DSP库函数或手动编写代码来实现信号滤波、变换、调制等功能。 4.通过仿真和调试,验证自己的程序是否符合预期。根据调试结果进行修改和改进,直到达到要求。 5.不断学习和积累经验,参考相关的书籍和教程,学习其他高级的DSP算法和应用。 总之,学习DSP需要理论和实践相结合。通过阅读TMS320F28335的官方文档,配置开发环境,学习基本概念和编程语言,进行实践和调试,我们可以逐步掌握DSP的原理和应用

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值