收藏 分享(赏)

Windows CE下基于SPI总线的双机通信技术.pdf

上传人:HR专家 文档编号:6206935 上传时间:2019-04-02 格式:PDF 页数:5 大小:419.83KB
下载 相关 举报
Windows CE下基于SPI总线的双机通信技术.pdf_第1页
第1页 / 共5页
Windows CE下基于SPI总线的双机通信技术.pdf_第2页
第2页 / 共5页
Windows CE下基于SPI总线的双机通信技术.pdf_第3页
第3页 / 共5页
Windows CE下基于SPI总线的双机通信技术.pdf_第4页
第4页 / 共5页
Windows CE下基于SPI总线的双机通信技术.pdf_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、Windows CE下基于SPI总线的双机通信技术 55 Windows CE下基于SPI总线的双机通信技术 李伟 ,陈明 ,李平 ,李伟 (1西北工业大学自动化学院,陕西西安710072;2西安交通大学软件学院,陕西西安710049) 摘要:智能分析仪器要求在Windows CE系统下能够通过SPI总线实现副板与主板、主板与主板之间的 数据传输。首先介绍了SPI双机通信的机理,其次分析了Windows CE下的中断处理机制的流程,最后 从内核态的中断服务程序、驱动层的中断服务线程、流接口函数、驱动加载等方面实现了Windows CE下 SPI双机通信的驱动程序。实验表明,两个智能分析仪器的主

2、板之间能够可靠、稳定地传输数据。 关键词:SPI总线;双机通信;Windows CE;逻辑中断 中图分类号:TP33 文献标识码:A 文章编号:10008829(2010)03005504 Communication Technology of Dual Machines Based on SPI Bus in Windows CE LI Wei ,CHEN Ming ,LI Ping ,LI Wei (1School of Automation,Northwestern Polytechnical University,Xian 710072,China; 2School of Softwa

3、re,Xian Jiaotong University,Xian 710049,China) Abstract:Intelligent analysis instrument requires the data could be transmitted between subboard and main board or among mainboard based on SPI bus in Windows CESPI communication principle of dual machines is introduced firstlyThen,the interrupt handlin

4、g mechanism in Windows CE is analyzedAt last,SPI driver of dual machines in Windows CE is implemented from the aspect of the kemel interrupt service routineinterrupt service threadstream interface and driver loadTest results show that the data can be communicated stably and reliably between dual mac

5、hines Kev words:SPI bus;communication of dual machines;Windows CE;system interrupt 在工业控制领域,以微处理器和内嵌操作系统为 核心的智能分析仪器以其操作自动化、具有自校准功 能、友好的人机对话能力、远程数据传输、丰富的总线 接口等优点为传统的工业控制仪表带来了新的发展空 间。本文介绍的智能分析仪器是对工业现场稀有气体 的检测与处理,通过内置的有线网络或无线网络定时 传输采样数据。在智能分析仪器中,硬件处理器选择 高性能低功耗的$3C2410A,外围扩展模块包括电源 板、数据采集板、以太网卡、CAN总线、RS-4

6、85、GSM模 块等。软件是基于Windows CE嵌入式实时操作系统 开发集数据与语音于一体的集中监控平台。由于本系 收稿日期:20090818 作者简介:李伟(1980一),女,河南郑州人,博士研究生,主要研 究方向为嵌入式系统开发;陈明(1939一),男,江苏南京人,教 授,博士生导师,主要研究方向为测控技术传感器及惯性技术 中新型惯性器件的研究;李平(1982一),男,河南郑州人,硕士 研究生,主要研究方向为计算机软件;李伟(1977一),男,四川 崇州人,博士研究生,主要研究方向为嵌入式系统。 统很多模块的控制接口都是基于SPI总线的,如电源 板、CAN控制模块等,因此在Window

7、s CE系统下实现 SPI总线的驱动程序是非常必要的。 l SPI双机通信的硬件设计 串行外设接口SPI(serial peripheral interface)是由 Motorola开发的全双工同步串行总线,它大量运用在 与E PROM、ADCDAC、实时时钟(RTC)和显示驱动 器之类的外设器件的通信上。SPI总线具有4个管 脚,分别定义为:SCK(串行时钟线)、MOSI(主出从人 数据线)、MISO(主人从出数据线)和nSS(从器件选择 线)。 11$3C2410A中SPI总线的传输规范 $3C2410A具有两个SPI通道,每个都有各自独立 的8位移位寄存器用于发送和接收。SPI数据传输

8、依 赖于串行时钟,而串行时钟又可以通过寄存器设置为 不同的模式。串行时钟的设置主要由SPICON寄存器 中的CPOL和CPHA完成。SPI具有4种传输格式,分 别对应CPOL:CPHA=00、01、10、11不同的时钟设 56 测控技术2wo年第29卷第3期 置。CPOL用于设置串行时钟的空闲电平的极性; CPHA用于设置串行时钟的相位以及采样点。如果 CPOL=0,表明串行时钟的空闲状态为低电平;如果 CPOL=1,表明串行时钟的空闲状态为高电平。如果 CPHA=0,第1位数据在串行时钟的第1个跳变沿(上 升或下降)被采样;如果CPHA=1,第1位数据在串行 时钟的第2个跳变沿(上升或下降)

9、被采样(参见图 1)。SPI主机的时钟相位、极性要和与之通信的从机 保持一致。 空闲电平采样点 CycIe 1 2 1 3 1 4 f 5 1 6 1 7 1 8 f SPICLK r_广r_r_r_r_厂_1 MOSl MISO 旦 尽 摹 Il !玉 望 : CPOL=0,CPHA=0(格式A) 空闲电平采样点 cyc1e I 1 12 1 3 1 4 1 5 1 6 1 7 1 8 1 SP1CLK 广_广r_r_r_r_ MOSI MISO : 默 玉 五!五 基 占 矗g 堡: CPOL=0,CPHA=I(格式B) 图1 SPI总线传输的格式 12 SPI双机通信硬件设计的要点 在S

10、PI数据传输过程中,一个SPI总线可以连接 多个主机和从机,但在同一时刻只能有一个主机和一 个从机通信。在设计双机通信时,需要特别注意nSS 管脚的设置。 nSS是针对本机被其他设备选择为从机时的片选 线。在本机被选择为从机后,nSS必须为低电平,并在 整个传输过程中保持低电平。如果在数据传输中nSS 信号变为高电平,传输将被中止。这种情况下,从机返 回到空闲状态并将任何接收到的数据丢弃。 图2为双机通信硬件连接示意图。配置为主机的 $3C2410A必须选择相应的管脚用作nSS特殊功能,并 使其上拉为高电平,只有这样,主$3C2410A才能真正 执行主机的功能。从$3C2410A的从机片选信号

11、来自 主$3C2410A的普通IO口输出GPE5。当GPE5输出 为低电平时,使能从机;当GPE5为高电平时,禁止从 机,并且主机在发送完一个字节后,需要触发片选信号 完成由低电平向高电平的一次变化,激活从机的移位 寄存器。而且,主机的nSS信号不能用作普通IO。 在本系统中,主机$3C2410A的SPI控制寄存器 SPCON0配置为0x38,即中断方式读写SPI,CPOL=0, CPHA=0(格式A),使能主机模式,同时向发送寄存 器写10次数据以初始化设备,否则,发送不成功。从 机$3C2410A的SPI控制寄存器配置为0x20,即中断 方式读写,CPOL=0,CPHA=0(格式A),使能

12、从机模 式。 主$3C2410A 从$3C2410A 图2 主机与从机的SPI总线连接示意图 2 Windows CE驱动程序的中断处理 SPI接口作为一种外围设备比较适合流式驱动模 式。这类驱动具有一组相同的导出函数,其与文件系 统的应用接口匹配,应用程序通过文件系统的操作完 成对设备的访问 J。为提高系统的运行效率,SPI驱 动程序采用中断方式向Windows CE操作系统请求服 务。 21 Windows CE的中断驱动体系结构 在Windows CE中,存在着逻辑中断(SYSINTR)的 概念。当中断发生时,内核的OEM适配层(OAL)需 把物理中断信号映射成OEM定义的逻辑中断号,然

13、后 供操作系统和驱动程序调用。Windows CE把中断处 理分成两部分:运行于内核模式的中断服务例程 (ISR)和运行于用户模式的中断服务线程(IST)。前 者的职责主要是把物理中断请求转化为逻辑中断标识 并返回给内核,然后内核根据逻辑中断号激发事件队 列中正在等待该事件的IST。IST在设备驱动程序或 应用程序模块中编写,执行了大多数逻辑中断的处理。 这样,针对同一个中断分两次处理,缩短内核态下对中 断处理的时间,提高中断响应的实时性I2 J。 22 Windows CE中断处理的过程 Windows CE的一次中断处理起始于硬件中断产 生,终止于IST调用InterruptDone()函

14、数 。整个中 断处理的流程如图3所示。 图3 Windows CE中断处理的流程 硬件外设产生中断,内核的异常处理器捕获到 该中断。 内核部分的中断服务处理器调用OAL层的 OEMIntermptHandler()函数,这个函数主要功能是返 回一个逻辑中断号。 Windows CE下基于SPI总线的双机通信技术 57 ISR返回一个逻辑中断号SYSINTRXXX,内核 根据ISR返回值决定如何处理中断。ISR可能的返回 值中的SYSINTRNOP表示中断不与任何已注册的 ISR关联,内核收到该中断,但不做处理;SYSINTR RESCHED表示内核重新调度的计时器到期,将重新 调度。 内核触发

15、中断服务处理器唤醒IST线程,一旦 启动,它将创建一个事件(Event)等待该事件被激活, 一旦被激活,将唤醒IST。 当IST被唤醒后,将开始处理与中断相关的程 序,完成与外设的数据输入输出的交换。 当IST完成后,它将用关联的逻辑中断号SYS- INTRXXX来调用InterruptDone()函数。 内核调用OAL层的0EMInteuptD0ne()函数 完成中断处理。 3 SPI双机驱动的实现 SPI双机驱动的编写分为两部分,即处于内核态 下的中断服务例程(ISR)和处于用户态下的中断服务 线程(IST)。 31在OAL层实现ISR部分 在中断处理中,ISR部分的代码实现位于OAL 层

16、。首先需要在Oalintrh,Oalintrinc和Oalintrainc 中增加SPI的逻辑中断号,逻辑中断标识符以及宏定 义。其次,需要在相关的函数,如OEMInterruptHandler (),OEMInterruptEnable(),OEMInterruptDisable(), OEMInterruptDone()中添加对SPI中断的支持。 在中断头文件oalintrh中添加SPI的中断宏 定义,供ISR返回调用。 #define SYSINTRSP10(SYSINTRFIRMWARE+22) 注意,定义的中断号要满足该文件中Ma pIrq2SysIntr中所要求的范围。WinCE4

17、2版本支持的 最大中断数为32,WinCE50支持的最大中断数为64。 OEMInterruptHandler()函数位于一WINCER一 00TPLATFORMSMDK2410KERNELHALARM 目录中的arminitC文件中。当中断发生时,采用统一 的ISR人口函数OEMInterruptHandler()。其主要功能 是清除系统中断控制器中的中断标志,屏蔽产生的中 断,向内核返回逻辑中断号。针对SP10实现的ISR 为: OEMInterruptHandler(unsigned int ra) 一 N断中断源是否为SP10 else if(IntPendVal=INTSRCSP10

18、) s24101NT一rSRCPND=BIT_SP10; if(s2410INT一rINTPNDBITSPIO) s2410INT一rlNTPND=BI LSP10: s2410INT一rlNTMSK J=BIT SP10: return(SYSINTRSP10); OEMInterruptEnable()、OEMInterruptDisable ()、OEMInterruptDone()函数位于一WINCEROOT PLATFORMSMDK2410KERNELHAL目录中的 cfwc中。 这3个函数的主要功能是使能中断,屏蔽中断通 道,清除中断标志,重新使能中断。 32 IST层的实现 IS

19、T的实现一般是在驱动程序或应用程序中完成 的,运行于用户态。IST被设计成一个独立的线程单 元,大多数时候是空闲的,只有操作系统通知IST有中 断发生时,IST才开始工作。首先使用CreateEvent创 建事件,然后调用Interruptlnitialize()函数关联事件和 逻辑中断号。IST线程使用waitF0rSin e0bject()函 数等待事件的激活,完成中断处理。IST再调用Inter ruptDone()函数通知内核一次中断处理结束。SPI的 中断处理线程关键代码如下: DWORD SPIIntrThread(PVOID pArg) 创建SPI中断事件 gSPIIntrEve

20、nt=CreateEvent(NULL,FALSE,FALSE, NULL); 初始化SPI中断:注册中断事件,允许SPI中断 if(!(InterruptInitialize(gSPISysIntr,gSPIIntrEvent,0, 0); while(1) ret=waitForSin eO bject(gSPIIntrEvent,INFINITE); if(ret!=WAITOBJECT一0)I l(gbKillIST= TRUE) CloseHandle(gSPIIntrEvent); return 0; switch(SPIStatus) case SPIWRITE: while(v

21、pSSPregsrSPSTA0&0x01)!=1); SetEvent(gSPIEvent); SPIError:SPINOERROR; break; case SPIREAD: while(v pSSPregsrSPSTA0&0x01)!=1); SetEvent(gSPIEvent); SPIError=SPINOERROR; break; default: break; InterruptDone(g_SPISysIntr); return 1; 58 测控技术2010年第29卷第3期 33 SPI驱动程序中的流接口函数 应用程序使用Windows CE的文件API函数与流 接口驱动进行

22、通信,达到应用程序访问驱动程序及操 作硬件的目的。因此,流接口驱动程序必须实现一组 标准函数,为两者之间的通信做准备。SPI总线采用 流驱动方式,故必须实现标准的接口函数,也称“SPI 的DLL接口”,女日SPIInit()、SPIDeInit()、SPIOpen ()、SPIClose()、SPIIOControl()、SPIWrite()与SPI Read()等。 最后,在SPI的流驱动目录下建立一个SPIdef文 件,将DLL中的接口函数添加到这个文件中。当SPI 编译通过时,该驱动程序的驱动就具有了和应用程序 通信的接口函数。 (1)SPI的控制函数。 应用程序通过函数SPIIOCon

23、trol()选择SPI的通 道,主从模式,读写数据的方式,传输频率。针对双机 通信,两者的模式要一致,频率要相同,均为100 kHz。 (2)SPI写函数。 应用程序通过SPIWrite()函数向SPI总线发送 数据。首先查询SPSTA0的传输准备标志是否置位, 如果置为1,说明SPI总线准备好,可以开始传输。然 后通过waitForsingle0 bject()函数等待SPI起始条件 发送是否成功,如果成功就复位SPI事件,开始传输数 据。当主机向从机发送时,主机最后需要发送一个由 低到高的脉冲变化将数据锁存到从机。详细的代码如 下所示 while(v_pSSPregs一rSPSTA0&0x

24、01)!=1); for(count=0;countrSPTDAT0= pWriteBuflir: vpIOPregs一rGPEDAT&=(OxlrGPEDAT l=(Oxl5); pWriteBuffer+: 从机的写函数比主机的写函数要简单得多,不需 要对从机片选信号处理,只需向从机数据寄存器中写 入要发送的数据即可。 (3)SPI读函数。 应用程序通过SPIRead()函数从SPI总线上接 收数据,方法跟发送数据类似。首先查询SPSTA0的 传输准备标志是否置位。当SPI总线准备完成,中断 产生,主、从机可以读取数据。中断标志位的清除通过 向SPI发送寄存器中写入任意1字节实现。 34

25、SPI接口驱动的加载 Windows CE冷启动后,内核NK根据注册表中 HKEYLOCALMACHINEinit键下的内容陆续启动 其他进程,包括设备管理器Deviceexe。Deviceexe负 责加载所有的流驱动,对流驱动的加载是通过总线枚 举器(BusEnumdl1)实现的。当BusEnumdll被激活 后,将枚举HKEYLOCALMACHINEDriversBuilt In键下所有的子键,并加载相应的驱动程序。SPI的 资源信息记录在注册表中。BusEnumdll通过扫描注 册表项HKEYLOCALMACHINEDriversBuihIn SPI下的键值对SPI进行初始化。 在Win

26、dows CE的驱动目录下的dirs文件中添 加系统对SP10的编译支持; 在注册表文件中添加SP10的注册信息: HKEYLOCALMACHINEDriversBuiMnSPI Index”=dword:1驱动程序的索引 Prefix =”SPI”设备文件名前缀 DLL = SPIdll”SPI动态链接库名 Order =dword:0SPI加载顺序 在PlatformBIB文件中添加对SPI的支持使得 SPI打包到最终生成的映像文件中。 sPIDLL$(一FLATRELEASEDIR)SPIDLL NK SH 4 实验验证 当SPI加载到Windows CE内核中以后,用户就可 以通过应用

27、程序的API函数,如CreateFile()、Open ()、Close()等,操作SPI总线了。系统要求主、从双机 能够定时向对方发送数据,因此测试平台要求主 $3C2410A定时向从机发送8个字节的自定义数据。 当传输结束后,从机也定时向主机发送任意字符。双 机通信连续72 h测试,结果如图4、5所示。 图4主机接收应用程序 (下转第62页) 62 测控技术)2oio年第29卷第3期 展名、属性值、文本的起始簇和文件的实际长度。图4 为创建文件的程序流程图。 程中,并不是删除所有的数据,而只是将FDT表中的 目录登记项设置一个删除标志“E5H”,并将它的簇链 当State=2时,进行文本文

28、档的删除。在删除过 表清空。图5为删除文件的程序流程图。 读取原有的FAT文件表 f 查找空闲簇,并设置起始簇号 将新的FAT表写回MMCSD卡 l 读取FDT的信息 J l 将文件信息赋给文件目录结构体 、L 将新的FDT的信息写回到MMCSD卡 图4创建文件的程序流程图 4 结束语 通过向特定的扇区写人特定的参数值后,设定 MMCSD卡的存储方式以及读取方式,实现了DSP系 统对MMCSD卡的读写操作,提高了DSP系统的使用 效率,降低了系统使用成本。实现过程保持了与Win dows文件系统FAT32的格式兼容,可以在DSP系统中 对MMCSD卡进行文本文件的存储与读取后,同样也 可以在P

29、c中不用经过转换可以直接读出DSP系统采 集的数据。 参考文献: 1戴士剑,涂彦晖数据恢复技术(第2版)M北京:电 读取原有的FDT表 将文件登记项的头赋值E5H 将新的FDT的信息写回到MMCSD卡 读取原有的FAT表 查找该文件的起始簇号,将该文件的簇链清空 将新的FAT表写回MMCSD卡 图5删除文件的程序流程图 子工业出版社,2005 汪春梅,孙洪波,任治刚TMS320C5000系列DSP系统设 计与开发实例M北京:电子工业出版社,2004-06 Texas Instruments IncorporatedTMS320VC55x系列DSP的 CPU与外设M彭启琮,武乐琴,张舰,等译北京

30、:清华 大学出版社,200512 尤晋元,史美林,等Windows操作系统原理M北京: 机械工业出版社,2001 Texas Instruments IncorporatedTMS320C55x系列DSP指 令系统、开发工具与编程指南M李海森,周天,黎子 盛,等译北京:清华大学出版社,2007 周煜,付宇卓基于SPI协议的MMC卡读写机制的实现 J计算机仿真,2005,22(1) 口 (上接第58页) 图5从机发送应用程序 需要注意的是,用户模式下的每个进程所占用的 内存空间被虚拟内存机制屏蔽,进程问无法直接互访。 因此,在驱动程序和应用程序通信中,通常采用在内核 空问中共享同步对象,通过指针

31、映射来完成。 5 结束语 通过应用程序的实验验证,以$3C2410A控制器 为核心,基于Windows CE操作系统的SPI双机通信的 驱动程序满足智能分析仪器对SPI总线的要求,性能 稳定,实时性良好。Windows CE的模块化和强大的组 件功能结合$3C2410A丰富的硬件资源及快速的数据 处理能力为系统提供了很好的灵活性和扩展性。 参考文献: 1 司浩乐,万波,田玉敏Windows CE下的串口驱动设计 J计算机工程,2008,34(20):8687 2何宗键Windows CE嵌入式系统M北京:北京航空航 天大学出版社,2006 3 MicrosoftMicrosoft Windows CENET help from Microsoft platform builder version 42Z2003 4 Samsung$3C2410X 32一Bit RISC Microprocessor userS manua1 revision 12Z 口 J Jjj 2 3 4 5 6 rL rL rL rL rL

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 学术论文 > 大学论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报