DSP_TMS320F28335_PIE学习笔记

news2024/11/14 14:14:52

前言

本文重点探讨DSP PIE模块的学习笔记,由于学这部内容的时候,是用28335学的,所以标题是用的28335,但其实28377D和28335的PIE使用基本上是一样的,也是可以借鉴的。

正文

原理

讲点原理,PIE,peripheral interrupt expansion,外设中断扩展模块

TMS320F28335内部有16个中断线,其中包括2个不可屏蔽中断(RESET和NMI)与14个可屏蔽中断,可屏蔽中断通过相应的中断使能寄存器可以使能或者禁止产生的中断

外部中断源→DSP芯片IO引脚上的电平变化触发中断

内部中断源→DSP内部CPU和各个外设模块产生的中断比如ADC、PWM、SCI、SPI等等模块产生的中断

DSP比作人,外部中断就是相当于手被割伤的疼痛,内部中断就是相当于肚子痛

在2833x处理器中,定时器1和定时器2预留给实时操作系统使用,其中断分配给INT13和INT14,两个不可屏蔽的中断RESET和NMI各自占用独立的专用专断,同时NMI中断也可以选择同定时器1复用INT13,其余12个可屏蔽中断直接连接在外设中断扩展模块 (也就是PIE模块),供外部中断和处理器内部外设单元使用。

问题:28335内部有那么多的外设(PWM、SCI、ADC等等),这些外设又有自己的中断,并且中断还很多个,那么剩余12个中断怎么能够够用呢?

为了解决这个问题,就引入了PIE模块,可以管理多路中断,最后分配到12个核中断上面

看懂这个图,基本上就能把PIE的原理明白的差不多了。

(IFR是interrupt flag register,IER是interrupt enable register,28335参考手册的pg139) 

我们可以把这个图的上下分成两级(LEVEL), 上面的CPU LEVEL总公司,下面是PIE LEVEL分公司。

 首先来看这个INTx.1 ~ INTx.8, 这个x它可以是1~12。 比如我是INT2.2或者INT2.3。 我的中断信号最终就会送到INT2这里来。

 下面举例 中断INT2.2如何才能传递到CPU,看懂这个例子,PIE的原理你的学会了。

INT2.2产生之后,PIEIFR2.2(PIE interrupt flag register PIE中断标志寄存器)这里的开关会直接闭合

然后,中断信号会传递到PIEIER2.2(PIEIER是PIE interrupt enable register,PIE中断使能寄存器),如果想让INT2.2信号继续传递,那这里需要配置 PieCtrlRegs.PIEIER2.bit.INTx2   = 1;那这个时候,第二个开关闭合。

接下来信号会传递到左下角的与门这里,与门上支路是直接导通的,如果想让INT2.2信号继续传递,下面PIEACK2需要为0才行,因为前面还有一个取反。PIEACK2默认应该是0(换句话说就是第一次中断能够直接从与门这里过去),但是每次执行了中断之后,对应的PIEACK就会被置1,如果想要INT2.2每次都能把信号传递到CPU,那么在中断处理函数,就需要把PIEACK2清零。即

interrupt void INT2.2_ISR(void){

    // do something

    PieCtrlRegs.PIEACK.all = PIEACK_GROUP2;

}

如果保持PIEACK2为零,信号就会通过与门

 此时INT2.2信号已经从PIE LEVEL传递到了CPU LEVEL了, 信号会传到IFR2(interrupt flag register 中断标志寄存器)这里。这个开关也会直接闭合。

然后中断信号会进一步传递到IER2这里(interrupt enable register,中断使能寄存器),如果想让INT2.2信号继续传递,那这里需要配置 IER |= M_INT2;这时候, CPU LEVEL的第二个开关闭合。 

当INT2.2的信号通过了IER2的开关之后,最后就来到了 Global Enable开关这里了。我们最后只需要把中断的全局使能开关打开:

EINT;  // 使能全局中断  

所有的开关都闭合了。最终就能使得INT2.2的信号传递到CPU里面。

 

当然,另外值得一提的是PIE模块整体有个使能,也得打开,PIE模块如果都不工作,INT2.2肯定到不了CPU这里。

PieCtrlRegs.PIECTRL.bit.ENPIE = 1;

那么我们怎么知道我这个外设的中断对应的是INT几点几呢? 28335请看参考手册的pg149。

28377D请看参考手册的pg102。

 代码

下面我与28377D的INT1.1为例,写一个PIE中断配置的参考代码,关于ADCa的其他配置部分,请到我讲ADC的博客去看哈。

void main(void)
{
	InitSysCtrl();
    DINT;    // 先关闭全局中断使能,等配置完了所有的外设,再打开全局中断使能
    InitPieCtrl();
    InitGpio();
    IER     = 0x0000;
    IFR     = 0x0000;
    InitPieVectTable();
    // 👆前面这些默认初始化函数也很关键哈

    // ADC
    EALLOW;     // 设置中断入口函数
        PieVectTable.ADCA1_INT = &ADCaHandler;
    EDIS;

    PieCtrlRegs.PIEIER1.bit.INTx1   = 1;    //  Enable PIE Level interrupt

    IER |= M_INT1;                          //  Enable CPU Level interrupt

    PieCtrlRegs.PIECTRL.bit.ENPIE = 1; 	    // PIE模块使能
    EINT;  									// 全局中断使能
    while(1){;}
}

interrupt void ADCaHandler(void){
    // do something
    PieCtrlRegs.PIEACK.all  = PIEACK_GROUP1;
}

 

 愿我们共同进步! 感谢您的阅读,欢迎留言讨论、收藏、点赞、分享。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/383959.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux minio更改密码MINIO_ACCESS_KEY报错

minio版本RELEASE.2020-11-13T20-10-18Z启动文件配置如下cat run.sh#!/bin/bashexport MINIO_ACCESS_KEYminioexport MINIO_SECRET_KEYfasffnohup /opt/minio/minio.RELEASE.2020-11-13T20-10-18Z server http://192.168.100.x/data/minio_data http://192.168.100.x/data/mini…

Docker中对已存在运行的容器修改端口映射

一、初次创建容器,指定宿主机和容器端口的映射,如下示例: docker run -itd -p 11935:1935 -p 11985:1985 -p 18080:8080 -p 20903:20903 -p 18888:8888 \ --restartalways \ -v /srv/srs3/conf/:/usr/local/srs/conf/ \ -v /srv/srs3/objs/:…

Android总结汇总

一、APP1、混合开发项目AHP地址:https://github.com/Witnin/AHP简介:KotlinJava二、路由框架1、集成ARouter导航框架官网地址(停止维护):https://github.com/alibaba/ARouter/blob/master/README_CN.mdjadepeakpoet&am…

Leedcode 1011. 在 D 天内送达包裹的能力

题目 传送带上的包裹必须在 days 天内从一个港口运送到另一个港口。 传送带上的第 i 个包裹的重量为 weights[i]。每一天,我们都会按给出重量(weights)的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。 返回能在 day…

利用DSCync进行域内权限维持

一个域环境可以拥有多台域控制器,每台域控制器各自存储着一份所在域的活动目录的可写副本,对目录的任何修改都可以从源域控制器同步到本域、域树或域林中的其他域控制器上。当一个域控想从另一个域控获取域数据更新时,客户端域控会向服务端域…

【Echarts图例点击事件】自定义Echarts图例legend点击事件(已解决)

目录先睹为快(效果)1、实现Echarts多条曲线2、点击echarts触发接口请求2.1 先默认隐藏部分数据2.2 自定义legend图例点击事件3、源码下载地址(解压即用)**【写在前面】**这下我又不得不说了,还是客户现场使用时想查询一…

宽度学习系统BLS推广到在线学习的论文阅读记录

BELS: A BROAD ENSEMBLE LEARNING SYSTEM FOR DATA STREAM CLASSIFICATION 摘要:这篇文章主要是将BLS推广到适用于在线学习的邻域,提出了其如何进行适合在线学习的增量更新,以及面对概念漂移的适应 所提出的算法BELS 稀疏特征映射的更新 …

【牛客网刷题记录】,后面遇到的一些问题都会在这里记录,欢迎大家批评指正

文章目录数据结构篇数组字符串链表树图堆算法篇哈希查找排序数据库篇SQL语言篇数据结构篇 数组 省流: 计算二维数组指定元素的位置压缩矩阵 1. 执行以下代码段(程序已包含所有必需的头文件)会输出什么结果。 char a[] "abcd", b[10] "abcd"…

被围绕的区域

题目链接 leetcode——在线链接 题目描述 给你一个 m x n 的矩阵 board ,由若干字符 ‘X’ 和 ‘O’ ,找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。 题目示例 输入:board [[“X”,“X”,“X”,…

德标1.4571合金元素钛的影响

1.45711.4571介绍:1.4571在316的基础上加入了钛,为解决316晶间腐蚀发展起来的钢种,有良好的耐晶间腐蚀性能,在稀H2SO4、H3PO4及有机酸和海洋大气中耐蚀性能有所提高。其它性能和316相近。◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆…

【项目实战】为什么我选择使用CloseableHttpClient,而不是HttpClient,他们俩有什么区别?

一、HttpClient介绍 HttpClient是Commons HttpClient的老版本,已被抛弃,不推荐使用; HttpClient是一个接口,定义了客户端HTTP协议的操作方法。 它可以用于发送HTTP请求和接收HTTP响应。 HttpClient接口提供了很多方法来定制请求…

RK3288-android8-IR-选不中小窗口

IR红外功能,多么基础的功能,但是说来也不简单 因为,小小的红外看似基础,实则设计太多东西了, 从关机涉及Uboot;到内核kernel键码上报;到android键码的实现,小小的功能涉及大大的范围; (101条消息) rk3288-android8-IR-mouse_旋风旋风的博客-CSDN博客 大家可以看一下我之前的…

考研复试——数据结构

文章目录数据结构什么是数据结构?逻辑结构和物理结构有什么区别?为什么对单链表设置头结点?算法的特点?常见的数据结构有哪些?栈在后缀表达式求值的算法思想:队列溢出现象?解决方法?…

【项目精选】基于Java的超级玛丽游戏的设计与实现(源码+论文+视频)

点击下载源码 超级玛丽小游戏的JAVA程序,进入游戏后首先按空格键开始,利用方向键来控制的马里奥的移动,同时检测马里奥与场景中的障碍物和敌人的碰撞,并判断马里奥的可移动性和马里奥的生命值。当马里奥通过最后一个场景后游戏结束…

项目经理如何管理好自己的时间

由于项目各种不定因素的存在,有时侯我们看到有些项目经理虽然成天忙得焦头烂额,但绩效甚微也就不足为怪了,如何能让宝贵的时间花在“刀刃”上,抓住了问题的要害,才能使工作事半功倍。 1、做好工作计划 项目经理比较擅…

目前已经有80多万个数据库迁移到了亚马逊云科技上

Gartner是全球最具权威的IT研究公司,在IT研究领域可以说是无人不知、无人不晓。它每年都会发布各种IT产业评测报告,分析未来技术发展,帮助客户进行市场分析、技术选择、投资决策。最近看到Gartner发布的云数据库魔力象限报告,这也…

安装包UI美化之路-nsNiuniuSkin安装包模板介绍

今天这篇文章,咱们不做功能讲解了,来介绍一下nsNiuniuSkin的几套安装包模板的UI效果和设计理念! 前言 经常有朋友会问,nsNiuniuSkin的几套模板都有些什么区别呀,我拿到模板后,如果要换成我们自己的UI方便…

Java on VS Code 2月更新|JUnit 5 并行测试与 Spring Boot 插件的过滤功能

作者:Nick Zhu - Senior Program Manager, Developer Division at Microsoft 排版:Alan Wang 大家好,欢迎来到我们的二月更新!在此博客中,我们将为您带来与 JUnit 5 并行测试相关的新功能以及用于 Spring Boot Dashboa…

【java基础】万字说明,一篇文章彻底搞懂java中的lambda表达式

文章目录lambda表达式是什么lambda表达式的语法函数式接口初次使用深入理解方法引用 :: 用法快速入门不同形式的::情况1 object::instanceMethod情况2 Class::instanceMethod情况3 Class::staticMethod对于 :: 的一些示例及其注意事项构造器引用变量作用域使用外部变量定义内部…

华为机试题:HJ96 表示数字(python)

文章目录(1)题目描述(2)Python3实现(3)知识点详解1、input():获取控制台(任意形式)的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方…