TI C66x DSP 系统events及其应用 - 5.4(event与ISR配置)
来源:互联网 发布:机器人设计软件 编辑:程序博客网 时间:2024/06/06 13:05
根据5.2中的讲解,当监控high priority queue的PDSP channel设定好后,那么与之对应的event就知道了(PDSP channel与event一一对应)(注意5.x讲的是中断的配置,并不是exception的配置,4.x讲的是exception)
中断event与ISR配置代码如下,目的是使event与ISR建立联系:
/*Configure event*/
Event_CombinerEventConfigration( systemEvent, (TEventCombinerCallback)eventInterruptIsr, GLO_NULL));
因为中断的event combiner将event 4~127分为4个group,所以在Event_CombinerEventConfigration函数中要判断systemEevent属于哪个group以及group的哪一位,然后判断该event之前没有被exception使用过;有没有被其他的中断使用过;有没有配置到vector上,若有一个条件成立,则该systemEvent不能再次使用:
u32 vectorIndex;
evtVector = systemEvent >> 5;
evtBit = systemEvent & 31;
evtMask = 1<<(systemEvent & 31);
/* (0100) Check if the event is an exception. */
u32 eventIsException = (~gCorePacINTCRegs->EXPMASK[evtVector]) & evtMask; //EXPMASK是exception mask寄存器,若相应位为0,表示该event已被exception使用
u32 eventIsInterrupt = 0;
/* (0200) Check if the event is already combined. */
u32 eventIsCombined = (~gCorePacINTCRegs->EVTMASK[evtVector]) & evtMask;//EVTMASK是中断mask寄存器,若相应位为0,表示该event已被其他中断使用
EEventCombinerRetVal retVal;
/* (0300) Check if the event is an interrupt. */
for(vectorIndex = 15; vectorIndex >= 4; vectorIndex--) //因为CPU有12个中断输入INT4~15,所以有12个vector.
{
/* Check all the vectors to ensure nobody uses the event ID*/
if (gPdb.startUpInfo.eventAtIntVector[DNUM][vectorIndex] == systemEvent) //DNUM是cpu编号,对于Nyquist,DNUM=0,1,2,3.
{
/* The event is already in use */
eventIsInterrupt = 1; //若找到有vector与该systemEvent有联系,表明该event已被设置过.
break;
}
}
retVal = (eventIsException | eventIsInterrupt | eventIsCombined) ? EEventCombinerRetVal_AlreadyReserved: EEventCombinerRetVal_NoError;
if (retVal == EEventCombinerRetVal_NoError)
{
/* (0400) Register event for being combined. */
gCorePacINTCRegs->EVTMASK[evtVector] &= ~(1 << evtBit);//向EVTMASK寄存器注册该event,表明该event已经被该中断使用,其他的中断或exception不能再次使用
/* (0500) Register callback. */
gEventCombinerCallbacks[systemEvent].cb = callback; //注册ISR,如文中提到的eventInterruptIsr就是callback
gEventCombinerCallbacks[systemEvent].data = callbackData;
}
代码中的callback函数,就与该systemEvent联系起来了,当该event被trigger了,该callback就会被调用。callback函数应该短小,并且最好在L1P,L2快速memory中。
对寄存器或者某些全局变量的操作一定要在中断disable的情况下进行,这里并没有给出代码。5.5中将会讲解ISR什么时候会被调用。
- TI C66x DSP 系统events及其应用 - 5.4(event与ISR配置)
- TI C66x DSP 系统events及其应用 - 5.5(ISR调用)
- TI C66x DSP 系统events及其应用 - 5.10(创建ISR的三种情况)
- TI C66x DSP 系统events及其应用 - 1
- TI C66x DSP 系统events及其应用 - 2
- TI C66x DSP 系统events及其应用 - 3
- TI C66x DSP 系统events及其应用 - 5.3(Interrupt)
- TI C66x DSP 系统events及其应用 - 5.6(INTMUX)
- TI C66x DSP 系统events及其应用 - 5.7(IST)
- TI C66x DSP 系统events及其应用 - 5.8(ISTP)
- TI C66x DSP 系统events及其应用 - 5.1(QM accumulator的配置)
- TI C66x DSP 系统events及其应用 - 5.2(PDSP配置)
- TI C66x DSP 系统events及其应用 - 4.1(Exception Combiner)
- TI C66x DSP 系统events及其应用 - 4.2(Exception Combiner)
- TI C66x DSP 系统events及其应用 - 4.3(Exception handle)
- TI C66x DSP 系统events及其应用 - 5.3.1(Interrupt之eventCombiner理解)
- TI C66x DSP 系统events及其应用 - 5.9(IST重定位)
- TI C66x DSP 系统events及其应用 - 5.11(中断控制寄存器)
- python rsa加解密
- 第四讲 ASP.NET系统对象和状态管理(三)
- Mac下VIM配置
- 1998年印尼反华暴乱中国之痛,是中国人一定要看!!
- Vim 目录树
- TI C66x DSP 系统events及其应用 - 5.4(event与ISR配置)
- leetcode第一刷_Longest Common Prefix
- Netty服务器线程模型概览
- 组成原理——输入输出技术
- 什么是静态(static)?什么是静态方法,静态变量,静态块和静态类?
- C中字符串常见操作
- 实战Linux Bluetooth编程(一) 协议栈概述
- 第五讲 ASP.NET系统对象和状态管理(四)
- zoj 3535 Gao the String II(AC自动机+DP)