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.

[参考译文] TMS570LS3137:需要有关 VimParity 处理程序的更多详细信息

Guru**** 2618835 points

Other Parts Discussed in Thread: HALCOGEN, TMS570LS3137

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/784183/tms570ls3137-need-more-details-on-vimparity-handler

器件型号:TMS570LS3137
主题中讨论的其他器件: HALCOGEN

大家好、

这与为 TMS570LS3137控制器生成的 Halcogen 代码有关。 从 sys_vim.c 文件中、 vimParityErrorHandler 具有以下代码段:

vimParityErrorHandler (空)


更正损坏的位置、清除奇偶校验错误标志。

现在、我们有一条注释、用于禁用和启用最高优先级的待处理通道。 但是、我们将针对向量0而不是其他向量进行 Onlying 检查。
是否不需要考虑所有否决并通过更新相应的 IRQINDEX 寄存器来禁用它?

请告诉我有关这方面的更多详细信息。

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

    还会检查其他中断通道。 通道0需要特别考虑、因为它由 ESM 高级中断驱动。

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

    当然、还有其他需要清除的中断引脚、但我们只清除引脚0。 请相信、除0以外的引脚也需要清除。 请确认。

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

    您好、Sreenivasan、

    vimParityErrorHandler()也包括检查其他中断请求号。 以下是完整功能:

    void vimParityErrorHandler (void)
    {
    uint32 vec;
    
    /*标识损坏的地址*/
    uint32 error_addr = VIM_ADDERR;
    
    /*识别信道编号*/
    uint32 error_channel=((error_addr 和0x1FFU)>> 2U);
    
    if (error_channel >= VIM_channels)
    {
    /*指数已超出债券*/
    /*此条件不应为真、因为仅硬件实现了 VIM_CHANNELS (96)通道*/
    /*但是,由于防御性编程,添加了它*/*
    用户代码开始(2)*/*
    用户代码结束*/
    }
    否则
    {//更正
    损坏的位置*/
    vimRAM->ISR[ERROR_CHANNE]= s_vim_init[ERROR_CHANNEL];
    
    //清除奇偶校验错误标志*/VIM_PARFLG
    = 1U;
    
    /*禁用并启用最高优先级的待处理通道*/
    if (vimREG->FIQINDEX != 0U)
    {vec
    = vimREG->FIQINDEX - 1U;
    }
    否则
    {/*
    SAFETYMCUSW 134 S MR:12.2. "读取32位易失性寄存器"*/
    vec = vimREG->IRQINDEX - 1U;
    }
    if (vec == 0U)
    {
    vimREG->INTREQ0 = 1U;
    vec = esmREG->IOFFHR - 1U;
    
    if (vec < 32U)
    {
    esREG->SR1[0UVEC]= 1Uv32U
    
    
    
    
    
    )通知
    (v3u);(v3u) 1uec < 32u (v3u)(v3u)(v3u)<1uec < 32u);(v3u (v3u)<1uec < 32u (v32u)通知<1uec <1uu);(v32u)<uec <1u (v32u)<1uec <
    否则(VEC < 96U)
    {
    esmREG->SR4[0U]=(uint32) 1U <<(vec-64U);
    esmGroup1Notification (vec-32U);
    }
    否则
    {
    esmREG->SR4[1U]=(uint32) 1U <<(videc -96U);esmGroup1<VINT32
    (viEC<VINT32
    
    
    );}videc <VINT32 (viec)<VINT32)<Uvidec
    
    =(videc <uuuuuuuuu.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.
    
    
    否则、如果(vec < 64U)
    {
    vimREG->REQMASKCLR1 =(uint32) 1U <<(vec-32U);
    vimREG->REQINTKSET1 =(uint32) 1U <<(vec-32U);
    }
    否则
    {
    vimREG->REQMASKCLR2 =(uint32) 1U
    <(videc <);videc < 64kU}(videc <)
    
    
    
    

    突出显示的代码会检查通道0以外的中断源、禁用该中断通道并重新启用它。

    此致、Sunil

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

    很抱歉、我看不到突出显示的部分、但我相信如果(VEC < 32U)等情况、您会指的是所有其他部分。
    但是、在所有这些 elseif 中、我们将设置(写入1) CLR 并设置寄存器、这些寄存器实际上会启用中断(根据 SPNU499c.pdf)。
    在这里、我们完全重新禁用通道0以外的中断。 为什么不使用 INTREQx (x 可以是0、1、2)寄存器清除中断?

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

    您好、Sreenivasan、

    向*CLR 寄存器中的某个位写入"1"将禁用相应的中断通道。

    向*设置寄存器中的位写入"1"将启用相应的中断通道。

    该操作是专门完成的、因此应用程序在每次需要启用或禁用任何单个中断通道时都可以避免执行读-修改-写操作。

    在几个控制不同功能的模块中也有相似的*SET 和*CLR 寄存器。

    此致、

    Sunil