这里写目录标题
1.Irq原理
IRQ(Interrupt Request),即中断请求。在嵌入式系统和计算机体系结构中,IRQ是CPU和外部设备或内部事件之间的一种通信方式。当外部设备或内部事件需要CPU的注意时,它们会发送一个中断请求信号给CPU。CPU在接收到这个信号后,会暂停当前正在执行的程序,转而执行一个特定的中断服务例程(ISR)来处理这个中断请求。处理完毕后,CPU会返回到被中断的程序继续执行。
在AUTOSAR(汽车开放系统架构)中,IRQ(中断请求)是嵌入式系统中的一个重要概念,它允许系统对外部或内部事件做出即时响应。在AUTOSAR的上下文中,IRQ与中断服务例程(ISR)紧密相关,用于处理这些中断事件。以下是对AUTOSAR中IRQ的详细解释:
-
- 中断的基本概念
中断是嵌入式系统中的一个重要机制,它允许CPU暂停当前正在执行的程序,转而执行一段特定的代码(即中断服务例程ISR),以处理某个事件(如外部设备的中断请求、定时器溢出等)。处理完中断后,CPU将返回之前被中断的程序继续执行。
- 中断的基本概念
-
-
AUTOSAR中的中断处理
在AUTOSAR架构中,中断处理是通过中断服务例程(ISR)来实现的。AUTOSAR将中断分为两类:第1类中断:不与操作系统(如RTA-OS)交互,通常具有最高的优先级,并且其处理程序完全由用户编写。这类中断的处理不依赖于 操作系统的支持,因此可以更快地响应。
第2类中断:与操作系统交互,其处理程序通过操作系统提供的接口进行注册和管理。当中断发生时,操作系统会先执行一些内部代码,然后调用用户提供的处理程序。这类中断的处理更加灵活,可以利用操作系统的资源管理机制来避免冲突和死锁。
-
-
-
中断服务例程(ISR)
在AUTOSAR中,ISR是处理中断的特定函数,它必须遵循一定的规范来编写。ISR的编写通常涉及以下几个步骤:定义ISR:在C语言中,ISR通常是一个带有特定属性的函数,如__interrupt或__irq(具体取决于编译器和硬件平台)。
编写处理逻辑:在ISR中编写处理中断事件的代码,如读取设备状态、更新数据等。
恢复现场:在处理完中断后,需要恢复CPU的寄存器状态和被中断的程序上下文,以便继续执行之前的程序。
-
硬件支持:Tc3xx系列IR(Interrupt Router)中断路由器架构如下
2.EB配置以及接口应用
EB配置步骤
一类中断配置步骤
1.配置中断类型
2.配置中断向量表
3.配置服务商
1.配置中断类型
2.配置中断向量表
3.配置服务商
接口应用
eg:配置adc一类中断 中断由CPU处理 配置中断服务函数
1.IrqAdc_Init()//Adc Irq初始化
2. SRC_VADC_G0_SR0.B.SRE = 1 //使能adc中断
3. ISR() //中断服务例程
4. Irq_ClearAllInterruptFlags();//清除中断标志位
以下为中断服务例程代码(需手写 将会调用MCAL包中的中断回调函数 若在EB中配置了notification则使用通知函数实现中断处理即可)
#if IRQ_ADC0_SR0_TOS != IRQ_TOS_DMA
#if((IRQ_ADC0_SR0_PRIO > 0) || (IRQ_ADC0_SR0_CAT == IRQ_CAT2))
#if((IRQ_ADC0_SR0_PRIO > 0) && (IRQ_ADC0_SR0_CAT == IRQ_CAT1))
IFX_INTERRUPT(ADC0SR0_ISR, 0, IRQ_ADC0_SR0_PRIO)
#elif IRQ_ADC0_SR0_CAT == IRQ_CAT2
ISR(ADC0SR0_ISR)
#endif
{
/* Enable Global Interrupts */
ENABLE();
/* Call Adc Interrupt function*/
Adc_RS0EventInterruptHandler(0U);
}
#endif
#endif
以上代码的作用在于根据不同的中断类型进行不同的编译处理,IFX_INTERRUPT在Irq.h中定义,ISR函数则在os相关文件中定义
其中Mcu_17_Gtm_TomChannelIsr 位于MCAL包 …\Mcu\src\Mcu_17_TimerIp.c文件中,该文件中包含GPT、CCU、ATOM、TIM、TOM、STM等模块;
其他模块ISR在各自模块里mcal包里,形如tInterruptHandler
3.总结
本文为博主个人学习总结记录,如有不正,欢迎指正