TC275调试日志——中断系统2:STM0比较中断

本文深入探讨了中断系统的工作原理,重点介绍了中断服务函数的构成及中断配置流程。通过STM0比较中断的例子,阐述了如何设置中断优先级、服务选择和中断使能,展示了中断处理函数的实现细节,为读者提供了中断配置的参考方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天我们继续上贴的中断系统进行说明,上贴已经说明了中断系统的工作方式以及中断仲裁。今天我们来说明中断的应用。

上贴说过,中断控制单元ICU会对中断节点的中断进行处理,将仲裁胜出的中断对应的信息(包括优先级SRPN、校验ECC、中断节点号SRN index)发送到中断服务者(CPU或者DMA)。相应的中断服务者接受中断后会返还这些信息,这些信息的承载以及中断服务是通过中断服务者的接口来完成的。

那么中断服务者是怎么根据这些信息就可以判断中断类型,并进行相应的中断服务呢?我们知道在51中,每个中断都有相应的地址,触发中断后以该地址为入口进行相应的中断处理。275也是相同的,我们说过在CPU初始化中要初始化中断向量表,该表其实就是中断的入口地址。实际的中断处理,就是将中断处理成中断向量,然后查表都得到中断入口地址进行中断处理。

首先来说明中断服务,我们来看一下中断服务函数的构成:

IFX_INTERRUPT(isr, vectabNum, prio)

该函数是在编译器的C文件中定义的,全都是汇编,大家有空可以研究一下:

我们只关注,该函数的三个参数:ISR表示中断所在的地址:

 

如图为STM0中断对应的地址空间;vectabNum为向量表号,也就是cpu内核,275有3个内核所以该参数为0、1、2,通常取0即可;prio为优先级,0-255共有256个优先级,可以根据需要自行定义。

我们来看一个中断处理函数:

IFX_INTERRUPT( Ifx_STM0_Isr,  0  ,  IFX_CFG_ISR_PRIORITY_STM0_COMPARE0)

{

uint32 stmTicks;

stmTicks= (uint32)(stm0CompareValue * 1);

IfxStm_updateCompare(&MODULE_STM0,IfxStm_Comparator_0,IfxStm_getCompare(&MODULE_STM0, IfxStm_Comparator_0) + stmTicks);//更新比较值

timeMicSec[0]++;//记录定时数目

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

}

这便是我之前提到过的STM比较中断,三个参数为STM0的中断地址空间、CPU0、以及优先级,这里定义为102.

在回头看一下中断的配置,中断的配置无非是配置SRC寄存器,包括中断优先级、中断服务者选择以及中断使能。其具体流程为:

(1)写入中断优先级,SRC.SRPN;

(2)写入中断服务选择,SRC.TOS;

(3)清除中断标志位,SRC.CLRR=1;

(4)中断使能,SRC.SRE=1;

下面是STM0比较中断的例子:

 

在该函数的划线部分,完成了中断配置,两个函数的展开如下:

 

流程和我们说的一致,大家在今后的中断配置可以参考这种方式。今天的内容就先到这里,下一贴我们试试对外部中断进行配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值