如何配置及使用 S12X MCU 上的外设协处理器 XGATE
- 格式:pdf
- 大小:140.15 KB
- 文档页数:5
9S12XS128单片机开发工具包清华Freescale MCU/DSP 应用开发研究中心9S12XS128单片机开发工具包 (1)概述 (3)9S12XS128单片机 (3)9S12XS128开发工具包组件 (3)9S12XS128开发板及与PC通信 (4)9S12XS128 开发板 (4)开发板的硬件连接 (5)PC机的设置 (6)监控程序及监控命令详解 (8)命令详解 (8)复位、中断向量表 (12)用户可以使用的RAM空间 (12)编译器CodeWarrior for HCS12 使用方法入门 (13)建立工程文件 (13)编写main.c 程序 (15)定义存储空间分配 (17)应用程序的编译 (18)向开发板下载程序 (20)运行应用程序 (21)概述这里描述的是一套9S12XS128系列单片机开发系统套件。
以后的更新的版本见清华Freescale单片机应用开发研究中心的网站:。
开发系统主要由两个部分组成,分别是调试下载用的TBDML和开发用目标板。
其中TBDML的使用请参见文档“BDM for S12(TTBDM)用户手册V 34.pdf”。
目标板是有异步串行口的驱动的基本系统。
针对9S12XS128芯片我们编写了9S12XS128目标板监控程序,可以方便地完成应用系统的开发。
用户可以在此基础上设计自己所需的目标母板,完成项目的初期开发。
应用软件完成后,用开发工具板擦除监控程序,下载最终的应用程序。
9S12XS128单片机S12XS 16位微控制器系列针对一系列成本敏感型汽车车身电子应用进行了优化。
S12X产品满足了用户对设计灵活性和平台兼容性的需求,并在一系列汽车电子平台上实现了可升级性、硬件和软件可重用性、以及兼容性。
S12XS系列可以经济而又兼容地扩展至带XGate协处理器的S12XE系列单片机,从而为用户削减了成本,并缩小了封装尺寸。
S12XS系列帮助设计者迅速抓住市场机遇,同时还能降低移植成本。
清华 F r e e s c a l e M C U /D S P 应用开发研究中心清华Freescale MCU/DSP 应用开发研究中心1前言本讲义是“嵌入式操作系统与微控制器”这门课的配套实验教材,围绕MC9S12DP256/DG128核心子板和母板共安排了16个实验,引导学生从最基本的汇编语句开始,逐步熟悉嵌入式软硬件的设计方法。
我们不是巨人,站在我们的肩膀上能看到的只是最浅显的一个层面。
但对于一个对嵌入式领域十分感兴趣却又惴惴不安不敢入内的人来说,我们还是可以起到一个领路人的作用。
如果能够一丝不苟地做完一部分实验并切实钻研了其中的奥妙,一个学期下来会有很大的收获。
但一日建不成罗马,没有打破砂锅问到底的精神也成不了“大牛”。
需要指出的是,这16个实验充其量也就是个敲门砖而已,真正要成为嵌入式设计的高手,需要不间断地吸收新东西且不断地实践之,在疑问中找到成长的路径。
为了利用有限的实验时间获得最大的收益,我们希望每一个做实验的人都能做到以下四点:1. 做实验之前熟读相关的资料,做到胸有成竹,最好能在课前准备好程序2. 不放过实验过程中遇到的每一个问题,尽量尝试着自己去解决3. 不拘泥于本书中的实验要求,敢于按照自己的想法做相关的实验4. 课后写好实验报告,着重总结实验中遇到的问题和获得的经验。
翻开下一页,迈出千里之行的第一步。
清华 F r e e s c a l e M C U /D S P 应用开发研究中心清华Freescale MCU/DSP 应用开发研究中心2目录第一部分:基本实验实验1. 熟悉实验环境...............................................................................................................3 实验2. S12汇编语言基础.......................................................................................................4 实验3. C 程序编写. (5)第二部分:S12 I/O 外设模块实验实验4. GPIO 通用输入输出口及IRQ 中断............................................................................6 实验5. SCI 串行口实验...........................................................................................................9 实验6. 用TIMER 实现精密定时..........................................................................................12 实验7. A/D 转换实验.............................................................................................................16 实验8. SPI 同步串行外设接口..............................................................................................18 实验9. I 2C 总线实验..............................................................................................................24 实验10. PWM 模块实验..........................................................................................................28 实验11. MSCAN 模块的自循环模式......................................................................................33 实验12. Keyboard 实验............................................................................................................38 实验13. 动态数码管的显示.....................................................................................................40 实验14. Flash 在线编程.. (41)第三部分:uC/OS-II 实验实验15. uC/OS-II 在S12上的移植.........................................................................................43 实验16. 综合实验 —— uC/OS-II 下多I/O 任务实现.. (44)清华 F r e e s c a l e M C U /D S P 应用开发研究中心清华Freescale MCU/DSP 应用开发研究中心3实验1. 熟悉实验环境一、实验目的 熟悉从工程建立到调试的整个过程。
S12的输入/输入端口(I/O口)I/O端口功能可设置为通用I/O口、驱动、内部上拉/下拉、中断输入等功能。
设置I/O口工作方式的寄存器有:DDR、IO、RDR、PE、IE和PS。
DDR:设定I/O口的数据方向。
IO :设定输出电平的高低。
RDR:选择I/O口的驱动能力。
PE:选择上拉/下拉。
IE:允许或禁止端口中断。
PS:1、中断允许位置位时,选择上升沿/下降沿触发中断;2、中断禁止时且PE有效时,用于选择上拉还是下拉。
I/O端口设置1、A口、B口、E口寄存器(1)数据方向寄存器DDRA、DDRB、DDREDDRA、DDRB、DDRE均为8位寄存器,复位后其值均为0。
当DDRA=0、DDRB=0、DDRE=0 时A口、B口和E口均为输入口。
否则,A口、B口、E口为输出口。
当DDRA、DDRB、DDRE的任何一位置1时,则该位对应的引脚被设置为输出。
例如,将A口设置为输出口,则其C语言程序的语句为:DDRA=0xff;(2)A口、B口、E口上拉控制寄存器PUCRPUCR为8位寄存器,复位后的值为0。
当PUPAE、PUPBE、PUPEE被设置为1时,A口、B口、E口具有内部上拉功能;为0时,上拉无效。
当A口、B口、E口为地址/数据总线时,PUPAE和PUPBE无效。
(3)A口、B口、E口降功率驱动控制寄存器RDRIVRDRIV为8位寄存器,复位后的值为0,此时,A口、B口、E口驱动保持全功率;当RDPA、RDPB、RDPE为1时,A口、B口、E口输出引脚的驱动功率下降(4)数据寄存器PORTA、PORTB、PORTEPORTA、PORTB、PORTE均为8位寄存器,复位后的值为0,端口引脚输出低电平;要使引脚输出高电平,相应端口对应位应该置1。
由于PE0是/XIRQ、PE1是IRQ,因此,PE0和PE1只能设置为输入。
2、H口寄存器(1)H口I/O寄存器PTH任意时间读/写。
当某一引脚对就的数据方向位设置为1时,读操作返回的是这个端口寄存器的值;否则,读的是引脚的值。
车载双路CAN总线冗余网关的设计卢玉传;杜志岐;樊江滨;侯学轶【摘要】为了使现有车载网关的实时性、稳定性和可靠性得到进一步的提高,基于双核16位单片机MC9S12XDP512设计了车载双路CAN总线冗余网关方案.在设计中采用了双路CAN总线冗余备份方案,并且还采用了嵌入式系统设计的双核技术,开启了单片机内的协处理器XGATE来处理各种中断,使主处理器集中进行数据的处理工作.该设计方案简单易行、便于实现,且通用性强,也有利于开发和维护.【期刊名称】《车辆与动力技术》【年(卷),期】2012(000)001【总页数】6页(P45-50)【关键词】汽车;双路CAN总线;双处理器;SAE J1939协议;冗余网关【作者】卢玉传;杜志岐;樊江滨;侯学轶【作者单位】中国北方车辆研究所,北京100072;中国北方车辆研究所,北京100072;中国北方车辆研究所,北京100072;中国北方车辆研究所,北京100072【正文语种】中文【中图分类】TP393随着电子信息技术和网络技术的发展,现代汽车的功能越来越多,系统也变得越来越复杂,这些优越的功能是通过各种各样的电子设备(各种电子控制盒、测试诊断、仪表显示等设备)来实现的,许多电子设备之间通常要通信以便进行数据的共享和命令的传达与接收等,当车上的电子设备变得越来越多的时候,布线就变得很繁琐复杂,可靠性大大降低,成本大幅上升.为了解决汽车的上述问题,实现电子设备间快速的信息交换,增强车身电子系统的可靠性和安全性,车载总线网络的概念被提了出来.在现有的车载网关中,大部分都是单处理器的网关,而比较少见的双处理器网关[1]也是基于单路CAN总线的,为了进一步提高车载网关系统的实时性、稳定性和可靠性,设计中采用了双处理器双路CAN总线冗余设计方案.1 硬件设计1.1 系统结构与原理框图汽车上各种电子设备对网络信息传输速率要求不一,发动机控制器、自动变速器控制器、ABS控制器、安全气囊控制器等对实时性的要求很强,而前后车灯的开关、车门开闭、车窗升降、座位调节等简单事件对实时性的要求要宽松得多.汽车动力系统中采用的高速CAN总线,其信息传输速度设置为500Kbps,其主要连接对象是:发动机、自动变速器、ABS/ASR、巡航系统、电动转向系统,等等[1].动力系统CAN总线的控制对象都是与汽车行驶控制直接相关的系统,对信号的传输要求有很高的实时性,它们之间存在着很多的信息交互.车身系统中采用的低速CAN 总线,其信息传输速率为250Kpbs,主要连接对象是:前后车灯控制开关、电动车窗升降开关、中央门锁与防盗控制开关、电动座椅控制开关、电动后视镜控制开关、温度 (空调)控制开关、组合开关及驾驶员操纵信号采集系统、仪表显示器,等等[1].车身系统CAN总线的控制对象主要是低速电机、电磁阀和开关器件,它们对信息传输的实时性要求不高,但数量较多,为了保证动力系统的实时性,应将这些实时性要求低的电控单元与汽车动力系统分开.为了保证该网关系统的可靠性,防止因为现场环境恶劣致使插头松动、传输介质损坏或CAN总线驱动器损坏而遭致CAN通信的破坏,采用了冗余通信机制.系统在每个CAN子网路都使用2套总线 (CAN 1、CAN 2),每套包含独立的总线电缆、总线驱动器和总线控制器,可以实现物理介质、物理层、数据链路层全面冗余[2]. 系统中每个子网的2套总线采用双CAN冗余热备份方式运行:在系统正常上电工作以后,一个CAN控制器作为系统默认的CAN(称之为主CAN 1);另一个为系统的备用CAN(称之为从CAN 2),作为主CAN1的冗余.这样,每一瞬时系统中有且仅有一路CAN通道在工作,另一路处于监听状态 (正常工作时)或故障状态 (发生故障时)[2].当系统正常工作时,主CAN 1处于工作状态.当主CAN 1发生故障时,切换至从CAN 2,使之处于工作状态.如上电检测到主CAN 1故障,则从CAN2自动进入工作状态.这样在一套总线发生故障时,另一套总线自动开始工作,保证整个系统的通信正常进行,提高了系统的可靠性.系统的结构与原理框图如图1所示.图1 系统结构与原理框图1.2 硬件实现基于对系统结构和功能的分析,按照优先选用片上系统SOC的设计理念,要求内部至少集成了4个CAN控制器的MCU来作为系统的主控芯片,因此,选用Freescale公司的16位112引脚LQFP封装的MC9S12XDP512单片机.该单片机内部集成了5个同时兼容CAN2.0A/B协议的CAN控制模块,同时还将协处理器XGATE模块集成到S12XD系列中,目的是减轻主处理器S12X CPU的工作负担,提高系统的数据吞吐能力,从而支持双处理器的嵌入式开发.XGATE基于RISC内核,能够独立于主中央处理器单元进行编程,可以执行独立的算法完成运算.XGATE能够辅助支持内存RAM与外接设备之间的高速数据传送,同时完成指定的数据处理,例如通信协议的转换,等等.这使得XGATE可以作为DMA控制器[3].此外,MC9S12XDP512单片机内部还有32K的RAM、4K的EEPROM、6个异步串行通信接口SCI、2个数模转换器 (8通道10位数模转换器一个,16通道10位数模转换器一个)、3个串行外设接口SPI、1个IC/OC加强定时器、1个8通道脉冲带宽调制器、1个周期中断定时器、2个内置总线时钟[4].如此丰富的片上资源,方便了硬件的设计,也为系统工作的稳定可靠提供了硬件保障.图2 CAN网关接口电路原理图硬件设计中的CAN网关的电路原理图如图2所示.MC9S12XDP512单片机负责对CAN控制器的初始化,并控制数据的接受、数据转发、地址管理、消息拆装与重组、发送,等等.片内的CAN控制器0和CAN控制器1分别连接动力CAN网络的CAN1和CAN2,CAN控制器2和CAN控制器3分别连接车身CAN网络的CAN1和CAN2,这样实现了CAN网关的双路冗余设计.CAN收发器选用Philips公司的TJA1050.TJA1050是CAN协议控制器和物理总线之间的接口,是一种标准的高速CAN收发器.TJA1050可以为总线提供差动发送性能,为CAN控制器提供差动接收性能.TJA1050是PCA82C250和PCA82C251高速CAN收发器的后继产品.在电路设计中,将TJA1050的第8引脚S接地,使其工作在高速模式,第3引脚VCC接+5V直流电源,为了滤掉电源中的电压纹波,得到稳定的电压,在此引脚并联0.1 μF滤波电容.在TJA1050中涉及到一个超时定时器,用以对TXD端的低电位 (此时CAN总线上为显性位)进行监视.该功能可以避免由于系统硬件或软件故障而造成TXD端长时间为低电位时总线上所有其他节点也将无法进行通信的情况出现.这也是TJA1050与82C250相比较改进较大的地方之一.TXD端信号的下降沿可启动该定时器.当TXD端低电位持续的时间超过了定时器的内部定时时间时,将关闭发送器,使CAN总线回到隐性电位状态.而在TXD 端信号的上升沿定时器将被复位,使TJA1050恢复正常工作[5].为了消除总线阻抗,提高抗干扰能力,总线两端分别配置120 Ω的匹配电阻.为了提高系统在复杂电磁环境下的抗干扰能力,在CAN控制器与收发器之间添加2个高速光耦6N137,TJA1050的TXD引脚与其中一个6N137的OUT引脚相连,该光耦的IN引脚与MC9S12XDP512的 CAN控制器 TXCANx相连接(x=0,1,2,3),TJA1050的RXD与另一个光耦的IN引脚相连,其OUT引脚连接RXCANx,在2个光耦的OUT与Vdd引脚间连接390Ω的匹配电阻.2 软件设计2.1 双处理器技术的网关软件实现在程序开发中主处理器S12XCPU和协处理器XGATE都要使用内存RAM,这就涉及到了共享和互斥的问题,所以在使用前,必须先对RAM进行分配和保护. MC9S12XDP512的主处理器和协处理器都可以访问片内32K的RAM.通过设置边界寄存器的值,可以将其划分为 XGATE独享 RAM、S12X独享RAM、XGATE 与 S12X共享 RAM和 S12X独享RAM 4 部分[3],如图3 所示.图3 RAM分配区其中RAMXGU为XGATE RAM边界高地址寄存器,RAMSHL为S12X与XGATE共享RAM低地址寄存器,RAMSHU为S12X与XGATE共享RAM高地址寄存器.软件设计中的数据结构按照各自的使用特性,分配到不同的RAM块中.值得注意的是,2个处理器共享一部分RAM,在访问时会出现临界区问题,此时要借助系统内集成的8个硬件信号量进行互斥管理.在芯片RAM中开辟2个缓冲区,分别作为接收缓冲区和发送缓冲区.由于协处理器和主处理器都需要使用这2个缓冲区,所以设在XGATE与S12X共享的区域.接收缓冲区用于存放来自2个子网的未处理的数据,发送缓冲区用于存放处理后等待发送的数据[1].其中,接收缓冲区又进一步分为高速缓冲区和低速缓冲区,分别用来存储来自动力CAN网络和车身CAN网络的数据.系统中数据的流向如图4所示.数据从各个子网接收后,经过过滤,按照源网络的信息速率的高低存放到接收缓冲区的高速区或低速区.经过协议转换、连接管理等处理后的数据存放在发送缓冲区.数据发送过程按照CAN总线规范重组数据帧格式,将其送到与目的子网连接的CAN节点缓冲区以等待发送.图4 系统内数据流向为了缓解系统工作时的数据阻塞和延迟问题,采用双处理器工作方式,启用MC9S12XDP512芯片中的协处理器XGATE模块,在主处理器S12X CPU对系统进行初始化 (包括对协处理器的初始化)后,主处理器与协处理器并行协调工作,实现车载网关的功能.其中数据的接收和发送由协处理器XGATE完成.当与子网连接的CAN节点接收到数据后触发接收中断,由XGATE接管,并且进行数据过滤等工作.待初步处理结束后,数据按照源网络的波特率存放到高速或低速接收缓冲区.当主处理器完成数据处理以后,主处理器通过软中断调度XGATE进行数据发送的工作.这样就可以使S12X CPU专心进行数据处理工作了,包括协议转换,连接管理,等等,此过程结束后触发XGATE软中断.综上所述,2个处理器并行协调工作,实现网关功能.2个处理器的工作方式是不同的,S12X CPU的工作是主动的,一直进行的;而XGATE的工作是被动的,是由中断触发的[1].图5 主处理器工作流程图主处理器工作流程如图5所示,可以分为2个部分[1]:1)初始化.CAN控制器MSCAN的设置,是将CAN控制器设置为接收数据后触发中断的方式[4];协处理器XGATE的相关寄存器设置,是设定XGATE的中断基地址寄存器XGVBR,这是协处理器能够正确响应中断的基础.同时,通过对应中断的中断请求配置数据寄存器的RQST位置1和PRIOLVL[2∶0]的选择,分别将此中断的处理权交给协处理器,并且设置合适的优先级,最后使协处理器开始工作.2)数据处理.首先分配时间片循环查询高速和低速接收缓冲区,其次取出数据后提取标识符域,作为关键字查路由协议转换表,最后分析可知该数据帧需要简单的数据转发,还是建立连接,抑或是地址声明,等等.按照要求进行处理后,将其和目的子网编号一起存放在发送缓冲区,然后向协处理器触发相应软中断,通知协处理器来发送数据.需要说明的是,高速接收缓冲区需要比低速接收缓冲区分配更多的时间,以保证实时性.通过协处理器XGATE以响应中断的方式,完成2个CAN子网的数据的接收与发送工作.注意:任意时刻系统中连接动力CAN网络的MSCAN0_12和MSCAN1_12最多只有1个在工作 (系统正常通信时,只有1个工作.当某一CAN子网的两路CAN总线同时故障时,2个CAN控制器都脱离CAN总线,系统通信中断,所以应该及时处理每次故障,避免此种情况的发生),同样连接车身CAN网络的MSCAN2_12和MSCAN3_12也是最多只有1个在工作,它们之间的切换,是通过CAN总线错误报警中断程序来实现的.开始时需要编写各中断的中断处理程序,并将该程序起始地址和参数存放到协处理器中断向量表的相应位置.CANx(x=0,1,2,3)中断处理线程interrupt void CANx_Thread(DATA *date)的函数功能为从CAN节点接收缓冲区提取数据,对比过滤表 (在数据接收过程中,协处理器XGATE使用数据包过滤表去除各个子网的内部通信,从而降低网络流量,防止系统阻塞).若不是源网的内部通信,按照它所属源网络的波特率存放到高速或低速数据接收缓冲区,同时释放CAN节点接收缓冲区.将该线程地址和参数 (接收缓冲区地址)存放到协处理器XGATE中断向量表的相应域.软中断处理线程 interrupt void Software_Triggerx(DATA *date)完成CANx的发送.提取发送缓冲区内的数据,按照CAN总线规范重新组织数据帧格式,按照目的子网号发送到相应CAN节点的发送缓冲区等待发送.将线程地址和参数(发送缓冲区地址)存放到协处理器XGATE中断向量表的相应位置[1].编写完这些子程序以后,让协处理器进入等待状态,当发生接收中断或是主处理器通过软中断通知协处理器发送数据时,协处理器进入工作状态完成数据接收和发送的工作.协处理器工作流程如图6所示.图6 协处理器工作流程图2.2 双路CAN冗余机制的软件实现通过双路总线冗余机制来提高CAN总线通信的可靠性,关键在于故障检测及CAN总线的自动切换.判断总线故障时,利用了CAN总线控制器的故障界定状态机制.图7给出了CAN总线错误处理流程图.当有错误报警中断时,如果总线关闭,则CAN控制器自动与发生故障的CAN总线脱离,然后由通道切换程序启动另一路CAN总线来完成原来的通信任务,同时,要对故障的总线及时处理,以备下次切换使用.数据帧要重新接收或发送,以保证数据帧不丢失.如果总线没有关闭,仅仅是处于错误状态时,通过软件使CAN控制器与发生故障的CAN总线脱离,然后将MSCAN复位,重新初始化MSCAN模块,使其进入正常工作模式,继续完成原来的任务,为保证数据帧不丢失,数据帧还要重新接收或发送[2].总线的故障检测和自动切换由协处理器XGATE来完成.为了保证通信的绝对可靠,当故障的总线关闭以后,要及时对故障处理,以备当目前切换到的新总线出现故障时,也能够重新切换到原来的总线 (已经修复).图7 总线错误处理流程图考虑到当2条总线同时故障时,系统将频繁切换CAN通道,为了避免此种情况的发生,在软件设计时设置了一个记录切换次数的变量Switch_Numbers,在设定的时间内,若Switch_Numbers>6,就不再进行通道的软切换,并发送报警信息[2].3 结束语通过对当前车载网关的调研,发现当前车载网关绝大多数采用了单处理器技术,并且是单总线结构的,即使是较为少见的基于双处理器技术的车载网关在设计中也是采用单总线结构的,为了提高系统的可靠性、实时性、稳定性,在此设计中基于MC9S12XDP512单片机采用了双处理器双总线方案.采用了双总线冗余通信机制,即两路CAN总线都连接到系统上,其中一路作为主CAN,另一路作为备用的从CAN,系统上电以后,主CAN自动进入工作状态,从CAN处于监听状态 (正常工作时)或故障状态 (故障时).当主CAN发生故障时,自动切换到从CAN,从而形成了双CAN冗余热备份运行方式,从而可以提高系统的通信可靠性.设计中采用了嵌入式开发的双处理器技术,使协处理器XGATE全面负责各种中断响应,如数据接收中断、数据发送中断、数据溢出中断和错误报警中断,等等,而主处理器S12X CPU专注与数据的处理,这样可以大大地提高系统的实时性和稳定性.参考文献:[1] 李光鑫.基于双处理器的 CAN网关设计与实现[D].吉林大学硕士学位论文,2010.4.[2] 冯源,向桂林,李军.基于C8051的冗余CAN总线智能节点设计 [J].航天计算技术,2008,38(5):107-111.[3] 邵贝贝,宫辉,等著.嵌入式系统中的双核技术[M].北京:北京航空航天大学出版社,2008:110-143.[4] 王宜怀,刘晓升.嵌入式系统——使用HCS12微控制器的设计与应用[M].北京:北京航空航天大学出版社,2008.3.[5] Philips Semiconductors.TJA1050High speed CAN transceiver datasheet[CP/DK].Philips Electronics N.V.1999.。
MC9S12XETATD模块MC9S12XET ATD模块1、ATDCTL0:ATD控制寄存器0写该寄存器将导致当前转换序列终止。
写操作:任何时候WRAP[3-0]:循环转换起始通道控制位当做多通道时,WRAP[3-0]位选择转换哪一个通道后回绕到AN0通道。
2、ATDCTL1:ATD控制寄存器1写该寄存器将导致当前转换序列终止读操作:任何时候ETRIGSEL: 外部触发源选择位。
这个控制位用于选择外部触发源为AD转换通道之一或是ETRIG3-0之一。
ETRIGSEL=1:选择ETRIG3-0之一为外部触发源。
ETRIGSEL=0:选择AD转换通道之一为外部触发源。
SMP_DIS:内部采样电容放电选择位。
SMP_DIS=1 内部采样电容在采样前放电。
次操作会占用两个A TD时钟周期。
SMP_DIS=0 内部采样电容在采样前不放电。
ETRIGCH[3-0]:外部触发通道选择位当ETRIGSEL=1时,由这四位指定ETRIG3-0中的一个作为触发源;当ETRIGSEL=0时,3写该寄存器将导致当前转换序列终止。
读操作:任何时候AFFC:ATD模块标志位快速清除选择位。
AFFC=1 若CMPEx=0,则对某个通道的结果寄存器的一次读取操作将导致相应的CCFx 标志位清零。
若CMPEx=1,则对摸个通道的结果寄存器的一次写入操作将导致相应的CCFx标志位清零AFFC=0 向CCFx写1将清除相应标志位。
ICLKSTP:ATD转换停止模式控制位ICLKSTP=1 AD转换在停止模式是继续转换ICLKSTP=0 如果AD转换序列正在停止模式进行时,实际的转换序列将自动停止并且当退出停止模式是复位。
ETRIGLE:外部触发源触发方式选择位ETRIGLE=1 电平触发ETRIGLE=0 边沿触发ETRIGP:外部触发源极性选择位ETRIGP=1 上升沿或高电平触发ETRIGP=0 下降沿或低电平触发ETRIGE:外部触发源模式使能选择位ETRIGE=1 使能外部触发模式,若所选择的外部触发源是某个AD 通道,该通道的数字输入缓冲器将被使能。
如何配置及使用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 ;试图锁定信号量2BCC 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的中断服务程序可以带一个数据指针作为参数。
如此一个显著的好处是可以只用同一段ISR代码来处理同类的若干个中断。
XGATE可以通过这个数据指针来区分及处理不同的对象。
图2-2是XGATE的中断矢量表结构的相互中断XGATE与CPU12X的相互中断XGATE与CPU12X之间可相互中断以同步它们的运行。
XGATE有一个特殊的指令SIF,用于向CPU12X提交中断。
通常SIF为XGATE线程的最后一条指令,用以触发CPU12X中断。
缺省情况下此时XGATE的中断矢量就对应于此前XGATE所处理的中断。
故由SIF所触发的CPU12X的中断服务程序通常不必查询中断源。
XGATE有8个软件中断源。
CPU12X通过置位或清除XGATE软件触发寄存器(XGSWT)中相应的位来触发或清除这8个中断。
值得指出的是:由于XGSWT属于片上外设寄存器,所以XGATE也可以通过XGSWT给自己发出中断。
中断嵌套中断嵌套最早推出的S12XD中的XGATE不支持中断嵌套,即只在当前XGATE的线程完成后才能处理别的中断。
而新的S12XE中的XGATE支持1级中断嵌套,即级别较高的4到7级的中断可以占先1到3级的中断。
需要说明的是:新的XGATE中的内核寄存器实际有2套。
1套在前台运行,另1套在后台保持被占先前的现场。
所以中断过程中没有内核寄存器入栈或出栈。
这样2套内核切换的速度很快,仅为2个XGATE的指令周期。
另外,对应于4到7级中断和1到3级中断分别有XGATE初始栈指针寄存器XGISP74和XGISP31。
相应优先级的中断响应时,硬件会将对应的栈指针寄存器内容装载到XGATE的栈针R7中。
3. 启动及初始化XGATEXGATE的启动及初始化并不复杂,典型过程如下:1)XGATE代码下载到RAM中系统复位后,需要将XGATE的代码从Flash下载到RAM中以提高系统运行性能。
这由CPU12X完成。
在CodeWarrior(Freescale的IDE)中这部分代码与对全局变量的初始化类似,位于源文件_start12.c的初始化代码_Startup()中。
_Startup()最后会调用主函数main()。
2)将XGATE的中断矢量表起始地址写到XGATE的矢量基地址寄存器XGVBR中;3)初始化XGATE的栈指针将优先级4到7的XGATE中断的栈底地址写入XGATE起始栈针寄存器XGISP74;将优先级1到3的XGATE中断的栈底地址写入XGATE起始栈针寄存器XGISP31。