在基于OSEck RTOS的TI DSP中,中断能够作为一个进程存在,在OSEck系统中,进程分为两类:优先级进程,中断进程。

当可屏蔽中断(INT4~15)发生后,就会运行相应的中断vector,在vector的代码中会找到注冊在该中断号上的进程,然后由OSEck负责调度,进而切换到可屏蔽中断进程。该中断进程与优先级进程类似,相同有PCB(进程控制块),而在odo_vect2pcb数组中就存储了可屏蔽中断号(INT4~15)与中断进程PCB的映射(这就是vect2pcb的含义)。odo_vect2pcb数组的索引作为中断号,索引相应的数组的值存储PCB指针。

比如,能够将TI DSP corePac的INTC模块中的eventCombiner的输出event0~3的中断服务程序创建为中断进程。如能够将event0绑定在INT5中断上,这样INT5中断发生后就会运行_vector5。然后通过以下的汇编代码odo_vect2pcb+vec_number*4找到event0相应的中断进程的PCB指针,OSEck就会切换到该进程运行。这里PCB结构中有个变量指示了进程的入口点,入口点就是event0的中断服务程序,每次中断发生后。切换到中断进程后,就会从该入口点处開始运行。

odo_vect2pcb[0~15] = {NULL,pcb1,...,pcb15};

INT0相应RESET。应该不须要设置中断进程。

 .sect	".vectors"
;RESET中断的vector。 __vector0:
.nocmp
BNOP CheckFunc, 5
.align 32 ;vector1是用于NMI/Exception处理的。
__vector1:
.nocmp
;把栈指针B15的值写到GPLYB寄存器,注意,这里牺牲了GPLYB寄存器的值,来保存B15的值,B15中存储的是跳转到vector1之前的进程的栈指针,所以要保存起来。
MVC B15, GPLYB
;把事先准备好的exception的栈指针赋值给B15(栈指针,当执行某进程时。B15就指向进程的栈),这样在处理exception时,就会用特定的分配好的栈 exceptionErrorStackPtr。
MVKL exceptionErrorStackPtr, B15
MVKH exceptionErrorStackPtr, B15
LDW *B15[0], B15
;跳转到检查错误的函数运行,BNOP checkErrorFunc 5指令等同于B checkErrorFunc, NOP 5。
BNOP checkErrorFunc, 5 ;默认的vector2~15的实现。用".macro"宏来实现。 vector_macro .macro vec_num
.align 32
__vector:vec_num::
STW B11,*B15-- ;将B11的值保存在栈中(B15)。
||MVKL handlerFunc,B11 ;||表示本条指令与上一条指令是并行运行的。仅仅占一个cycle的时间。
MVKH handlerFunc,B11
;跳转到handlerFunc函数,由于B指令有5个cycle的延迟,且本BNOP指令中已包括了1个NOP,所以用户能够在剩余的4个cycle中加四条指令运行。如以下的四条指令,这些指令运行完后,将真正切换到handlerFunc函数运行。
BNOP B11,1
STW A11,*B15--
STW A10,*B15--
MVKL odo_vect2pcb+vec_number*4,A11 ;这样A11中保存了中断进程的pcb(进程控制块)指针
MVKH odo_vect2pcb+vec_number*4,A11
.endm vector_macro 2
vector_macro 3
vector_macro 4
vector_macro 5
vector_macro 6
vector_macro 7
vector_macro 8
vector_macro 9
vector_macro 10
vector_macro 11
vector_macro 12
vector_macro 13
vector_macro 14
vector_macro 15

最新文章

  1. 转载:《TypeScript 中文入门教程》 12、类型推导
  2. Python GIL 多线程机制 (C source code)
  3. Spring中加载xml配置文件的六种方式
  4. git 学习笔记3--status flow
  5. JMeter笔记4:测试结果-聚合报告的字段说明
  6. R语言字符串函数
  7. Spring MVC Controller配置方式
  8. Scala中class和object的区别
  9. MVC数据提交
  10. 我的Python成长之路---第一天---Python基础(1)---2015年12月26日(雾霾)
  11. JBPM——MyEclipse开发环境的搭建
  12. java 导出excel(简单案例)
  13. ../../../../.. 太low了
  14. OI暑假集训游记
  15. 【原创】Java基础之常用JVM工具
  16. Markdown使用小总结[不定时更新]
  17. FineUIMvc v1.4.0 发布了(ASP.NET MVC控件库)!
  18. 理解git工作区和暂存区
  19. 2.DI依赖注入
  20. 福州大学软件工程1816 | W班 作业成绩排名汇总

热门文章

  1. vue学习:解决Apycharm的 * is only available in ES6(use 'esversion: 6') 问题
  2. ADO:DataSet合并两张表( ds.Merge(ds1))
  3. python作为计算器(数学用法)
  4. Linux内核解析:进程间通信:管道
  5. declaration specifier, declarator, type specifier
  6. HRBUST 2078:糖果(模拟,贪心)
  7. CentOS配置sshd
  8. logging模块详解以及常见代码
  9. Silverlight 离线安装包
  10. Android:MVC模式(上)