公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob

TC275调试日志——中断系统3:外部中断

TC275调试日志——中断系统3:外部中断

凌风2018_版主_
Level 4

大家好,上一贴我们已STM比较中断为例,说明了中断的一些配置和中断服务。今天我们来说明外部中断,包括其基本结构和基本配置。

单片机从简单到复杂都有外部中断,这是作为外部事件快速响应的基本功能。275的外部中断在ERU单元里进行统一管理,其基本结构如下图所示:

1.png

 

图1:外部中断结构

从上面的结构图可以看出,ERU单元有三个基本部分:输入,连接矩阵,输出。输入单元对触发源进行选择,对触发事件进行配置;连接矩阵将触发脉冲和标志位分配到输出单元;输出单元将对应的触发事件和标志以一定的方式输出。

事实上该单元是一个统一的外部事件管理单元,触发中断只是其中一个功能。

1、外部事件输入

输入部分有两件事,输入信号选择,输入信号边沿控制。

如图2是输入信号选择:

2.png

 

图2:输入信号选择

我们看到输入信号不仅可以是直接的外部引脚,还有一些其他外设的输出,例如定时输出、ESR、STM比较中断以及CCU60单元的比较输出。因此可以根据需要,相应的对ERU单元进行配置。因为我们要配置外部中断,所以我们需要配置一个引脚作为信号输入。我们配置ERS0的REQ0(P15.4)作为输入信号,写入EICR0.EXIS0=000B。

接下来配置输入边沿,输入边沿检测在ETL中完成,图3是其基本结构:

3.png

 

图3:ETL边沿检测配置

边沿检测的功能还有点复杂,可以选择检测边沿,设置标志位置位与清除逻辑,最后还可以单独产生输出脉冲。

这里以我们的例子来说明:我们需要在外部信号的上升沿触发中断,那么我们需要设置EICR0.REN0=1,使能通道0的上升沿检测;EICR0.FEN0=0,禁用通道0的上升沿检测。另外为了方便使能下降沿自动清除标志位EICR0.LDEN0=1。

由此,一旦检测到P15.4的上升沿,标志位EIFR.INTF0会置位。

2、连接矩阵

边沿检测环节输出了两种信号,标志位INTFx和输出脉冲TRx。连接矩阵就是用来将这两种信号分配、传递给输出。其基本结构如图4所示,因为只是硬件结构,所以不再多说:

4.png

 

图4:连接矩阵

3、输出

接下来说明ERU单元的输出,该单元提供了多种可选的输出,中断也只是其中一种。其基本结构如图5所示:

5.png

 

图5:输出基本结构

如图所示,为输出的基本结构,我们可以看到上边说过的边沿检测和标志位信号总共可以产生四中输出。

第一种ERU_PDOUTy是由标志位产生的,用在其他单元;

第二种ERU_GOUTy是由标志位经过门控(表示该信号有效或者无效)产生的,也是用在其他单元;

第三种ERU_TOUTy是个信号的杂糅,我们看到可以由标志位和触发脉冲来产生,为复杂的外设工作;

第四种ERU_IOUTy则是用来产生中断,其产生是ERU_GOUTy和ERU_TOUTy相与的结果。

输出功能很丰富,可惜我们只需要产生个中断。我们需要在标志位INTF0置位后产生外部中断。我们需要的功能很简单,只需要外部事件匹配后产生中断即可,不需要门控等,那么我们只需要配置门控逻辑为独立的,即IGCR0.IGP0 = 01B。表示检测到P15.4的上升沿后产生中断。然后检查输出信号表,确定中断向量。如图6:

6.png

 

图6:输出信号表

如图6所示,我们可以看出OGU0输出的中断为SRC_SCUERU0。结合上上贴的说明,对该中断的控制寄存器进行配置,包括优先级,使能,检测等内容。寄存器名就是SRC_SCUERU0。然后对应的中断服务函数应该配置为:

IFX_INTERRUPT(SRC_SCUERU0_isr,0,priority)

{

……

__enable ();//立即使能中断

}

SRC_SCUERU0_isr为该中断的地址空间,事实上我没有找到。。。太晚了,下次说明吧。

 

0 点赞
4667 次查看
4 评论
作者