如何配置及使用 S12X MCU 上的外设协处理器 XGATE

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

如何配置及使用S12X MCU 上的外设协处理器XGATE

〔摘要摘要〕〕本文全面扼要地介绍了飞思卡尔新一代16位 MCU S12X 上的外设协处理器XGATE 。在阐明其工作原理的基础上着重讨论了XGATE 的中断处理机制以及XGATE 与主内核CPU12X 的交互。最后给出了XGATE 的典型配置及编程方法。

〔Abstract 〕A powerful peripheral coprocessor XGATE is integrated in the latest Freescale 16 bit S12X MCU family. A comprehensive XGATE rationale is briefly reviewed in this paper. Special focuses are XGATE interrupt principles and communication scheme between main core CPU12X and XGATE. To help readers to get quick familiar with XGATE usage, typical XGATE configuration and coding methods are also provided in this paper.

关键词: 协处理器, XGATE, 中断机制

Key Words: Coprocessor, XGATE, Interrupt Mechanism

与经典的微处理器S12系列相比,飞思卡尔新一代的16位微处理器系列S12X(E) [1]的性能有深入而全面的提升。其中最重要的性能增强是集成了外设协处理器XGATE 。

XGATE 是一个独立于主CPU (CPU12X)的可编程RISC 内核。XGATE 可作为一个高效的DMA 控制器,自治地在外设与RAM 之间进行高速的数据传送,并在数据传送的过程中进行灵活的数据处理;XGATE 也可作为一个单独的算法单元完成某些运算,如通信协议的处理;XGATE 还可以作为虚拟的外设,如用I/O 口模拟串行通信口,或对简单的外设进行软件包装以生成功能强大的个性化外设。集成XGATE 的目的就是在日益复杂的嵌入式系统中减轻CPU12X 的负担以增强系统的数据吞吐能力。 本文首先对XGATE 的特性作了全面而紧凑的介绍。然后详细说明XGATE 的中断机制。最后讨论了如何启动及初始化XGATE 。

1. XGATE 基本特性[2]

精简指令集内核精简指令集内核

XGATE 是一个16位的精简指令集内核(见图1-1 XGATE 编程模式)。内核拥有8个16位通用寄存器R0~R7,1个程序计数器PC ,一个4位的条件码寄存器CCR 。其中R0恒为0,可用于对变量的快速清零或置位。R1和R7有额外用途:XGATE 响应中断时,硬件将中断向量表中对应通道的1个16位字装载到R1(通常用作数据指针),将栈指针装载到R7。

条件码寄存器

图1-1 XGATE 编程模式

XGATE 指令集指令集

XGATE 共有72条独立的指令。指令时钟最高可达100M 。XGATE 的时钟速度总是CPU12X 总线速度的2倍。XGATE 的 大部分指令是对通用寄存器的操作,为单周期指令。访问存储器的指令为双周期指令。跳转指令视条件而定可能为1或2个周期。XGATE 有一些特殊的比特提取及插入的单周期指令,很适合于串行通信协议的处理。

XGATE 访问空间访问空间

S12X 的全局存贮空间共有8MB ,XGATE 可以访问其中片内的64KB 空间。这64K 包括2K 的片上外设寄存器,30K 的片上闪存和最大32K 的片内RAM (见图1-2 XGATE 全局地址映射)。注意XGATE 不能访问EEPROM 空间或片外资源。XGATE 的访问空间完全含在CPU12X 的访问空间中。地址仲裁的规则是CPU12X 的优先级总高于XGATE 。

0x00000x0800

全局存贮空间

图1-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(Carry Flag)置位,否则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

值得强调的是:信号量与对应资源之间没有任何硬件上的联系,信号量对资源的保护完全体现在用户的代码中。

2. XGATE的中断

所有MCU中断缺省由CPU12X响应。其中绝大多数中断也可提交给XGATE处理。每个中断都有相应的配置寄存器INT_CFGDATAx来配置相应的处理内核及中断优先级。图2-1是典型的 S12X的中断配置及中断响应。其中ILVL[2:0]域定义了中断优先级,优先级对两个内核都有效;RQST域选择中断处理内核。一种典型的应用是置RQST=1,首先将中断提交给XGATE处理。XGATE的中断服务程序处理完后通知CPU12X,并将处理的结果呈交CPU12X。这样CPU12X就只需关注于上层的应用控制算法,而与底层硬件密切相关的驱动由XGATE处理。这样极大提高了系统的性能。

图2-1 S12X的中断配置及中断相应

中断向量表

中断向量表

图2-2是XGATE的中断矢量表结构。XGATE的每个中断矢量由2个16位字组成。编程时可用一个指针结构数组来描述整个中断矢量表。数组的每个元素由ISR入口地址和ISR数据指针组成。若某中断配置由XGATE处理,则当该中断发生时硬件将ISR入口地址装载入XGATE的程序计数器PC,将ISR 数据指针装载入XGATE的R1。这样XGATE的中断服务程序可以带一个数据指针作为参数。如此一

相关文档
最新文档