This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/TMS320C6670:通过 cfg 设置中断

Guru**** 2939240 points

Other Parts Discussed in Thread: SYSBIOS

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/669014/rtos-tms320c6670-setting-interrupts-through-cfg

器件型号:TMS320C6670
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

您好!

大多数有关中断设置的问题都会发送到 wiki 页面、但我无法通过其唯一的帮助解决我的难题、因此需要社区建议。

我有 C6670。 我希望通过事件组合器接收次级中断。 两个相关的特殊事件是 EDMA3CC0 EMDMACC_GINT 和 PCIExpress_ERR_INT。 在 表7-39 CIC0事件输入-器件数据手册事件的 C66x CorePac 二次中断如所示

CIC 上的输入事件编号 系统中断 描述
36. EDMA3CC0 EDMACC_Gint EDMA3CC0 Gint
48. PCIExpress_ERR_INT 协议错误中断 

两个事件都属于 CIC0事件。 据我了解、CIC 函数是将系统事件映射到通道、也称为主机中断。 看起来、负责此操作的 SYSBIOS 模块是 ti.SYSBIOS.family.c66.tci66xx.CpIntc。 据我所知、 有 CpIntc.sysInts 数组、其中包含与系统事件编号匹配的元素数量。 该数组的每个元件都配置 CIC 的特定输入、因此我必须调整 CpIntc.sysInts[36]和 CpIntc.sysInts[48]。 对吗?

假设正确、然后继续执行事件组合器。 在表7-38系统事件映射- C66x CorePac 主中断的数据手册中、我们看到:

事件编号中断事件 描述
56. CIC0_OUT0 中断控制器输出
57 CIC0_OUT1 中断控制器输出 

CIC0有大约80个输出、但只有18个输出被路由到 Core0。 我想使用其中的2个。 据我了解、CIC 输出是主机中断的昵称。 那么 CIC0_OUT0 -该主机中断0、CIC0_OUT1 -主机中断1吗? 对吗?

假设是的、那么我必须将这两个事件路由到事件组合器、它们的编号应该是56、57。 因此、我会这样编码:

/*系统事件36 EMDACC0 */
CpIntc.sysInts[36].fxn ='&EDMA_ISR';/*我的 ISR */
CpIntc.sysInts[36].arg = 36; /*这是正确的吗? */
CpIntc.sysInts[36].hostInt = 0; /*通道/主机中断0,匹配 CIC0_OUT0 -是否正确?*/
CpIntc.sysInts[36].enable = true;
//将主机中断映射到事件组合器*/
CpIntc.mapHostIntToEventCombinetmeta (CpIntc.sysInts[36].hostInts*);

// CpIntx48 PCIe[sysInts.sysIntts.n
='&PCIe_ERR_ISR';/* My ISR */
CpIntc.sysInts[48].arg = 48; /*这是正确的吗? */
CpIntc.sysInts[48].hostInt = 1; /*通道/主机中断1,匹配 CIC0_OUT1 -正确吗?*/
CpIntc.sysIntts[48].enable = true;
//将主机中断映射到事件组合器*/
CpIntc.mapHostIntToEventCombinerMeta (CpIntc.sysIntts[48].hostInt);

// ISR = CpInter




0[056.iner*/ CpInteEvent_Combiner 0[0].Cf56].Cn.Cf56]
;*事件组合器= Cf56.Cn.Cf56.Cn.Cf56.Cn.Cn.eEvent_event_Cn.Cf56.Cn.Cn.Cn.Cf56.Cn.Cn.Cn.Cn.e=0[0_event_event_event_Cn.
EventCombiner.event[57].arg = 57;
EventCombiner.event[57].unmask = true;

//EventCombiner.eventGroupHwiNum[0]
= 7;
EventCombiner.eventGroupHwiNum[1]= 8;
EventCombiner.eventHwiNum[2]= 9;EventCombiner.eventGroupHwiNum[3]
;EventCombiner.EventCombiner.EventGroupHwiNum[2]; 

请评论、我的理解是否正确。

提前感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我们将对此进行研究。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请与我联系、我仍想将通过 CIC 的系统二次事件映射到事件组合器。 谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢您的宝贵帮助。

    工作组合可以是:

    EventCombiner.eventGroupHwiNum[0]= 7;
    EventCombiner.eventGroupHwiNum[1]= 8;
    EventCombiner.eventGroupHwiNum[2]= 9;
    EventCombiner.eventGroupHwiNum[3]= 10;
    
    
    CpIntc.sysIntts[36].fxn ='&EDMA_ISR';
    CpIntc.sysInts[36].arg = 36;
    CpIntc.sysInts[36].hostInt = 0;//<--这是一个关键
    CpIntc.sysInts[36].enable = true;
    CpIntc.mapHostIntToEventCombinerMeta (CpIntc.sysInts[36].hostInt);//<-匹配此处
    
    //针对 CIC0_OUT0事件56的 ISR */
    EventCombiner.events[56].fxn = CpIntc.dispatch;
    EventCombiner.Events[56]/ its.mag<= true/sysInt.eventsep.events=true.e[56].eventsep.events=true.e[56]-[56].eventsep.init.events=true.events.pnations.pun
    

    我看起来像事件组合器中 ISR 函数的参数、即 CpIntc.Dispatch、应该是主机中断编号。

    有一些关于多个系统中断映射到一个主机中断的内容、但我还没有深入探讨。

    为了发现这一点、我必须使用 C 代码执行整个过程、单步执行所有 XDC 内容并监控 ROV 中设置的参数。