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.

[参考译文] RM46L852:N2HET 作为 GIO 中断

Guru**** 2393725 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/759153/rm46l852-n2het-as-gio-interrupts

器件型号:RM46L852

大家好、

我有一个简短的问题。

我已经将 N2HET2位4、6和8配置为 GIO。

然后、我转到边沿中断并启用了 EDGE0、Edge1和 Edge2、并告诉它们仅在上升沿与 HET2 4、6、8位进行交互。

然后、我转到引脚0-7并将位4和6配置为具有上拉的输入。

最后、我获得了引脚7 - 15并将位8配置为具有上拉电阻的输入(与之前的引脚相同)。

在 HET2上、我放置了三个按钮。

在 GIOB 上、我有三个 LED。


我想通过中断(notification.c)按下按钮来打开每个 LED。

当我通过 sys_main.c 将它们翻转时、所有操作都正常。


我该怎么做?
在 VIM 中打开需要什么?


尝试启用 HET 高电平/ HET 低电平只会产生错误。

我想他们可能会转到 gioNotification 并启用 GIO 中断、但情况似乎并非如此。

因此、我相信他们将在电子通知中进行交互、因此我已经这样做了:

gioInit ();
hetInit ();

gioSetDirection (hetPORT2、0x00000000);

gioEnableNotification (hetPORT2、4U);//认为这会有所帮助,但没有
edgeEnableNotification (hetREG2、0U);
_enable_IRQ ();

你能告诉我我我出了什么问题吗? )

谢谢、新年快乐!

Marc

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这一点正在研究中。 反馈将因假期而延迟。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Marc、

    请在 VIM (通道63和通道73)中启用 NHET2中断。 NHET ISR 将在 het.c 中生成:het2HighLevelInterrupt (void)和 het2LowLevelInterrupt (void)。 这2个 ISR 调用 edgeNotification()
    2.您可以添加代码来打开/关闭 edgeNotification()中的 LED

    在 N2HET 中断服务程序中、主 CPU 必须首先确定 N2HET 内部哪个源创建了中断请求。 此操作由 N2HET 偏移索引优先级1寄存器(HETOFF1)或 N2HET 偏移索引优先级2寄存器(HETOFF2)加速、此寄存器自动提供每个优先级内最高优先级源的数量。 读取偏移寄存器将自动清零创建请求的相应 N2HET 中断标志。 然而、如果 N2HET 中断处理例程未使用偏移寄存器、则在中断被处理后、该标志应该由 CPU 显式清零。

    对于您的情况、中断源是指令17、18和19 (het.c):
    }、
    /* ECNT:CCU 边缘0
    * -说明 = 17
    * -下一条指令 = 18
    * -条件下一条指令= 18
    * -中断 = 17
    * -引脚 = 4
    *

    /*计划*/
    0x00025440U、
    /*控件*/
    (0x00024007U |(uint32)((uint32) 4U << 8U)|(uint32)((uint32) 2U << 4U))、
    /*数据*/
    0x000000000000、
    /*保留*/
    0x000000000000
    }、
    /* ECNT:CCU Edge 1
    * -说明 = 18
    * -下一条指令 = 19
    * -条件下一条指令= 19
    * -中断 = 18
    * -引脚 = 6
    *

    /*计划*/
    0x00027440U、
    /*控件*/
    (0x00026007U |(UINT32)((UINT32) 6U << 8U)|(UINT32)((UINT32) 2U << 4U))、
    /*数据*/
    0x000000000000、
    /*保留*/
    0x000000000000
    }、
    /* ECNT:CCU 边缘2
    * -说明 = 19
    * -下一条指令 = 20
    * -条件下一条指令= 20
    * -中断 = 19
    * -引脚 = 8
    *

    /*计划*/
    0x00029440U、
    /*控件*/
    (0x00028007U |(UINT32)((UINT32) 8U << 8U)|(UINT32)((UINT32) 2U << 4U))、
    /*数据*/
    0x000000000000、
    /*保留*/
    0x000000000000
    }、
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    QJ Wang、

    感谢您的回复! )

    我完全理解我所遗漏的内容。 )

    还有一个快速的附加问题。
    我是盲、还是没有中断:HET1 0级和1级?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Marc:

    有 NHET 0级和1级中断。 它们位于 VIM 通道10和通道24。