目录

  • ERU基础知识
  • ERU引脚
  • ERU Example
  • 微信公众号

ERU基础知识

参考 AURIX™ TC3xx User Manual Part-1

ERU, Event Request Unit, 外部请求单元. TC3XX User Manual 第9章System Control Units (SCU) 第5小节介绍了ERU.

先来看一下系统控制单元SCU, SCU是控制各种系统功能的子模块的集群, 包括:

  • 复位控制, Reset Control (RCU)
  • 陷阱生成, Trap generation (TR)
  • 其他功能的系统寄存器, System Registers for miscellaneous functions (SRU)
  • 看门狗定时器, Watchdog Timers (WDT)
  • 外部请求处理, External Request handling (ERU)
  • 紧急停止, Emergency Stop (ES)
  • 电源管理控制, Power Management Control (PMC)

这些子模块共享一个公共总线接口.

其中, ERU用于在输入引脚的每个上升沿和下降沿生成中断:

  • ERU是多功能的事件和模式检测单元
  • 它的主要任务是根据不同输入上的可选触发事件来生成中断. 比如在输入引脚边沿生成外部中断请求
  • 检测到的事件还可以被其他模块用来触发或门控特定模块的动作

ERU特性列表:

  • 支持根据不同输入上的可选触发事件生成中断
  • 8个独立的输入通道,用于输入选择和触发或门控功能的调节
  • 具有连接矩阵的事件分发,该矩阵定义了导致输出通道y反应的输入通道x的事件
  • 8个独立的输出通道,用于事件组合,事件影响的定义以及对系统的分发(例如,中断产生,定时器触发…)

TC3xx ERU相比TC2xx ERU最重要的变化是:

  • 一些寄存器地址更改
  • ERU输入多路复用器从每个通道的4个输入扩展到6个输入,以容纳其他触发源
  • ERU REQx输入上提供可编程的数字故障过滤(Programmable digital glitch filtering)
  • 能够从ERU生成SMU警报

ERU Overview:

这些任务由以下构建块(building block)处理:

  • External Request Select Unit (ERSx), 每个输入通道都有一个外部请求选择单元(ERSx),可以从6个可能的可用输入中选择一个输入向量
  • Event Trigger Logic (ETLx), 每个输入通道的事件触发逻辑(ETLx)允许定义导致触发事件的转换(边缘选择或通过软件),也可以存储此状态. 此处,所选信号的输入电平被转换为事件(检测到事件=置位事件标志,与原始输入信号的极性无关)
  • Connecting Matrix, 连接矩阵将输入通道生成的事件和状态标志分配到输出通道
  • Output Gating Unit (OGUy), 每个输出通道的输出门控单元(OGUy),结合了可用的触发事件和来自输入通道的状态信息. 一个输入通道的事件可以导致多个输出通道的反应,或者多个输入通道的事件也可以组合成一个输出通道的反应(模式检测). 可以配置不同类型的反应,例如产生中断.

可以从大量输入信号中选择ERU的输入, 这些输入中的16个直接来自输入端口,而其他输入则来自各种外围模块状态信号.

REQxy Digital PORT Input Glitch Filter (FILT), 毛刺滤波器仅在端口(PORTS)可用, 用寄存器EIFILT配置, 用于抑制信号噪声导致PORTS的输入引脚上发生的不必要的快速转换, 类似于延时消抖. 滤波器预分频器可以设置为1到15之间的值,从而提供从10ns ~ >2µs的可能的毛刺特性范围, 通常,3~5 Tfilt的深度就足够了. 默认情况下,它是清除的. 如果清除了DEPTH,则所有过滤器均处于非活动状态:

Event Trigger Logic (ETLx), 事件触发逻辑, 基于边缘检测模块,在该模块中,可以分别启用对上升沿或下降沿的检测. 如果两个使能位都被置位(例如处理触发输入),则两个边沿都会导致触发事件. 四个ETL单元中的每对都有一个关联的EICRy寄存器,该寄存器控制ETL的所有选项(该寄存器还保存关联的ERS单元对的控制位):

Output Gating Unit (OGU), 输出门控单元, 每个OGU的功能可以分成2个部分:

  • Trigger combination, 触发组合, 来自输入通道的所有触发信号TRxy(已启用并定向到OGUy)和模式更改事件(如果启用)在逻辑上进行或运算
  • Pattern detection, 模式检测, 可以启用输入通道的状态标志EIFR.INTFx来参与模式检测. 设置所有启用的状态标志时,将检测到模式匹配

ERU引脚

可用的ERU外部中断引脚其实是非常少的, 自己设计板子的时候万万注意:

  • IfxScu_REQ0A_P15_4_IN
  • IfxScu_REQ0C_P10_7_IN
  • IfxScu_REQ1A_P14_3_IN
  • IfxScu_REQ1C_P10_8_IN
  • IfxScu_REQ2A_P10_2_IN
  • IfxScu_REQ2B_P02_1_IN
  • IfxScu_REQ2C_P00_4_IN
  • IfxScu_REQ3A_P10_3_IN
  • IfxScu_REQ3B_P14_1_IN
  • IfxScu_REQ3C_P02_0_IN
  • IfxScu_REQ4A_P33_7_IN
  • IfxScu_REQ4D_P15_5_IN
  • IfxScu_REQ5A_P15_8_IN
  • IfxScu_REQ6A_P20_0_IN
  • IfxScu_REQ6D_P11_10_IN
  • IfxScu_REQ7A_P20_9_IN
  • IfxScu_REQ7C_P15_1_IN

ERU Example

参考 ERU_Interrupt_1 for KIT_AURIX_TC397_TFT

本例中用P02.1模拟产生方波, 连接P02.1和P02.0, 在P02.0的每一个升降沿产生中断, 中断里面翻转LED.

本例的配置步骤如下图:

Cpu0_Main.c代码如下:

#include "Ifx_Types.h"
#include "IfxCpu.h"
#include "IfxScuWdt.h"IFX_ALIGN(4) IfxCpu_syncEvent g_cpuSyncEvent = 0;#include "Ifx_Types.h"
#include "IfxSrc.h"
#include "IfxScuEru.h"
#include "Bsp.h"#define TRIGGER_PIN                &MODULE_P02,1            /* Pin which can be controlled via debuggerto trigger interrupt                                 */
#define LED                        &MODULE_P13,0            /* LED which gets toggled in Interrupt Service Routine  */#define ISR_PRIORITY_SCUERU_INT0   40                       /* Define the SCU ERU interrupt priority                */
#define REQ_IN                     &IfxScu_REQ3C_P02_0_IN   /* External request pin                                 */typedef struct
{IfxScu_Req_In *reqPin;                      /* External request pin                                             */IfxScuEru_InputChannel inputChannel;        /* Input channel EICRm depending on input pin                       */IfxScuEru_InputNodePointer triggerSelect;   /* Input node pointer                                               */IfxScuEru_OutputChannel outputChannel;      /* Output channel                                                   */volatile Ifx_SRC_SRCR *src;                 /* Service request register                                         */
} ERUconfig;ERUconfig g_ERUconfig;IFX_INTERRUPT(SCUERU_Int0_Handler, 0, ISR_PRIORITY_SCUERU_INT0);
void SCUERU_Int0_Handler(void)
{IfxPort_setPinState(LED, IfxPort_State_toggled);                        /* Toggle LED                       */
}void core0_main(void)
{IfxCpu_enableInterrupts();/* !!WATCHDOG0 AND SAFETY WATCHDOG ARE DISABLED HERE!!* Enable the watchdogs and service them periodically if it is required*/IfxScuWdt_disableCpuWatchdog(IfxScuWdt_getCpuWatchdogPassword());IfxScuWdt_disableSafetyWatchdog(IfxScuWdt_getSafetyWatchdogPassword());/* Wait for CPU sync event */IfxCpu_emitEvent(&g_cpuSyncEvent);IfxCpu_waitEvent(&g_cpuSyncEvent, 1);//initLED, initPinIfxPort_setPinMode(LED, IfxPort_Mode_outputPushPullGeneral);IfxPort_setPinMode(TRIGGER_PIN, IfxPort_Mode_outputPushPullGeneral);IfxPort_setPinState(LED, IfxPort_State_high);IfxPort_setPinState(TRIGGER_PIN, IfxPort_State_high);initTime();//initERU/* Trigger pin */g_ERUconfig.reqPin = REQ_IN; /* Select external request pin *//* Initialize this pin with pull-down enabled* This function will also configure the input multiplexers of the ERU (Register EXISx)*/IfxScuEru_initReqPin(g_ERUconfig.reqPin, IfxPort_InputMode_pullDown);/* Determine input channel depending on input pin */g_ERUconfig.inputChannel = (IfxScuEru_InputChannel) g_ERUconfig.reqPin->channelId;/* Input channel configuration */IfxScuEru_enableRisingEdgeDetection(g_ERUconfig.inputChannel);          /* Interrupt triggers onrising edge (Register RENx) and  */IfxScuEru_enableFallingEdgeDetection(g_ERUconfig.inputChannel);         /* on falling edge (Register FENx)  *//* Signal destination */g_ERUconfig.outputChannel = IfxScuEru_OutputChannel_0;                  /* OGU channel 0                    *//* Event from input ETL0 triggers output OGU0 (signal TRx0) */g_ERUconfig.triggerSelect = IfxScuEru_InputNodePointer_0;/* Connecting Matrix, Event Trigger Logic ETL block *//* Enable generation of trigger event (Register EIENx) */IfxScuEru_enableTriggerPulse(g_ERUconfig.inputChannel);/* Determination of output channel for trigger event (Register INPx) */IfxScuEru_connectTrigger(g_ERUconfig.inputChannel, g_ERUconfig.triggerSelect);/* Configure Output channels, OutputGating Unit OGU (Register IGPy) */IfxScuEru_setInterruptGatingPattern(g_ERUconfig.outputChannel, IfxScuEru_InterruptGatingPattern_alwaysActive);/* Service request configuration *//* Get source pointer depending on outputChannel (SRC_SCUERU0 for outputChannel0) */g_ERUconfig.src = &MODULE_SRC.SCU.SCUERU[(int) g_ERUconfig.outputChannel % 4];IfxSrc_init(g_ERUconfig.src, IfxSrc_Tos_cpu0, ISR_PRIORITY_SCUERU_INT0);IfxSrc_enable(g_ERUconfig.src);while(1){IfxPort_setPinState(TRIGGER_PIN, IfxPort_State_toggled);waitTime(TimeConst_1s);}
}

编译运行, 短接P02.0和P02.1, 可以看到LED每秒翻转一次.

微信公众号

欢迎扫描关注我的微信公众号, 及时获取最新文章:

AURIX TC397 SCU 之 ERU 外部中断相关推荐

  1. AURIX TC397 SCU 之 Watchdog 看门狗

    目录 看门狗基础 TC397 Watchdog 微信公众号 看门狗基础 文档参阅 TC3XX User Manual 的9.4节, 看门狗Watchdog Timers (WDT)是System Co ...

  2. STM32单片机外部中断配置讲解

    2019独角兽企业重金招聘Python工程师标准>>> 单片机外部中断简介 所谓外部中断,就是通过外部信号所引起的中断,如单片机引脚上的电平变化(高电平.低电平).边沿变化(上升沿. ...

  3. hal库开启中断关中断_「正点原子NANO STM32开发板资料连载」第十章 外部中断实验...

    1)实验平台:ALIENTEK NANO STM32F411 V1开发板 2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第十章 外 ...

  4. nrf52840 gpiote如何配置中断输入_STM32第四章外部中断管理

    点击上方"果果小师弟",选择"置顶/星标公众号"干货福利,第一时间送达!STM32F4 的每个 IO 都可以作为外部中断的中断输入口,这点也是 STM32F4 ...

  5. LPC1768外部中断与GPIO中断

    LPC1768的外部中断严格来说只有四个,分别是EINT0,EINT1,EINT2,EINT3,技术手册上有如下说明 控制这四个外部中断靠以下寄存器 这三个寄存器的0 1 2 3位分别代表中断的0 1 ...

  6. 一起学mini2440裸机开发(十)--mini2440外部中断实验

    我今天一整天都在试着将TQ2440的那种处理中断的方法(即安装中断向量表)移植到MDK中的mini2440,但是一直没成功,这种方法一直没成功,后来又想,还是先从最简单的开始吧,就是不利用中断向量表, ...

  7. 2440裸机编程之四 外部中断

    2440有60个中断源(有的中断源还有几个子中断源),中断原理如下图: 中断源使中断源请求寄存器(SRCPND)的相应位置一,中断模式寄存器(INTMOD)选择是IRQ还是FIQ模式,如果是IRQ,在 ...

  8. STM32外部中断与各通道对应关系

    EXTI0_IRQn的值,其实就是EXTI0中断向量在中断向量表中的位置(STM32技术参考手册中断向量表position栏中的数值) 一:外部中断使用配置过程: (1)配置时钟信号 (2)引脚属性 ...

  9. 嵌入式linux 添加中断,《嵌入式linux应用程序开发完全手册》中断控制器操作(外部中断)学习笔记...

    <嵌入式linux应用程序开发完全手册>中断控制器操作(外部中断)学习笔记 一.ARM中断体系 当一个"异常"发生时,或者说当收到一个中断触发信号时,ARM9将会自动完 ...

最新文章

  1. 怎么复制链接伟html,index.html
  2. 删除Referencing outlet
  3. 在JFinal的Controller中接收json数据
  4. scp 将数据从一台linux服务器复制到另一台linux服务器
  5. npm包管理机制引质疑:又一安装程序中发现恶意代码,开发者账户频遭劫持
  6. 【JavaSE03】Java中分支语句-思维导图
  7. C++用Prim算法实现无向图最小生成树
  8. 研磨数据结构与算法-03栈与队列
  9. Python基础——timeit模块
  10. svn服务器设置忽略文件夹,如何使用SVN忽略目录?
  11. DM数据库实例迁移教程
  12. 免费U盘数据恢复软件有哪些,如何免费恢复U盘的数据
  13. 蒟蒻的NOIP2017游记
  14. temp不停生成临时文件 win10_c盘temp文件夹自动生成大量TMP文件。
  15. 墨子科技成果是计算机,近年来取得了哪些科技成就_现代史_我爱历史网
  16. 过去的过去,未来的未来
  17. vim的复制、粘贴操作
  18. excel操作技巧(指定填写数字,指定填写IP,指定填写协议)
  19. Win10打印机使用异常?windows系统如何删除更新补丁,驱动人生解决方案
  20. MATLAB/Python MK检验程序

热门文章

  1. android性能测试~monkey测试
  2. 如何去做一个完整的网站 SEO 优化方案?
  3. 「RISC-V Arch」RISC-V 规范结构
  4. 快速熟悉H3 BPM的结构
  5. Nginx+Tomcat的配合使用
  6. canopen6.0-PDO发送
  7. html5岗位需求,HTML5培训分享H5的优势和岗位要求
  8. 云邦互联可以申请免费空间
  9. 【用Python模拟实现人生重开模拟器】
  10. Wh问句,疑问句,祈使句,感叹句,10