你好,助手
我用的是S32K358多核。
使用 Eirq 进行 I/O 中断。
我有个问题:
我希望核心0使用eirq0,核心2使用eirq1。
但是这两个中断通道触发了同一个中断处理程序SIUL2_EXT_IRQ_0_7_ISR
问题就在这里。如果 eirq0 和 eirq1 都出现。双重核心触发
你好@Licunhao ,
你的理解部分正确。
在 S32K3 设备上,SIUL2 外部中断输入被分组为中断向量。因此,EIRQ0 和 EIRQ1 属于同一中断组,并由同一组中断处理程序处理,例如SIUL2_EXT_IRQ_0_7_ISR。
因此,EIRQ0 和 EIRQ1 不能用作两个完全独立的中断向量。
如果同一个 SIUL2 中断组被路由或启用在多个内核上,则两个内核可能会进入同一个中断处理程序并访问同一个 SIUL2 寄存器。如果软件没有实现正确的多核同步和 SIUL2 中断组的所有权,则可能导致意外行为。
但是,每个单独的 EIRQ 通道仍然可以使用 SIUL2 中断标志。正确的中断处理程序应该检查哪个 EIRQ 标志处于挂起状态,并仅清除相应的标志位。状态标志不应全局清除或使用错误的掩码清除,否则可能会影响其他待处理的 EIRQ 标志。
对于多核应用程序,我建议采用以下方法之一:
将整个 SIUL2 中断组(例如 EIRQ0 到 EIRQ7)分配给一个核心。该核心应处理分组中断服务例程,并在需要时通过软件或核心间通信通知另一个核心。
如果您需要将独立的中断路由到不同的内核,请使用来自不同 SIUL2 中断组的 EIRQ 通道,例如,一个通道从 EIRQ0 到 EIRQ7,另一个通道从 EIRQ8 到 EIRQ15(如果您的引脚配置允许的话)。
如果两个核心必须访问相同的 SIUL2 寄存器,则必须通过适当的多核同步机制来保护访问。但总的来说,SIUL2 中断组的单一所有者模型更简洁、更安全。
顺祝商祺!
帕维尔