您好!
基于 qmsIpsIpcBenchmark、我正在尝试处理 qpend 中断。 库中、我在 TMS320C6670.ccxml 文件中添加了 GEL 文件。
在 TransportQmsSetup dspIntVectId 为8的 cfg 文件中、在 TransportQmss intcGemEvent equlas 92中。 useAccumulatorLogic 设置为0,这意味着传输将使用 QPEND 队列。 在 SPRS689D 表7-38中、事件编号92代表中断事件:
CIC0_OUT (12+16*n)
对于内核0中断事件等于12、对于内核1 28、对于内核2 44、对于 内核3等于60。
对于内核0、我在 CPIntc 的 ROV 中看到、所有设置都正确:
内核1中的 CpIntc:
全部设置正确。 所有设置都由系统自动生成- TransportQmsSetup 和 TransportQmss。
在文件 TransportQmss.XDC 中、我找到了几行文本:
/*! *==== QPend_ISR ==== 将 QMSS 传输配置为使用时调用* ISR *高优先级 QPEND 队列。 QPEND ISR 检索接收到的描述符 QPEND 队列中的*。 * void QPend_ISR (UArg arg);
这对我来说意味 着我只能用我的代码填充函数 QPend_ISR。 是真的吗?
我去了,但它不起作用
问题在哪里?
我尝试使用示例2.1 - SPRUGW4A (芯片中断控制器)中的代码。
我已将函数 void setup_qpend_interrupt (uint16 qnum、uint16 CorePac 事件)更改为:
#define QPEND_IDX 5
void setupQpendInterrupt ()
{
CSL_IntcParam vectId1;
uint16_t CorePac 事件;
CorePac 事件= 56 + CSL_chipReadPac (CSL_CHIP_DNUM);
//步骤3:将 ISR 连接到 CorePac 输入事件。
vectId1 = CSL_INTC_VECTID_8;//4至15可用
hIntcQms[QPEND_IDX]= CSL_intcOpen (&intcQmss、CorePac 事件、&InttId1、NULL);
// ISR Record[QPEND_INCCS[ENCC_INTX]
、中断处理程序[ENCCQL_INCCS_INQTX]、CCTRU_INQ_INCCS[EN_INCC_ENTX_ENQ_ENTX];ENCCTRU_INCC_ENQ_INCC_ENQ_ENTX_ENQ_ENQ_ENTRU_ENTX_ENQ_ENTRU_ENQ_ENQ_ENQ_ENQ_ENQ_ENQ_ENQ_ENQ_ENQ_EXT.ENQ_ENTRUTTON_ENQ_ENQ_ENQ_ENQ_ENQ_ENQ_EXT.ENQ_ENQ_ENQ_ENQ_ENQ_ENTRUTTON_ENQ_ENQ_ENQ_ENQ_ENTRU
void QPend_ISR (uint32_t EventID)
{
//禁用 CIC0主机中断输出
CSL_CPINTC_DisableHostInterrupt (cpdhnd, host_event);
//清除 CIC0系统中断
CSL_CPINTC_clearSysInterrupt (cpdhnd, sys_event);
System_semf ("semRxend"、%printdid:%dspx0b)
。 CSL_chipReadReg (CSL_CHIP_DNUM);
//清除 CorePac 中断
CSL_intcHwControl (hIntcQms[QPEND_IDX]、CSL_INTC_CMD_EVTCLEAR、NULL);
//启用 CIC0主机中断输出
CSL_CPINTC_enable[
如果每个中断映射都是可选的/主机调用、则关闭];
CSL_intcClose (&intcQmss);
}
芯片中断控制器程序中的函数示例中的函数挂起。
我将感谢你的任何帮助。 我不知道如何解决这个问题。
谢谢。
Lukasz。

