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.

[参考译文] 如何找出硬接线中断的中断目标。

Guru**** 2587345 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1096442/how-to-find-out-interrupt-destination-of-hardwired-interrupts

Thread:sysconfig中讨论的其它部件

您好,
我目前正在使用MCU+ SDK在AM243x上进行编程。

过去,我曾询问一些有关中断路由的问题,
TI的员工提供了很大的帮助。

现在我还要配置硬接线中断。
为此,我将使用kernel/DPL/HWIP.h中的功能

它说:

/**
 * \brief Parameters passed during \ref HwiP_construct
 */
typedef struct HwiP_Params_ {

    uint32_t intNum;   /**< CPU interrupt number. */
    HwiP_FxnCallback callback; /**< Callback to call when interrupt is received */
    void *args; /**< Arguments to pass to the callback */
    uint16_t eventId; /**< Event ID to register against, only used with c6x with event combiner */
    uint8_t priority; /**< Interrupt priority, only used with ARM R5, ARM M4 */
    uint8_t isFIQ; /**< 0: Map interrupt as ISR, 1: map interrupt as FIQ, only used with ARM R5 */
    uint8_t isPulse; /**< 0: Map interrupt as level interrupt, 1: Map interrupt as pulse interrupt, only used with ARM R5, ARM M4 */

} HwiP_Params;


因此,有些参数仅适用于特定MCU。
我特别想使用优先级和FIQ,因为我当前关心的是不同优先级的可屏蔽和不可屏蔽中断。

例如,如果中断设置为FIQ,但目标中断控制器不是R5F-MCU的VIM,我想在断言时失败。
但我看不出有什么方法可以找出哪个目标中断控制器连接了一条中断线,并提供了IRQ编号。
除了用户从原理图中读取信息并将其作为额外参数提供(这也可能是错误的输入,从而使整个断言作废)。

我认为我可以使用Hwip_Config来检查至少是否将intcBaseAddr设置为R5F-VIM的地址,如注释中所述:

/**
 * \brief HwiP config parameters, setup as part of SysConfig, not to be set by end-users directly
 */
typedef struct HwiP_Config_
{
    uint32_t intcBaseAddr; /**< For R5F, this is VIM base addr */

} HwiP_Config;


了解我的目的地是否是R5F-VIM。
但我不知道如何从构建的Hwip_Object中获取Hwip_Config。
感谢你的帮助。

此致


菲利普。

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

    您好,Philip:

    对于直接连接到R5F核心VIM的中断,您可以在 C:\TI\MCU_PLUS_SDK_am243x_08_02_00_31\SOURC\DRIVERS\HW_include\am64x_am243x\cslr_intr_r5fs0_core0.h.中找到相应的中断编号 例如,主域UART0中断为 CSLR_R5FSS0_CORE0_INTR_UART0_USART_IRQ_0 (210)。 Timer8 (在example.syscfg中由Clock使用)中断为 CSLR_R5FSS0_CORE0_INTR_TIMER8_INTR_Pend_0 (160)。

    此致,

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

    您好Ming:
    感谢您的回答。
    但似乎存在误解。
    我想问的问题不是,作为一个人类,我怎样才能找到一个特定MCU的正确中断号来查看一些文档。
    问题是,给定一个特定的HwiP配置,我的程序如何自动找出中断线连接到哪个MCU/中断控制器。
    我的第一个猜测是,它应该位于default_boardConfiguration resasg-entries中的某个位置,但我不确定这一点,如果是,那么在哪里。
    感谢你的帮助。


    此致

    菲利普。

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

    VIM基本地址似乎是在sysconfig生成的DPL_config.c中设置的。
    但是,保存此地址的gHwiConfig仅在我为R5创建syscfg-file时生成。
    如果我为M4做一个,它根本不存在。
    也许我缺乏C/C++技能,但我发现检查全局变量是否存在相当困难。

    如果变量只是为M4设置了不同的值,则会更容易。
    它是否也有基本地址? 我在TRM中找不到有关NVIC基本地址的任何信息。
    感谢你的帮助。

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

    您好,Philip:

    正如您在R5F的帖子中提到的,它使用VIM。 它的基本地址是 0x2FFF0000,在 gHwiConfig中定义,并在C:\ti\MCU_plus_SDK_am243x_08_02_00_31\SOURCE \kernel\nortos\DPL\R5\Hwip_armv7r_vim.c.中使用 对于M4F,它使用NVIC。 其基本地址是 0xE000E000 (TRM中的表2-5),定义于 C:\ti\MCU_plus_SDK_am243x_08_02_00_31\SOURCE \kernel\nortos\DPL\M4\HWP_armv 7 m .h 它用在 C:\ti\MCU_plus_SDK_am243x_08_02_00_31\SOURC\kernel\nortos\DPL\M4\Hwip_armv NVIC_ISER , NVIC_icer等形式的7 m 中

    我知道这有点不一致,但这就是在DPL中实施的方式。 对于每个中断源的中断号,可以在  C:\ti\MCU_plus_SDK_am243x_08_02_00_31\SOURC\DRIVERS\HW_include\am64x_am243x\cslr_intr_MCU_m4fss0_core0.h中找到定义,以防您需要它们。

    此致,

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

    您好Ming:
    谢谢你提供这些信息,我昨天也找到了这些信息



    但可悲的是,我的问题仍然存在。 即使我知道这些基本地址应该在HwiP_Config.intcBaseAddr中的位置,
    我不知道如何在执行Hwip_constructure后获得只有Hwip_Params-结构和Hwip_Object的Hwip_Config。

    我需要的是类似的东西,例如:

    Hwip_Config* Hwip_getconfig (Hwip_Object *构造对象);

    然后,我可以比较这些地址,找出目的中断控制器是什么。
    感谢你的帮助。


    此致

    菲利普。

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

    您好,Philip:

    下面是我所做的:

    1.导入 hello_world_am243x-evm_m4fs0-0_nortos_ti-arm-clang,然后使用sysconfig (example.syscfg)添加计时器:

    2.构建项目后,打开生成的文件ti_DPL_config.c,TimerP_init具有 Hwip_Params_init和 Hwip_construct,用于为MCU计时器0设置HWI:

    此致,

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

    您好Ming:
    感谢您的回答,但我不确定如何处理。
    您确定吗,以下问题的答案不是:

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/109.7178万/mcu-plus-sdk-am243x-how-to-do-hw-timers-in-mcu-sdk

    我不确定,您的答案如何帮助我了解硬接线中断线路的目标中断控制器是什么。
    感谢你的帮助。


    此致

    菲利普。

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

    您好,Philip:

    之后  

    状态= Hwip_construct (&gTimerHwiObj[config_TIMER0],&timerHwiParams);

    您可以使用  

    hwip_getconfig(&gTimerHwiObj[config_TIMER0]);

    以获得您所需的信息。

    此致,

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

    您好Ming:
    感谢您的回答。
    也许我是盲人,但在我的代码中,我和CCS的Find函数都找不到任何称为Hwip_getconfig的函数。

    我在上面的问题中写道,我需要这样一个功能:



    我从来没有说过,有这种功能,所以如果确实有这种功能,请告诉我在哪里可以找到。
    感谢你的帮助。


    此致

    菲利普。

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

    另外,我还不知道你们想告诉我关于这些计时器的什么。
    我根本不使用计时器。


    此致

    菲利普。

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

    您好,Philip:

    很抱歉,我一开始就不理解您的问题。 您真正感兴趣的是每个中断的优先级和FIQ。 FIQ仅适用于R5F内核,而优先级适用于R5F和M4F。

    在这种情况下,我建议您使用核心ID进行检查,而不是使用中断控制器(VIM或NVIC)的基本地址。 目前没有API可供您获取自核ID,但您可以使用IPC示例在 IPC_notify_echo.c中使用的方法

    /*启动消息交换的主内核*/
    uINT32_t gMainCoreId = CSL_Core_ID_R5FSS0_0;

    如果你真的想在运行中识别自我核心ID,我想有一个ARM核心寄存器可以告诉你群集和核心编号,但是你必须自己读取和解释寄存器的值。

    此致,

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

    您好Ming:
    我不确定我是否需要自我核心ID。 这取决于任何硬接线中断的目标是否始终是中断源所在的同一核心。

    否则,如果一个硬接线(不使用中断路由器或聚合器)中断可以在一个主机子系统中有其来源,但目标是另一个主机子系统,那么我想要的是获取目标的核心ID或主机ID,而不是源。
    感谢你的帮助。


    此致

    菲利普。

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

    您好Ming:
    我似乎有点困惑。
    我真正想知道的是在拥有Hwip_object之前的目标中断控制器。

    我仍然不理解的是目标中断控制器的信息来自何处。

    例如,看看TRM中的中断映射,我们看看IRQ编号22 (只是一个随机编号):











    因此,要配置中断,我有以下参数:



    假设我要为所有上述中断配置中断,IRQ编号为22,来自TRM,
    我想为每个ISR设置一个不同的ISR,
    我如何知道将哪个ISR设置为哪个ISR?

    我看不到任何参数,我实际上告诉HwiP我要定位的目标中断控制器。
    并且intNum本身是歧义的(对于以上所有情况,它都是22)。

    感谢您的帮助,并对混淆表示抱歉。


    此致

    菲利普。



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

    您好,Philip:

    正如我们在调用中讨论的那样,它完全取决于 调用Hwip_construct ()的位置。 如果在R5F内核上调用它,则  调用C:\ti\MCU_plus_SDK_am243x_08_02_00_31\SOURC\kernel\nortos\DPL\R5\HWiP_armv7r_vim.c中的HWiP_构造,因此 使用HWiP_setAsFIIq ()。 如果在M4F内核上调用它,则  调用C:\ti\MCU_plus_SDK_am243x_08_02_00_31\SOURC\kernel\nortos\DPL\M4\HWI_armv 7 m .c中的HWI_setAFIC()。  这同样也适用于ICSS案例(尽管还没有预构建ICSSG DPL库)。 最终,不同的DPL库将链接到在不同内核上运行的应用程序。

    抽象HWI类可以使用相同 的Hwip_construct (),然后链接到不同的DPL库,或者您希望在自己的HWI类中从头开始实现Hwip(尽管我不建议这样做)

    此致,

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

    您好Ming:
    感谢您的快速响应。
    因此,我从您的解释中了解到,在R5上运行的初始化例程(调用Hwip_construct)中,不可能配置以M4为目标的中断。 是这样吗?
    感谢你的帮助。


    此致

    菲利普。

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

    您好,Philip:

    正确。  Hwip_construct ()只为 调用Hwip_construct ()的核心设置中断控制器。

    此致,

    明  

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

    感谢您的澄清。


    此致

    菲利普。