首页 资讯 厂商 下载 论坛 博客 会展 培训 高校 杂志
元件与制造 | 消费类电子 | 工业控制 | 嵌入式系统 | 模拟IC/电源|无线/通讯
其他IC/制程 | 测试测量 | 显示技术 | 汽车电子 | 医疗电子|便携产品
    你现在的位置:首页 -> 杂志

S12X MCU外设协处理器的配置及编程

作者: 飞思卡尔半导体汽车电子实验室 高级应用工程师 高磊
飞思卡尔半导体中国区 汽车电子工程经理 康晓敦
时间: 2008-01-05 来源: 电子产品世界

 

     摘要:本文扼要介绍了飞思卡尔新一代S12X 16位 MCU的外设协处理器XGATE。着重讨论了XGATE的中断处理机制,以及XGATE与主内核CPU12X的交互。最后给出了XGATE的典型配置及编程方法。
     关键词: 协处理器;XGATE;中断机制;微控制器

    与经典的微处理器S12系列相比,飞思卡尔新一代的16位微处理器系列S12X(E)的性能有深化而全面的提升。最重要的是集成了外设协处理器XGATE。它是一个独立于主CPU (CPU12X)的RISC内核,可作为一个高效的DMA控制器,自治地在外设与RAM之间进行高速的数据传送,和灵活的数据处理;可作为一个单独的算法单元完成某些运算,如通信协议的处理;作为虚拟的外设,用I/O口模拟串行通信口;或对简单的外设进行软件包装以生成功能强大的个性化外设。集成XGATE的目的就是在日益复杂的嵌入式系统中减轻内核CPU12X的负担以增强系统的数据吞吐能力。

      XGATE基本特性
     精简指令集内核
     XGATE是一个16位的精简指令集内核,如图1 XGATE编程模式所示。内核拥有8个16位通用寄存器R0~R7,1个程序计数器PC,一个4位的条件码寄存器CCR。其中R0恒为0,可用于对变量的快速清零或置位。R1和R7有额外用途:XGATE响应中断时,硬件将中断向量表中对应通道的1个16位字装载到R1(通常用作数据指针),将暂存指针装载到R7。内核没有完全功能的栈指针,这里的暂存指针只在调用函数时用于局部变量的空间分配。
图1 XGATE编程模式
     XGATE指令集
     XGATE共有72条独立的指令。指令时钟最高可达100MHz。XGATE的时钟速度总是CPU12X总线速度的2倍。XGATE的 大部分指令是对通用寄存器的操作,为单周期指令。访问存储器的指令为双周期指令。跳转指令视条件而定可能为1或2个周期。XGATE有一些特殊的位提取及插入的单周期指令,很适合于串行通信协议的处理。
     XGATE访问空间
     S12X的全局存储空间共有8MB,XGATE可以访问其中片内的64KB。这64KB包括2KB的片上外设寄存器,30KB的片上闪存和最大32KB的片内RAM,如图2的XGATE全局地址映射所示。注意XGATE不能访问EEPROM空间或片外资源。XGATE的访问空间完全包含在CPU12X的访问空间中。地址仲裁的规则是CPU12X的优先级总高于XGATE。
图2 XGATE全局地址映射
     嵌入式处理器的代码通常在闪存或ROM中运行,但对于XGATE建议代码放在RAM中运行。原因有二:1) CPU12X的代码,在闪存中,若XGATE的代码也在闪存中,则增加了总线冲突的概率;2) CPU12X访问片内RAM时只占用总线带宽的一半,在每个CPU12X的RAM访问周期中,总能让出一个XGATE的RAM访问周期。
     事件驱动XGATE线程
     XGATE的代码执行是由事件驱动的,这里的事件就是中断,由中断来触发XGATE的运行。没有中断,XGATE不执行任何指令,从而也没有功耗。XGATE的代码就是一组中断服务程序,没有主程序或空闲时的循环程序。XGATE的中断服务程序也称作线程。
     互斥信号量
     CPU12X与XGATE之间常用的通信方式是共享资源。由于这两个内核可以独立异步地访问内存及片上外设,就产生了数据完整性的问题。为了保证共享数据的完整性,XGATE集成了8个硬件互斥信号量(Semaphore),用户可以通过硬件信号量来同步两个内核对共享数据的访问。
     信号量有3种状态:释放、CPU12X锁定和XGATE锁定。每个内核在访问共享资源前,应当首先锁定相应的信号量;在访问结束后应当释放相应的信号量。信号量在三种状态之间的转换如下:
1) 信号量锁定
XGATE以专用的指令SSEM加上一个3位立即数来锁定某个信号量。若锁定成功则XGATE的进位标志C置位,否则C被清零。CPU12X通过专门的信号量寄存器来锁定信号量。CPU12X锁定并检查某个信号量的方法可参见下面的C宏定义。
2) 信号量释放
XGATE以专用的指令CSEM加上一个3位立即数来释放某个信号量。CPU12X通过专门的信号量寄存器来释放信号量。同样见下面的C宏定义。
/* CPU12X信号量操作的C宏定义及用法 */
#define SET_SEM(x) (XGATE.XGSEM = 0x0101 << (x))
#define TST_SEM(x) (XGATE.XGSEM & 0x0001 << (x))
#define REL_SEM(x) (XGATE.XGSEM = 0x0100 << (x))
  do {SET_SEM(2); /* 试图锁定信号量2 */
} while (!TST_SEM(2)); /* 检测是否成功锁定信号量2 */
.... /* CPU12X访问共享资源 */
REL_SEM(2); /* CPU12X释放信号量2 */
;XGATE对信号量的汇编代码操作
LOOP1: SSEM #2 ;试图锁定信号量2
BCC LOOP1 ;若锁定不成功,重新试图锁定信号量2
.... ;XGATE访问共享资源
CSEM #2 ;XGATE释放信号量2
值得强调的是信号量与对应资源之间没有任何硬件上的联系,信号量对资源的保护完全体现在用户的代码中。

     XGATE的中断
     所有MCU中断缺省由CPU12X响应。其中绝大多数中断也可提交XGATE处理。每个中断都有相应的配置寄存器INT_CFGDATAx来配置相应的处理内核及中断优先级。图3是典型的 S12X的中断配置及中断响应。其中ILVL[2:0]域定义了中断优先级,优先级对两个内核都有效;RQST域选择中断处理内核。一种典型的应用是置RQST=1,首先将中断提交给XGATE处理。XGATE的中断服务程序处理之后通知CPU12X,并将处理的结果提交CPU12X。这样CPU12X就只需关注于上层的应用控制算法,而与底层硬件密切相关的驱动由XGATE处理,极大提高了系统的性能。
图3 S12X的中断配置及中断相应
     中断向量表
     图4是XGATE的中断矢量表结构。XGATE的每个中断矢量由2个16位字组成。编程时可用一个指针结构数组来描述整个中断矢量表。数组的每个元素由ISR入口地址和ISR数据指针组成。若某中断配置由XGATE处理,则当该中断发生时硬件将ISR入口地址装载入XGATE的程序计数器PC,将ISR数据指针装载入XGATE的R1。这样XGATE的中断服务程序可以带一个数据指针作为参数。这样,一个显著的好处是,可以只用同一段ISR代码来处理同类的若干个中断。XGATE可以通过这个数据指针来区分及处理不同的对象。
图4 是XGATE的中断矢量表结构


     XGATE与CPU12X的相互中断
     XGATE与CPU12X之间可相互中断以便同步运行。XGATE有一个特殊的指令SIF,用于向CPU12X提交中断。通常SIF为XGATE线程的最后一条指令,用以触发CPU12X中断。缺省情况下此时XGATE的中断矢量就对应于XGATE所处理的前一中断。故由SIF所触发的CPU12X的中断服务程序通常不必查询中断源。
     XGATE有8个软件中断源。CPU12X通过置位或清除XGATE软件触发寄存器(XGSWT)中相应的位来触发或清除这8个中断。值得指出的是:由于XGSWT属于片上外设寄存器,所以XGATE也可以通过XGSWT给自己发出中断。
     中断嵌套
     最早推出的XGATE不支持中断嵌套,即只在当前XGATE的线程完成后才能处理别的中断。新的XGATE支持1级中断嵌套,而且,新的XGATE有2套内核寄存器,1套在前台运行,另1套在后台保持被占先前的现场。所以中断过程中没有内核寄存器入栈或出栈。这样2套内核切换的速度很快,仅为2个XGATE的指令周期。
     另外,对应于4到7级中断和1到3级中断分别有XGATE初始暂存指针寄存器XGISP74和XGISP31。与优先级的中断相应时,硬件会将对应的暂存指针寄存器内容装载到XGATE的R7中。

     XGATE的启动及初始化
    XGATE的启动及初始化并不复杂,典型过程如下:
1) XGATE代码下载到RAM中。系统复位后,需要将XGATE的代码从闪存下载到RAM中以提高系统运行性能。
2) 将XGATE的中断矢量表起始地址写到XGATE的矢量基地址寄存器XGVBR中。
3) 初始化XGATE的暂存指针。将优先级4到7的中断程序的局部变量起始地址写入寄存器XGISP74;将优先级1到3的中断程序的局部变量起始地址写入寄存器XGISP31。
4) 配置中断源。欲将某中断提交给XGATE处理,则将中断配置寄存器的RQST置位;同时可以设置中断配置寄存器ILVL[2:0]域为其配置适当的优先级。
5) 启动XGATE。置XGATE控制寄存器XGMCTL中的XGE位为1以启动XGATE。通常也将XGIE位置1以使能XGATE对CPU12X的中断。

     结语
    外设协处理器XGATE显著增强了S12X MCU 系统的整体性能。S12X MCU片上几乎所有的外设中断均可交给XGATE处理。XGATE的编程实际就是为XGATE写一组中断服务程序。XGATE的配置和启动也比较方便,主要是恰当地设置几个核心的XGATE 寄存器。

 

参考文献:
1. Freescale, “MC9S12XEP100 Reference Manual”, Rev. 1.09, 07/2007
2. Ross Mitchell, “Tutorial: Introducing the XGATE Module to Consumer and Industrial Application
Developers”, Freescale application note, Rev. 0, 03/2006



凡本网注明"稿件来源:“电子产品世界或者EEPW”的所有文字、图片和音视频稿
件,版权均属电子产品世界所有,任何媒体、网站或个人在转载、链接、转贴或以其他
方式复制发表时必须注明"稿件来源:“电子产品世界”并署作者名称。

 


     

 
  相关文章  
 ·飞思卡尔提供首款带片上TFT显示驱动的汽车仪表组MCU
 ·飞思卡尔微处理器帮助实现汽车网络高速通信
  ·飞思卡尔16位汽车MCU MC9S12XF系列采用了FlexRay技术?
  ·飞思卡尔MCU集成XGATE模块 提升中断密集应用性能
  ·飞思卡尔微处理器帮助实现汽车网络高速通信?
  ·半导体助汽车电子走向网络化和智能化?
  ·飞思卡尔S12XE系列16位汽车MCU将存储器容量提高一倍
  ·飞思卡尔新款16位MCU集成XGATE协同处理器
  ·微控制器应用中的功耗优化技术
公司简介 | 广告服务 | 投稿须知 | 社长信箱 | 联系我们 | 友情链接
《电子产品世界》杂志社 版权所有 北京东晓国际技术信息咨询有限公司
Copyright ©2002 ELECTRONIC ENGINEERING & PRODUCT WORLD. All rights reserved.
京ICP备060382号
流量统计