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.

[参考译文] TDA2EXEVM:使用 SYS BIOS 处理 DSP 中断

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/856398/tda2exevm-handling-dsp-interrupts-with-sys-bios

器件型号:TDA2EXEVM

您好!

我正在尝试在 SYS BIOS 中实现中断处理。 代码如下所示:

void myIsr15 (UArgg arg);

int main (int argc、char* argv[])
{
Error_Block EB;
Error_init (&EB);
Hwi_Params params;
Hwi_Params_init (&params);

params.EventID = 110;
params.arg = params.EventID;
params.enableInt = false;
params.maskSeting = Hwi_MaskingOption_self;

Hwi_handle hwi;
hwi = Hwi_create (15、 myIsr15、&params、&EB);

if (hwi = NULL)
{
ERROR_CHECK (&EB);
log_print0 (Diags_status、"注册中断时出错。");
}

Hwi_enableInterrupt (15);

BIOS_start();

返回0;
}
 

我稍后在应用程序中运行:

HW_WR_REG32 (CSL_C66X_COREPAC_REG_BASE_ADDRESS_REGS + 0x2C、0x00004000); 

手动触发此特定中断。 我希望看到:

+++ Interrupt 15 occured

作为输出、但中断处理程序永远不会触发。 当用 CSL 手动配置中断时、它会触发、但我们不想混合使用 CSL 和 SYS BIOS。

有什么不知道 SYS BIOS 实现的原因?

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

    Michal Ciesielski 说:
    params.EventID = 110;

    您正在尝试映射哪个中断?  这似乎是 MDMAERREVT。  这是您的意图吗?

    [引用 user="Michal Ciesielski"] hwi = Hwi_create (15、myIsr15、&params、&EB);

    这提供了 MDMAERREVT 到 HWI15的直接映射。

    [报价用户="Michal Ciesielski"] HW_WR_REG32 (CSL_C66X_COREPAC_REG_BASE_ADDRESS_REGS + 0x2C、0x00004000);[/报价]

    这似乎是对地址0x0180002C、EVTSET3的写入。  您将设置与事件110相对应的位14。

    这里的问题是、您设置的该位与"事件组合器"硬件有关。  只有12个直接映射中断可供使用(HWI4-HWI15)。  由于许多应用可能总共有12个以上的中断、因此我们需要事件组合器来解决此问题。  它是标志和使能的另一层、可以漏斗到单个直接映射中断中。  但是、由于您使用的是直接映射中断、因此这不是测试此事件的正确方法。  相反、您应该使用中断设置寄存器(ISR)。  这是一个 CPU 寄存器(即它不是存储器映射)、因此您可以按如下方式进行访问:

    extern cregister volatile unsigned int ISR;

    ISR =(1<<15);//触发 HWI15

    此致、
    Brad

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

    你好 Brad。 感谢您的回答。

    是的、目的是使用 MDMAERREVT -我们需要使用 CorePac 的 XMC 进行存储器保护。

    我已经测试了 ISR 标志的设置、这会按预期触发中断。 是否有办法在没有事件组合器的情况下通过事件测试此设置、或者我是否必须屏蔽110到 EVT3、然后将 EVT3映射到中断才能执行此操作?

    /Michal

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

    [引用 user="Michal Ciesielski">我已经测试了 ISR 标志的设置、这会按预期触发中断。 是否有办法在没有事件组合器的情况下通过事件测试此设置、或者我是否必须屏蔽110到 EVT3、然后将 EVT3映射到中断才能执行此操作?[/QUERP]

    如果要对其进行完全测试、则需要故意强制执行 MDMAERREVT。  您不能"假"事件。  我认为最好测试对实际 MDMAERREVT 的处理、因为这将允许您测试是否正确清除了错误并可以生成和检测多个 MDMAERREVT。

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

    好的、我明白了。 谢谢你。 我认为这解决了这个问题。

    此致、Michal