DSP6678 中断程序

中断向量表

中断源的识别标志,可用来形成相应的中断服务程序的入口地址或存放中断服务程序的首地址称为中断向量。在Pc/AT中由硬件产生的中断标识码被称为中断类型号(当然,中断类型号还有其他的产生方法,如指令中直接给出、CPU自动形成等),即在中断响应期间8259A产生的是当前请求中断的最高优先级的中断源的中断类型号。中断类型号和中断向量之间有下面的关系: 中断类型号×4=存放中断向量的首地址 有了存放中断向量的首地址,从该地址开始的4个存储单元中取出的就是中断服务程序的入口。

IER与IFR定义与解释

extern cregister volatile unsigned int IFR的解释
The compiler extends the C/C++ language by adding the cregister keyword to allow high level language access to control registers.When you use the cregister keyword on an object, the compiler compares the name of the object to a list of standard control registers for the C28x (see Table 6-2 ). If the name matches, the compiler generates the code to reference the control register. If the name does not match, the compiler issues an error.

Table 6-2. Valid Control Registers


Register Description


IER Interrupt enable register

IFR Interrupt flag register

大概意思就是:cregister是编译器扩展的C的关键字,用于高级语言C来直接控制寄存器。

当你使用这个关键字定义一个变量时,编译器会把它和表6-2的IER,IFR比较,如果名字相同则把这个变量当做是IER或IFR寄存器的引用,意思就是说编译器内部好像已经定义了IER,IFR的变量,你只需要extern声明一下就可以使用这个变量,编译器就会自动帮你实现它的定义。

当然一般我们操作寄存器都会在前面加上一个volatile关键字。

然后就是告诉你用法,如或与操作来直接操作这个寄存器。

*(*(volatile unsigned int ))详解
使用一个32位处理器,要对一个32位的内存地址进行访问,可以这样定义
#define RAM_ADDR (*(volatile unsigned long *)0x00000000)

然后就可以用C语言对这个内存地址进行读写操作了

读:tmp = RAM_ADDR;

写:RAM_ADDR = 0x55;

volatile的意思是说明这个变量是可能被别的程序或者本程序的其他线程修改的,这样编译器就不能优化它,每次读取都从地址中获取。如果不这样声明的话编译器可以把它缓冲在寄存器中的,这样别的程序修改了它,而寄存器里面的值却是原先的,会发生你不想要的结果。而上面三种情况都是这种可能在本程序或者本线程外被修改的情况,所以要加它。

注意几点:

1.(volatile unsigned long *)0x00000000 说明是一个指针类型,地址在0x00000000

2.在前面加上个*,表示指向这个地址的内容。

3.养成在整体外面再加个括号的习惯。

中断源和中断控制

中断控制器允许将多达128个系统事件编程到12个CPU中断输入(CPUINT4-CPUINT15)、CPU异常输入(EXEP)或高级仿真逻辑中的任何一个。

中断服务序列

中断程序简单梳理

  1. .cmd 文件说明
-c
-heap  0x001000
-stack 0x010000MEMORY
{vectors:      o = 0x0c000000  l = 0x00000200SRAM1:          o = 0x0c000200  l = 0x00032000
}SECTIONS
{vector        >  vectors.text          >  SRAM1.stack         >  SRAM1.bss           >  SRAM1.cio           >  SRAM1.const         >  SRAM1.data          >  SRAM1.switch        >  SRAM1.sysmem        >  SRAM1.far           >  SRAM1.cinit         >  SRAM1.fardata       >  SRAM1.rodata        >  SRAM1.neardata      >  SRAM1
}

MEMORY
vectors 中 o是中断服务表中的基地址部分,l是中断服务表的基地址长度。
同理,SRAM中的o,l表示也是一样的。
SECTIONS
表示代码中的各个部分是分别存储在vectors中还是存储在SRAM1中。

  1. main.c文件中
    (1)
/******************Timer中断配置***************************************************/Interrupt_Service_Table(0x0c000000);C6678_Int_GlobalEnable(4);C6678_Int_GlobalEnable(5);C6678_Int_GlobalEnable(6);C6678_Int_GlobalEnable(7);C6678_CoreInt_Set(64,4);C6678_CoreInt_Set(66,5);C6678_CoreInt_Set(68,6);C6678_CoreInt_Set(70,7);

Interrupt_Service_Table函数是中断向量表函数,其功能就是对中断向量表进行设置,将基地址传给ISTP寄存器。

C6678_Int_GlobalEnable (7) 使能中断寄存器

C6678_CoreInt_Set(64,4); 将中断寄存器与相应的中断事件进行绑定,中断事件号需要根据手册来进行查看,本次经过查看手册得到的,本次事件号64正好对应一个计时器

(2)

 Timer_Config(DNUM,(long long)TIMER_1MS_CLK,1,0);Timer_Out_Config(DNUM,1);Timer_Start(DNUM);

定时器设置程序
Timer_Config程序用于对计时器进行设置,包括选择对应的计时器,定时器周期,计数模式:循环计数或单次计数,计时器模式:64位定时器还是32位定时器。
Timer_Out_Config(DNUM,1);定时器输出模式:时钟输出还是脉冲输出。
Timer_Start(DNUM);启动计时器,开始计时。

DSP6678 中断程序相关推荐

  1. [转]解决STM32开启定时器时立即进入一次中断程序问题

    [转]解决STM32开启定时器时立即进入一次中断程序问题 参考文章: (1)[转]解决STM32开启定时器时立即进入一次中断程序问题 (2)https://www.cnblogs.com/tubuji ...

  2. 子程序与中断程序的异同_专业解读PLC编程中断的原理和用法

    plc这样理解中断功能,在理解中断时,首先要清楚plc的运算周期或者说是扫描周期,有必要说下plc顺控循环执行的流程,这是理解中断的前提,必须要掌握,分为三部分,输入处理.程序处理.输出处理. 1.输 ...

  3. 子程序与中断程序的异同_【干货】plc怎样理解中断功能,其作用是什么?

    plc怎样理解中断功能: 在理解plc中断时,你首先要清楚plc的运算周期或者说是扫描周期.我们有必要说下plc顺控循环执行的流程,这是理解中断的前提,必须要掌握. 分为三部分:输入处理.程序处理.输 ...

  4. 51单片机外部中断实验 设置中断优先级寄存器,当有外部中断0请求中断时,中断程序执行发光二极管程序,在此过程中,外部中断1也有中断请求,外部中断0的中断程序将被中断去执行外部中断1的中断程序(数码管

    设置中断优先级寄存器,当有外部中断0请求中断时,中断程序执行发光二极管程序,在此过程中,外部中断1也有中断请求,外部中断0的中断程序将被中断去执行外部中断1的中断程序(数码管加1显示程序). #inc ...

  5. 中断程序_91工控ABB机器人中断程序(陷阱程序)TRAP

    1. 在做ABB机器人相关项目时,都会用到中断程序. 2. 什么是中断程序?中断程序的作用? 注1:实时监控某种条件的状态,受某种条件触发时程序指针立即进入该程序. 注2:用于实时监控某个条件的状态, ...

  6. 中断程序_ABB机器人中断程序详解(安川FANUC)

    ABB机器人中断程序详解 1.新建一个中断程序 test001,类型中断 TRAP hanmianshadiaoliao StopMove; SetDO DO04, 0; !Stop; StartMo ...

  7. 子程序与中断程序的异同_西门子200samrt高速计数器指令向导及程序

    在 Micro/WIN SMART 中的命令菜单中选择 Tools(工具)> Wizards(向导)中选择 High Speed Counter(高速计数器向导) ,也可以在项目树中选择 Wiz ...

  8. 实现一个输入程序,接收从 键盘读入的字符串。当字符串中所含字符个数少于程序设定的上限时,输出这个字符串;否则抛出MyStringException1异常,在异常处理中要求重新输入新的字符串或者中断程序

    实现一个输入程序,接收从 键盘读入的字符串.当字符串中所含字符个数少于程序设定的上限时,输出这个字符串:否则抛出MyStringException1异常,在异常处理中要求重新输入新的字符串或者中断程序 ...

  9. 在linux中,强行中断程序 kill命令

    今天在linux下,停止tomcat,无法停止,于是强制结束进程. linux下直接中断程序 (如同windows下使用任务管理器,直接停止某个程序) 1.获取pid    (PID(进程控制符)英文 ...

  10. 贺利坚老师汇编课程66笔记:自定义除法中断学习如何编制中断程序

    指路老师的博客 CPU随时可能检测中断信息,所以中断程序常驻内存(一直存储在内存的某段空间中) 中断处理程序的入口地址,即中断向量,必须存储在中断向量表的表项中 (0000:0000 - 0000:0 ...

最新文章

  1. 专家访谈:为什么我们需要Erlang
  2. 智能连接:5G与人工智能、物联网等技术的超级融合
  3. 3.4.1 流量控制与可靠传输机制
  4. 如何让mysql的自动递增的字段重新从1开始呢?(
  5. 【译】How I hacked Google’s bug tracking system itself for $15,600 in bounties
  6. 转--javascript 数组
  7. 创龙28377d历程_C28x系列的28069、28377D的PWM使用经验
  8. git修改commit注释_【Slog】Git之多人同feature的同分支开发
  9. BZOJ 4154 kd-tree dfs序 + 二维空间的区间(矩阵)更新单点查找
  10. android_handler(三)
  11. python3中字符编码转换
  12. css 六角形_创建数字六角形瓷砖图(第1部分)
  13. [总结] 上海看房体验有感
  14. Redis底层数据结构——跳跃列表
  15. percentile_approx函数
  16. 64位 Fedora 11 硬盘安装 配置全解
  17. 用python做一个表白软件手机版_用python写一个5.20的表白小程序吧
  18. SpringBoot POI导出Excel
  19. C++ COM组件的编写
  20. Windows系统精华

热门文章

  1. 【ADMM】ADMM Gap
  2. 【C语言】模块化编程-通俗易懂
  3. 华硕h410csm怎么开启_华硕主板怎么开启uefi模式?华硕主板BIOS开启uefi模式详细方法...
  4. 分享hm77芯片组bios工具 联想m490添加inter7265ac 白名单bios
  5. 小米手机测试代码电池测试代码
  6. trnsys and matlab 联合仿真常见错误解决方案
  7. 对线性系统用matlab进行仿真,基于线性系统稳定性分析及MATLAB仿真与应用[1]
  8. Halcon教程十二:回形针识别进阶
  9. 电视盒子刷鸿蒙系统,家里的智能电视能装鸿蒙系统吗?鸿蒙系统有哪些优势?...
  10. SOP24/SSOP24低功耗LCD驱动芯片VK1056B规格书下载