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.

[参考译文] TMS320C6670:qmsIpsIpcBenchmark -如何处理 qpend 中断?

Guru**** 2585275 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/576874/tms320c6670-qmssipcbenchmark---how-service-qpend-interrupt

器件型号:TMS320C6670

您好!

 基于 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。

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

    RTOS 团队将收到通知。 他们的反馈将在此处发布。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我认为 qmsIpsIpcBenchmark 示例仅显示 cfg 文件中的初始化 QMSS trasnport、但内核之间的传输是使用 MessageQ 完成的。
    为什么?
    在存储器映射(文件:qmsIpcBenchmark_c6670.map)中、我找到了:
    0x0c050000单片描述
    0x0c090000无队列
    我在内存浏览器中将内存从0x0c050000检查为0x0c090000。 仅分配了单片描述(128B * 2048 = 0x40000B)。 当我使用 MessageQ_Put 函数放置消息时、在 monolithicDesc 存储器区域中不会出现任何数据。
    MessageQ 从0x0c000000分配到0x0c050000 (128B + 32B 标头)* 2048 = 0x50000B。
    问题是我没有使用 QMSS 传输、而只是使用 MessageQ。 QPEND 中断将不起作用。
    您能否向我展示一个使用 QMSS 传输和 Qpend 中断在内核之间完成传输的示例?
    非常感谢。
    Lukasz。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Yordan、您好!
    您是否收到了 RTOS 团队的反馈?
    此致、
    Lukasz。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Lukasz:

    尚无反馈。 我已升级此问题。

    此致、
    Yordan