Learning ADSP-TS201系列--Interrupt Pin
原创作品,转载请注明原作者及地址!
by 飞鸿惊雪
http://blog.csdn.net/niyufeng
Learning ADSP-TS201系列--索引
1 Learning ADSP-TS201系列--重要参考
2 Learning ADSP-TS201系列--EZ-KIT Lite评估板硬件资源
3 Learning ADSP-TS201系列--Flag Pins按键和LED灯
4 Learning ADSP-TS201系列--Interrupt Pin
Learning ADSP-TS201系列--Interrupt Pin
上一篇截图中还有另外的两个按键SW4和SW5,这两个按键涉及到中断,本篇就讲这个最简单的中断Interrupt Pin(IRQ0),后续再尝试其他的中断,例如timer定时计数器,DMA中断,LinkPort中断。。。
1 电路中的Interrupt Pin
ADSP-TS201 EZ-KIT Lite评估板上每片DSP含有4个外部中断(IRQ3–0 ),其中IRQ0接到了一个按键上(SW4和SW5)。
当按键按下时,表现为低电平(可采用高低电平触发中断的模式)。
2 Interrupt Pin的寄存器
涉及到中断的主要有以下这几个寄存器:ILAT,IMASK,PMASK,以及SQCTL下的GIE位控制全局中断,和INTCTL控制IRQ3-0的触发方式、TIME1-0的启动。
ILAT,IMASK,PMASK这三者“相与”指明了正在执行的中断为哪一个。
ILAT:中断锁存寄存器,只要发生中断相应位置1;
IMASK:中断屏蔽寄存器,只有置1才允许响应相应的中断;
PMASK:锁存正在执行的中断,如果允许中断嵌套,只有在高于目前PMASK位的中断才可以响应。
2.1 ILAT IMASK PMASK (H)寄存器
我们本次要试验的IRQ0就在(H)寄存器中!
2.2 ILAT IMASK PMASK (L)寄存器
2.3 INTCTL寄存器
INTCTL控制IRQ3-0的触发方式、TIME1-0的启动。
2.4 SQCTL寄存器
SQCTL下的SQCTL_GIE位控制全局中断。
SQCTL还有两个别名SQCTLST和SQCTLCL。
和一般的单片机如MCS-51,MSP430,以及ARM处理器相比,DSP的中断很独特。
它的中断向量表是有专门的寄存器组来存储,而非像ARM处理、单片机那样放在存储器中,更不需要ARM那样复杂的地址映射之类操作。
3 中断服务程序
第一种在C中定义中断服务程序的方法:
1 首先编写一个C函数,返回值和参数都是void;
void irq0_isr(void){...}
2 将#pragma interrupt放在这个函数前面,定义这个函数为不可重入的中断服务;
#pragma interruptvoid irq0_isr(void){...}
3 在main中通过__builtin_sysreg_write将服务程序的函数指针放入中断向量表中,例如IRQ0的服务程序为irq0_isr,则:
__builtin_sysreg_write(__IVIRQ0, (int)irq0_isr);
第二种在C中定义中断服务程序的方法:
1 首先编写一个C函数,返回值是void(无返回),有一个参数int型;
void isr_irq0(int signal){...}
2 不需将#pragma interrupt放在这个函数前面!
3 添加#include<signal.h>头文件(其中包含了SIGIRQ0等各种中断信号的定义),在main中通过interrupt系列函数将服务程序的函数指针放入中断向量表中,例如IRQ0的服务程序为isr_irq0,则:
interrupt(SIGIRQ0, isr_irq0);
4 编程实验
#include<stdio.h>
#include<builtins.h>
#include<sysreg.h>
#include<defts201.h>#include<signal.h>void isr_irq0(int dummy);int main( void )
{//将FLAG2设为输出模式__builtin_sysreg_write(__FLAGREGST,FLAGREG_FLAG2_EN);//允许外部IRQ0int imaskh=0;imaskh = __builtin_sysreg_read(__IMASKH);imaskh |= (1<<INT_IRQ0_P);__builtin_sysreg_write(__IMASKH, imaskh);//设置IRQ0中断服务程序interrupt(SIGIRQ0, isr_irq0);//设置跳沿触发__builtin_sysreg_write(__INTCTL,0);//开全局中断使能__builtin_sysreg_write(__SQCTLST, SQCTL_GIE);while(1);}void isr_irq0(int signal)
{static int button=0;//按键按下进入本中断服务,每次都反转下button状态button = !button;if(0==button){__builtin_sysreg_write(__FLAGREGCL,~FLAGREG_FLAG2_OUT);} else {__builtin_sysreg_write(__FLAGREGST,FLAGREG_FLAG2_OUT);}}
对比上一个中断程序的写法,再列出另一中中断服务完整程序。
#include<stdio.h>
#include<builtins.h>
#include<sysreg.h>
#include<defts201.h> void irq0_isr(void);int main( void )
{int v;//将FLAG2设为输出模式__builtin_sysreg_write(__FLAGREGST,FLAGREG_FLAG2_EN);//设置IRQ0服务程序__builtin_sysreg_write(__IVIRQ0,(int)irq0_isr);//设置跳沿触发__builtin_sysreg_write(__INTCTL,0);//允许外部IRQ0v=__builtin_sysreg_read(__IMASKH);v|=(1<<INT_IRQ0_P);__builtin_sysreg_write(__IMASKH,v);//开全局中断使能__builtin_sysreg_write(__SQCTLST,SQCTL_GIE);while(1);}#pragma interrupt
void irq0_isr(void)
{static int button=0;button=!button;if(0==button){__builtin_sysreg_write(__FLAGREGCL,~FLAGREG_FLAG2_OUT);} else {__builtin_sysreg_write(__FLAGREGST,FLAGREG_FLAG2_OUT);}}
ADSP-TS201 EZ-KIT Lite评估板上面有两个DSP处理器A和B。Emulator仿真时,如果不定义LDF链接文件,默认使用DSP_B。
最右边的两个LDE和3个Button按键就是DSP_B的,注意看右起第二个LED,可以使用按钮进行亮灭的控制。
Learning ADSP-TS201系列--Interrupt Pin相关推荐
- NXP iMX8系列处理器Pin Multiplexing定义说明
By Toradex秦海 1). 简介 为了提高处理器的设计灵活性和可用性,NXP的所有i.MX系列处理器都配备了基于 IOMUX Controller (IOMUXC)和IOMUX来使能Pin Mu ...
- Reinforcement Learning强化学习系列之二:MC prediction
引言 这几个月一直在忙找工作和毕业论文的事情,博客搁置了一段时间,现在稍微有点空闲时间,又啃起了强化学习的东西,今天主要介绍的是强化学习的免模型学习free-model learning中的最基础的部 ...
- BAT资深算法工程师「Deep Learning」读书系列分享(一) | 分享总结
本文转载自:https://www.leiphone.com/news/201708/LEBNjZzvm0Q3Ipp0.html 雷锋网 AI 科技评论按:「Deep Learning」这本书是机器学 ...
- Learning to Rank系列之概述
背景 排序问题是信息检索.新闻推荐.自然语言处理等领域中一个非常热门的研究问题.以google搜索为例,比如你在搜索框内输入"machine learning",回车之后googl ...
- Learning by doing 系列文章(之一)如何在 Python 中使用 epoll ?
epoll 简介 参见本博前一文<epoll使用详解> Epoll Within Python Python 在 2.6 版中引入了用于处理Linux epoll系统调用的API,本文简单 ...
- 机器学习(MACHINE LEARNING)MathWorks系列教程
文章目录 1 .m文件和 .mat文件的区别 1.1 性质不同 1.2 调用不同 2 format函数 3 .*的区别 4 绘图案例 5 导入工具 6 逻辑索引 7 恒星运动 8 loglog 9 摘 ...
- Learning to Rank系列之Pointwise方法
上一篇综述文章 里我们简单介绍了L2R三种方法的一个概要,接下来将对这三种方法做详细介绍.本篇文章介绍第一种L2R方法–pointwise方法 1.原理 pointwise方法非常简单,考虑的是文档 ...
- Deep Learning(深度学习)学习笔记整理系列之(五)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- Deep Learning(深度学习)学习笔记整理系列之(二)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
最新文章
- 解决递归中的重复计算问题
- nth-of-type(n)
- Linux系统信息与系统资源
- 使用Lambda的装饰设计模式
- 图像风格转换V3算法
- Tomcat 改BUG之 localhost:8080 404
- 比赛中学习(2)-voc数据集制作中将.txt文件变为.xml文件
- k8s之PodIP、ClusterIP和ExternalIP
- 2021下半年最新编程培训机构排名出炉!
- macOS 终端打开提示:zsh compinit: insecure directories
- Java进阶-requestresponse (十一)
- 英语单词记忆测试软件,适用于检查学生英语单词背诵情况的软件
- CBitmap Detach和DeleteObject的关系
- 全球数字高程数据:ASTER GDEM
- 最小二乘擬合matlab,存在已知协方差情况下的最小二乘解
- codeblocks20版本无法找到编译器的解决方法!
- 销售宝:ERP软件系统对于企业有什么帮助?
- 以开发之名|斗罗大陆:创造一个尽情探险的开放式游戏世界
- mysql meb_mysql meb备份与恢复
- 同质图,异质图以及属性图
热门文章
- BZOJ4808马——二分图最大独立集
- 服务器运维浏览器,本机浏览器如何访问docker容器的内容_网站服务器运行维护,浏览器,docker...
- SpringBoot 使用Phoenix操作HBase数据库教程
- 页面实时显示当前时间
- java-实现桌面壁纸自动切换(有界面,可还以自己设置时间的那种哦)
- 2021-2027全球与中国电动汽车电子水泵市场现状及未来发展趋势
- 怎么下载2.5维虚拟城市地图
- 英语学习利器,后悔后知后觉了--------------------韦氏三宝
- QQ空间迁移_【群晖NAS+FRP_并获取用户真实IP 支持群辉6.0和群辉7.0】
- B2B2C分布式微服务电商源码(支持:小程序、公众号、H5、IOS、Android)