基于BU65170与单片机系统的RT设计与实现
7。
4BU65170与单片机接口软件设计
BU65170初始上电时,片内的寄存器和静态数据存储器的内容都是系统默认的。软件设计上的第一步就是要对这些功能寄存器和静态数据存储器进行初始化。初始化过程中对有寄存器的赋值是有先后顺序的。如果顺序颠倒会导致初始化的失败。例如启动/复位寄存器必须要在初始化的最开始设置。该寄存器的最后一位置1时,BU65170片内所有寄存器和地址单元都复位成上电时默认的状态。之后通过设置结构寄存器3来启用增强型功能模式。该功能启用后,一些 BU65170较前几代产品所具有的新功能将允许被使用。以上寄存器设置完毕后,其它部分则需按照设计要求进行相关初始化。整个初始化过程的流程图如如3 所示:
图3初始化子程序框图 图4中断服务程序框图
针对1553B总线上的不同消息类型以及设计的要求,对于数据和指令的通讯采用三种数据传输模式:单消息模式、双缓冲模式和循环缓冲模式[2]。单消息模式主要特点是简单,每一个接收、发送子地址都对应一固定的数据块(该数据块可设定),对于每条新消息主处理器可直接查询数据块。双缓冲模式为主处理器提供一种接收最新、最完整有效数据的方法。该模式下,一个接收子地址对应两个数据块,任何时候都只有一个数据块是激活的,下一条接收消息的数据将存储在激活的数据块中,当一条有效的消息结束后,BU65170将在两个数据块上切换。进行大量的数据传输通讯采用循环缓冲模式。循环缓冲区大小在初始化中设定,最小位128字,最大为8192字。
初始化中断屏蔽寄存器时,主要打开两种中断。一种是消息结束(EOM)中断,另一种是循环缓冲翻转中断。为了便于消息查询,将消息描述栈指针指向栈顶。查询表和子地址控制字初始化指定了通讯过程中数据的接收和发送所利用的子地址以及采用的数据传输模式。该部分是初始化软件中最重要的环节。本文将数据注入设置在接收子地址2,内部指令设置在接收子地址8,接收方式均为单消息模式;广播时间设置在接收子地址4,接收方式为双缓冲模式;将测量数据打包发送给总线的事件设置在发送子地址9,发送方式为循环缓冲。同时对非法指令表进行初始化,仅将以上通讯事件设置为本系统所能接受的合法消息。
在处理1553B总线上的通讯事件时,采用中断查询的方法。当有外部中断0有中断信号时,单片机控制器通过外部中断0的入口地址跳转到中断服务程给出序中。如图4所示:首先查询是否是EOM中断,由于消息结束后,BU65170中命令字寄存器中的内容会被修改,故查询该寄存器。如果其中内容是内部指令或数据注入消息的命令代码,则执行相应的总线数据接收控制子程序,否则继续查询。为防止多个事件同时到来引起中断重叠时丢失事件响应的问题,在内部指令和数据注入控制子程序结束后进一步查询中断状态寄存器。该寄存器的低字节第五位表征循环缓冲翻转中断的状态。逻辑1表示循环缓冲区翻转,逻辑0则循环缓冲区没有翻转。如果该位为高电平,则清空该位后执行相应的子程序来控制测量数据发送。
总线通讯中还有一种被称作广播时间的通讯事件,该事件每秒钟发生一次。由星上数据管理系统广播发送当前时间。有效载荷接收并校对自已的时钟系统。设计接收该类型消息时,我们采用双缓冲模式。消息到来时,不触发中断。初始化设置正确后,该消息的接收完全由BU65170芯片自动完成。当测控系统使用时间时,直接到循环缓冲子地址对应的数据块中读取。
在调试过程中,笔者发现,单片机对BU65170芯片内寄存器和静态数据存储器的数据存取时,对操作时序要求严格,具体遵循以下原则:
对芯片内地址单元(双字节)进行写操作时,两次操作的间隔不应少于2.5us。
对芯片内地址单元进行读操作时,首先应对该地址进行一次空读。即第一次读取的数据不能使用,应对该地址重复读取一遍,第二遍读出的内容才是实际该地址中的内容。如果需要在连续的地址空间中读取多个数据,则两次读操作的时间间隔也不应少于2.5us。
4 结束语
本文在介绍1553B总线协议芯片BU65170的基础上,在以单片机为核心,以BU65170为通讯接口的有效载荷测控系统中,设计了软硬件接口,将有效载荷作为一个RT与星上数据管理系统实现了通讯连接。在数次整星电联试试验中,与数据管理系统的通讯及时准确、稳定可靠。接口电路简单,易于实现,软件设计模块化、规范化,针对不同类型消息采用不同通讯模式的方法大大提高了系统通讯的可靠性和稳定性。该接口方式对于嵌入式系统与1553B总线连接更具有广泛的适用性。
参考文献:
1.马捷中等 1553B总线控制器远程终端软件设计[J]
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)