jicheng0622

【原创】飞思卡尔9S12X系列双核中的协处理器XGATE使用方法

2
阅读(9948)

    最近一直在说Kinetis,连续说了好几篇都觉着有点腻歪了,呵呵,所以这次换个新鲜的口味,说说飞思卡尔9s12X系列的xgate。其实飞思卡尔在08年就已经推出了HCS12X系列的16位MCU,而这款单片机的典型特点就是采用了双核架构(MPCore),增加了一个RISC核的高效协处理器(英文名叫co-processor,呵呵,潮一把)——XGATE模块,专门负责处理中断任务,也就是说它的使命就是将主核CPU从执行耗时的中断处理程序的工作中解放出来,而专注于执行与应用相关的任务,这种强大的组合实现了最佳的实时事件处理,而且由于XGATE采用的是RISC指令核,代码高效且主频可以达到主核的2倍,真是牛逼啊,呵呵。

    简单的介绍完毕,如果想进一步深入研究的话建议可以买本邵贝贝老师写的《嵌入式系统中的双核技术》里面对XGATE介绍的还是挺细致的,然后再结合HCS12X系列的datasheet(建议到FSL官网上下一个,本文附件为Xgate的部分中文说明手册需结合datasheet)。其实XGATE简单的用起来的话还是挺容易的,下面就以MC9S12XDP512这款片子为例通过一个简单的IO中断改变LED亮灭的例程(IO中断采用PTH口,LED采用上拉到PORTA口的方式)说说使用XGATE处理中断的完整流程,为了生动些,就主要以图为主了(开发环境采用CW5.0):

(1)建立工程,主要注意以下三步就成,其他均默认即可,其中第三幅图建议选择XGATE IN RAM,提高code 执行速度。

(2)建好的例程里,其实在XGATE模块里是默认加了一个软件中断的SoftwareTrigger0_Handler,按照设置它的方法设置用户定义的中断就可以,不过这需要一定基础,咱还是一步步来吧,心急吃不了热豆腐啊,呵呵。在工程栏里的source文件组下,main.c为主函数文件(这里需要对XGATE进行一下设置);xgate.cxgate文件为XGATE的主文件,在其中编写我们需要的中断服务程序;xgate.h文件是对XGATE用到的一些声明了,下面就开始以PTH口中断管理PORTA口的LED亮灭为例一步一步的来了(注意我写的中文注释部分,也就是需要添加的地儿):

在main.c里

在xgate.cxgate文件里,首先需要添加#include <mc9s12xdp512.h>头文件,应为要用到PORTA和H口得定义,这个一定不要忘了。

const XGATE_TableEntry XGATE_VectorTable[] = {

.......................................................此处又要省略N个声明,只看下面的H口通道设置

........................................................再省略,呵呵

}

在xgate.h文件里

    这样第一个XGATE模块的例程就可以执行了,不过记得这只是个非常简单的例子,其实XGATE的用途很广,性能强大,上面的例子只能算是小试牛刀了。关于这个例子有没看明白的可以下面留言,我会尽量解答,呵呵。

    附件为Xgate的中文说明(部分)和上面的CW5.0的工程(上面代码觉着乱的可以下下来看看实际例子),推荐看看上面提到的那本书。