0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

AURIX Development Studio中的中断处理函数实现

LI1323882 来源:MCU频道 2023-04-19 09:27 次阅读

TriCore中断向量表

由图1可知,TriCore中的BIV寄存器(Base Interrupt Vector Table Pointer )指向中断向量表的入口地址,中断向量大小可设置为32或者8字节,由BIV.VSS位决定。
不同优先级中断向量所对应的地址,可经下方公式计算可得。

if(BIV.VSS==1’b0)
ISR_Entry_PC={BIV[31:1],1’b0}|{PIPN<<5};
else
ISR_Entry_PC = {BIV[31:1],1’b0} | {PIPN<<3};

4cbb94a4-ddec-11ed-bfe3-dac502259ad0.pngFig1

中断定义与实现

使用ADS (AURIX Development Studio) 导入SMU_IR_Alarm工程为例,打开SMU_IR_Alarm.c可以发现是宏IFX_INTERRUPT(isr, vectabNum, prio)用来定义中断处理函数IFX_INTERRUPT(ISR_SMU_Alarm, 0, ISR_PRIORITY_SMU_INT0)。

#defineIFX_INTERRUPT(isr,vectabNum,prio)IFX_INTERRUPT_INTERNAL(isr,vectabNum,prio)
#defineIFX_INTERRUPT_FAST(isr,vectabNum,prio)void__interrupt_fast(prio)__vector_table(vectabNum)isr(void)

编译后,查看MAP文件可知ISR_SMU_Alarm函数存放于0x80001a82,

4cea03de-ddec-11ed-bfe3-dac502259ad0.pngFig2

通过上面的公式计算优先级ISR_PRIORITY_SMU_INT0(10)中断向量的地址为0x802fe140 = 0x802fe000 |(0xa << 5) 。
在优先级ISR_PRIORITY_SMU_INT0(10)中断触发后,TriCore中的PC指针会变成0x802fe140,并执行中断向量中的汇编指令使得PC指针跳转到中断函数ISR_SMU_Alarm中运行。

4d09aee6-ddec-11ed-bfe3-dac502259ad0.pngFig3

CSA运行机制图解

进入ISR_SMU_Alarm中断处理函数时,PCXI,FCX寄存器由于要保存CSA而变化如下,

4d24d6f8-ddec-11ed-bfe3-dac502259ad0.pngFig4 Enter Interrupt

同时CSA链表结构也需相应的调整。

4d4a570c-ddec-11ed-bfe3-dac502259ad0.pngFig4 进入中断处理函数时的CSA链表

当退出ISR_SMU_Alarm中断处理函数后,PCXI,FCX寄存器会恢复,如下所示,

4d6c4358-ddec-11ed-bfe3-dac502259ad0.pngFig5 Exit Interrupt

CSA链表结构也会跟着变化。

4d97da40-ddec-11ed-bfe3-dac502259ad0.pngFig6 退出中断处理函数时的CSA链表

可以发现在进入中断处理函数后,Upper CSA和Lower CSA双双被保存,小编在《TriCore的CSA机制介绍》提到过Upper CSA为硬件自动保存,而Lower CSA需要开发者自己手动保存的,但是查看ISR_SMU_Alarm中断处理函数代码,并没有发现保存Lower CSA的代码,那到底是怎么一回事呢?

voidISR_SMU_Alarm(void)
{
IfxSmu_clearAlarmStatus(IfxSmu_Alarm_Software_Alarm0);/*Clearalarmstatusflag*/
IfxSmu_clearAlarmExecutedStatus(IfxSmu_AlarmExecutionStatus_irq0);/*ClearAlarmExecutionStatusregisterbit*/

IfxPort_setPinState(LED,IfxPort_State_low);/*TurnonLED(LEDislow-levelactive)*/
}

其实这跟编译器有关,在实际使用时,Tasking编译器会为中断和Trap自动生成svlcx保存Lower CSA,如ISR_SMU_Alarm中断处理函数对应的汇编指令所示。

4dc156c2-ddec-11ed-bfe3-dac502259ad0.pngFig7 中断处理函数的汇编指令

总结

在本文中,小编介绍了在ADS (AURIX Development Studio)中如何定义中断处理函数,并解释了中断发生时的PC指针跳转过程和CSA链表结构变化,希望对小伙伴能有所帮助,最后再提醒一下,在开发过程,针对相同CPU,避免对同一中断优先级定义不同的中断处理函数。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5336

    浏览量

    120230
  • 中断
    +关注

    关注

    5

    文章

    898

    浏览量

    41470
  • 函数
    +关注

    关注

    3

    文章

    4327

    浏览量

    62569
  • 指针
    +关注

    关注

    1

    文章

    480

    浏览量

    70551
  • TriCore
    +关注

    关注

    0

    文章

    15

    浏览量

    11748
  • Aurix
    +关注

    关注

    1

    文章

    71

    浏览量

    10910

原文标题:AURIX Development Studio中的中断处理函数实现

文章出处:【微信号:MCU频道,微信公众号:MCU频道】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    无法在AURIXDevelopment Studio调试freeRTOS任务怎么解决?

    我们正在开发 AURIX™ TriCore™ TC389 控制器。 你能否建议需要使用哪个 RTOS 以及首选 IDE调试器来进行开发过程? 此外,我无法在 AURIXDevelopment
    发表于 01-18 07:41

    使用Aurix Development Studio编译总报错的原因?怎么处理

    最新安装了英飞凌的免费编译器Aurix Development Studio,里面自带iLLD,但是首次编译总报错,如下: cannot open #include file "
    发表于 01-29 06:04

    使用AURIX DEVELOPMENT STUDIO的debug时,呈现错误没有找到DAS是为什么?

    在使用AURIX DEVELOPMENT STUDIO的调试功能时,呈现错误:找不到DAS。可是我已经安装了DAS,并且可以配合memtool下载程序,为什么会出现调试错误,是因为版本不匹配吗?我用的是
    发表于 02-02 07:31

    请问AURIXDevelopment Studio如何生成bin文件?

    请大神们赐教,AURIXDevelopment Studio如何生成bin文件?
    发表于 02-02 08:27

    AURIX Development Studio支持在线调试自制的最小系统吗?

    AURIX Development Studio支持在线调试自制的最小系统吗?看到的都是调试英飞凌官方的board,没见到其他的。
    发表于 02-19 07:48

    AURIXDevelopment Studio使用HighTec的gcc,无法生成.map的原因?

    您好, 目前, AURIXDevelopment Studio 使用 HighTec 的 gcc,可以生成 .hex, 但无法生成 .map
    发表于 02-27 06:33

    AURIXDevelopment studio烧录失败的原因?

    当我使用AURIXDevelopment studio进行编译和烧录时,构建已完成,但烧录失败。 错误在于捕获。 您知道如何解决这个问题吗? 我不知道什么是 DUT。
    发表于 03-05 06:42

    Aurix development studio是否支持GCC调试器?

    当我尝试使用 Aurix development studio 调试 Aurix 示例时,我发现只有两个选项 TASKING C/C++ 调试器 winIDEA 调试器 我的问题是,G
    发表于 05-20 06:57

    aurix development studio无法调试,图标为灰色如何解决?

    aurix development studio 无法调试,图标为灰色。 如何解决这个问题?
    发表于 05-20 08:22

    Aurix Development Studio的某些函数(AppInit()、 blinkLED()、 NvmInit())会阻止runShellInterface() 的执行 ,为什么?

    我在 Aurix Development Studio 遇到了一个问题,其中包含的某些函数(AppInit()、 blinkLED()、
    发表于 05-22 07:41

    aurix development studio调试代码时,导致调试中断的原因?

    当我用 aurix development studio 调试代码时,总是出现严重错误,导致调试中断,我不得不重启 studio,然后重新开
    发表于 06-03 08:11

    如何安装AURIXDevelopment Studio

    AURIXDevelopment Studio 安装使用问题安装文件下载软件安装软件使用设置工作文件夹/Workspace查看帮助/Help文档编译/Build调试/Debug调试技巧实用资源
    发表于 01-27 08:16

    AURIX Development Studio的使用方法

    本文主要介绍AURIX Development Studio软件的安装和使用方法。英飞凌针对Tricore系列单片机推出了一款免费的软件——AURIX
    发表于 01-27 07:07

    解决ADS(AURIX Development Studio)程序下载失败的问题

    ADS(AURIX Development Studio)下载到TC264板子,程序可以编译成功,但是下载失败。经检测DAS驱动正常,下图为DAS检测单片机步骤:1.打开DAS Scanner,点击
    发表于 11-24 18:21 31次下载
    解决ADS(<b class='flag-5'>AURIX</b> <b class='flag-5'>Development</b> <b class='flag-5'>Studio</b>)程序下载失败的问题

    AURIXDevelopment Studio 安装使用

    AURIXDevelopment Studio 安装使用
    发表于 12-03 16:21 14次下载
    <b class='flag-5'>AURIX</b>™ <b class='flag-5'>Development</b> <b class='flag-5'>Studio</b> 安装使用