首先对Xgate的专业术语解读
XGATE Request(请求)
来自外围模块的服务请求,由S12X_INT模块指向XGATE(见图10-1)。 每个XGATE请求都尝试激活某个优先级的XGATE通道。
XGATE Channel(通道)
XGATE模块中的资源(即信道ID号,优先级,服务请求矢量,中断标志),它们与特定的XGATE请求相关联。
XGATE Channel ID(通道ID)
与XGATE通道关联的7位标识符。在S12XE设计中,有效的频道ID范围从$ 0D到$ 78。
XGATE Priority Level(优先级)
优先级从1到7,与XGATE通道相关联。在S12X_INT模块中选择XGATE通道的优先级。XGATE寄存器组寄存器组由寄存器R1-R7,CCR和PC组成。每个中断级别与一个寄存器组相关联。
XGATE Channel Interrupt(通道中断)
由XGATE模块上运行的代码序列触发的S12X_CPU中断。
XGATE Software Channel(软件通道)
与任何外围服务请求无关的特殊XGATE通道。软件通道由其软件触发位触发,该位在XGATE模块中实现。
XGATE Semaphore(信号量)
一组硬件触发器,可由S12X_CPU或XGATE专门设置。
XGATE Thread(线程)
一个代码序列,在接收到XGATE请求后由XGATE的RISC内核执行。
XGATE Debug Mode(调试模式)
一种特殊模式,XGATE的RISC内核暂停以进行调试。此模式启用XGATE的调试功能。
XGATE Software Error(软件错误)
XGATE能够检测由不稳定软件引起的许多错误情况。这些错误条件将导致XGATE占用程序执行并将中断标记为S12X_CPU。
MC9S12X的Datasheet中对于Xgate的部分解读:
XGATE模块的核心是RISC处理器,能够访问MCU的内部存储器和外设(见上图)。 RISC处理器始终保持空闲状态,直到由XGATE请求触发。然后它执行与请求的XGATE通道关联的代码序列(线程)。每个线程可以在1到7的优先级上运行。有关如何为XGATE线程选择优先级的信息,请参阅S12X_INT部分。高优先级线程(中断级别4到7)可以中断低优先级线程(中断级别1到3)。高优先级线程不可中断。 XGATE硬件维护和恢复中断线程的寄存器内容。
为了表示任务完成,XGATE能够向S12X_CPU发送中断。每个XGATE通道都有自己的中断向量。有关详细信息,请参阅S12X_INT部分。 XGATE模块还提供一组硬件信号量,这些信号量是确保与S12X_CPU共享RAM位置或外设时数据一致性所必需的。
XGATE的RISC核
RISC内核是一个16位处理器,带有一个非常适合数据传输,位操作和简单算术运算的指令集。它能够访问MCU的内部存储器和外设,而不会阻止来自S12X_CPU1的这些资源。 只要S12X_CPU和RISC内核访问相同的资源,RISC内核就会停止运行,直到资源再次可用为止。
XGATE为MCU的内部RAM提供高访问速率。 根据总线负载,RISC内核每个S12X_CPU总线周期最多可以执行两次RAM访问。
总线访问外设寄存器或闪存的速度较慢。 不能超过每个S12X_CPU周期一个总线访问的传输速率。
XGATE模块用于执行由外围模块或软件触发的短中断服务程序。
XGATE RISC内核模型如上图所示。处理器提供一组七个通用寄存器(R1-R7),用作累加器和索引寄存器。另外的第八个寄存器(R0)与值“$ 0000”相关联。
寄存器R1和R7具有附加功能。 R1预先加载了通道服务请求向量的初始数据指针(见下图)。如果当前通道的中断优先级在7到4的范围内,则R7预先加载XGISP74的内容,或者如果当前通道的中断优先级在3到1的范围内,则预加载XGISP31的内容。
其余的通用寄存器将在每个线程的开头重置为未指定的值。
16位程序计数器允许寻址64 KB的地址空间。
条件代码寄存器包含四个位:符号位(S),零标志(Z),溢出标志(V)和进位(C)。条件代码寄存器的初始内容未定义。
内存映射
XGATE的RISC内核能够访问64K字节的地址空间。
XGATE向量块为每个XGATE通道分配一个起始地址和一个数据指针。 它在XGATE存储器映射中的位置可以通过XGVBR寄存器进行调整(详细可自行查找“XGATE向量基址寄存器(XGVBR)”)。 上图显示了矢量块的布局。 每个向量由两个16位字组成。 第一个包含服务例程的起始地址。 在执行服务程序之前,该值将被加载到PC指针中。 第二个字是指向服务例程的数据空间的指针。 在执行服务程序之前,该值将被加载到寄存器R1中。
信号量(Semaphores)
XGATE模块提供一组八个硬件信号量。 这些信号量提供了一种机制来保护在程序执行的两个并发线程之间共享的系统资源; 一个线程在S12X_CPU上运行,另一个在XGATE RISC内核上运行。
每个信号量只能处于以下三种状态之一:“Unlocked”,“S12X_CPU锁定”和“XGATE锁定”。 S12X_CPU可以通过XGATE信号量寄存器检查和更改信号量的状态(XGSEM,请自行查找“XGATE信号量寄存器(XGSEM)”)。 RISC内核通过其SSEM和CSEM指令完成此操作。
下图说明了有效的状态转换。
下图给出了XGATE硬件信号量的典型用法示例。
系统上正在运行两个并发线程。 一个在S12X_CPU上运行,另一个在RISC内核上运行。 它们都有一个访问相同系统资源的关键代码段。
为了保证系统资源一次只能由一个线程访问,关键代码序列必须嵌入信号量锁定/释放序列中,如图所示。