dsp中断优先级设置

上传人:简****9 文档编号:107231211 上传时间:2019-10-18 格式:DOC 页数:2 大小:29.50KB
返回 下载 相关 举报
dsp中断优先级设置_第1页
第1页 / 共2页
dsp中断优先级设置_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

《dsp中断优先级设置》由会员分享,可在线阅读,更多相关《dsp中断优先级设置(2页珍藏版)》请在金锄头文库上搜索。

1、原以为2812中断不能设置优先级。实际上硬件上优先级是做好的。但软件上有办法来设置优先级。请往下看:1.首先要找到文件,DSP281x_SWPrioritizedDefaultIsr.c 和DSP281x_SWPrioritizedIsrLevels.h加载到你的程序当中。2.在DSP281x_SWPrioritizedIsrLevels.h文件中先设置中断组的优先级级别。其中:0表示不使用;1表示优先级最高中;16表示优先级最低;比如:我设置第9组优先级最高,第3组次之,第2,4,6组优先级为第三。其他以此类推。0表示不用。 #define INT1PL 4 / Group1 Interru

2、pts (PIEIER1) #define INT2PL 3 / Group2 Interrupts (PIEIER2) #define INT3PL 2 / Group3 Interrupts (PIEIER3) #define INT4PL 3 / Group4 Interrupts (PIEIER4) #define INT5PL 4 / Group5 Interrupts (PIEIER5) #define INT6PL 3 / Group6 Interrupts (PIEIER6) #define INT7PL 0 / reserved #define INT8PL 0 / rese

3、rved #define INT9PL 1 / Group9 Interrupts (PIEIER9) #define INT10PL 0 / reserved #define INT11PL 0 / reserved #define INT12PL 0 / reserved #define INT13PL 5 / XINT3 #define INT14PL 5 / INT14 (TINT2) #define INT15PL 5 / DATALOG #define INT16PL 5 / RTOSINT3.级中断设置好以后,我们就要设置每一组里的中断优先级级别。其中:0表示不用;1表示优先级最

4、高;8表示优先级最低;以第9组为例说明:其中,ECAN0INTA优先级最高;ECAN1INTA为第2,SCIRXINTA为第3。其他自己数。 #define G91PL 3 / SCIRXINTA (SCI-A) #define G92PL 5 / SCITXINTA (SCI-A) #define G93PL 6 / SCIRXINTB (SCI-B) #define G94PL 4 / SCITXINTB (SCI-B) #define G95PL 1 / ECAN0INTA (ECAN-A) #define G96PL 2 / ECAN1INTA (ECAN-A) #define G97

5、PL 0 / reserved #define G98PL 0 / reserved4.由上可知所有组里第9组优先级最高,第9组中ECAN0INTA(G95PL)优先级最高。优先级设置好后到 DSP281x_SWPrioritizedDefaultIsr.c文件中找到相应的函数。我这里就拿ECAN0INTA(ECAN-A)来作为例子说明;这个中断对应的函数为(DSP281x_SWPrioritizedDefaultIsr.c 文件里可以找到)如下:/-/ eCAN-A Default ISRs: / Connected to PIEIER9_5 (use MINT9 and MG95 mask

6、s):#if (G95PL != 0)interrupt void ECAN0INTA_ISR(void)/ eCAN-A / Set interrupt priority: volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; /* 以下表示,大于第9组中断级别的中断使能,小于第9组中断级别的中断不使能*/ IER |= M_INT9; IER &= MINT / Set global priority /*优先级大于第9组中第5个中断的中断使能,否则不使能*/ PieCtrlRegs.PIEIER9.all &= MG95; / Set

7、 grouppriority PieCtrlRegs.PIEACK.all = 0xFFFF; / Enable PIE interrupts EINT; /全局中断使能,但因为此中断优先级最高,所以其他一般中断不能打断它 / Insert ISR Code here. CAN_ISR(); /你自己定义的中断处理程序,在此程序中写你自己的代码; / Next line for debug only (remove after inserting ISR Code): /ESTOP0; /仿真停止,仿真时可以用。 / Restore registers saved: DINT; /关中断 PieCtrlRegs.PIEIER9.all = TempPIEIER; #endif其他中断的设置以此为例,只要在.h文件中设置好优先级,再将你自己的中断处理代码插入相应的中断函数即可。此时你就可以实现高优先级可以打断低优先级的中断。而且也可以中断嵌套。如果不想低优先级的程序不想被打断则不允许EINT即可。但是要注意TI的DSP281x_SWPrioritizedDefaultIsr.c 文件中有一些笔误,可能会使你的中断只能出现一些,或者是出其他问题。此时你要查一下,看是否有明显的错误;错误不是很多,我记不清了,就不在这里写出来了。大家先试试自己的中断吧!

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号