TC3XX 多核ECU的中断向量表解疑

 

关于多核ECU的中断向量表,热心网友问了一个很好的问题

 

今天研究了一下,先说结论: 每个core都有自己单独的memory去存储自己的中断向量表,而且每个core的中断优先级是相互独立的。也就是说,每个core都可以有自己的priority为20的中断

接下来是论证过程:【赶时间的同学可以直接拉到最后看杰伦】

1. 以Tasking编译器为例,安装目录下自带了关于 中断向量表的 linker 文件  【TC3XX 系列最多有6个core,所以为每个core都预留了一个linker文件】

 

2. 打开这些lsl文件,可以看见每个core的 中断向量表是以 INTTAB0, INTTAB1等为起始地址的

core0: 【红框中的001,002,003代表中断优先级】

 

core1:

 

而这个 INTTAB0,INTTAB1等 在 相应的TC3XX.lsl 里面定义,在

 

如果你花点时间去查 infineon的TC3xx的datasheet,每个CORE_n的中断向量表的起始地址是通过寄存器BTV_n定义的。Tasking在startup 函数里面把“0xa00f0000”赋值给了BIV,从而和上面linker 文件的定义匹配上了,说白了就是tasking的人帮我们都写好了,我们买编译器花的钱一部分就是买这个  

3. 然后去查Tasking编译器的手册,它会告诉你在TC3xx 系列,写interrupt函数的时候要同时声明 core和中断优先级,这样编译器才能根据 2 里面提到的 lsl文件 将它放到正确的位置

 https://www.tasking.com/support/tricore/ctc_user_guide_v6.2r2.pdf 

 

总结:

1. 多核ECU,每个core都有自己的BIV寄存器,用来定义该核的中断向量表起始地址。 每个core的中断优先级相互独立,可以相同

2. 在main函数之前的startup函数里面会对BIV寄存器进行初始化,即自定义各核的中断向量表起始地址

3. 在编写c的interrupt函数时,编译器规定要同时声明core和priority

4. linker文件会根据声明的core和priority,将函数存放到正确的地址,从而中断发生时,PC指针会跳转到正确的位置

5. 因为BIV同时在linker和startup函数里面用到,所以如果用户需要修改,两处要匹配。目前我们用的linker和startup函数都是Tasking提供的,所以Tasking已经提前帮我们匹配好了

 

 

 

  • 16
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值