一种uart多主实时通信系统的制作方法_2

文档序号:9754392阅读:来源:国知局
,意味着总线上的数据不再由本地方决定,而是由远端决定的,中断服务程序就会将P2.0端的输出电平改换为高电平,三极管Q3导通,三极管Q2截止,此时,UART多主实时通信系统处于仲裁失权状态,单片机Ul的TXD端与CAN收发器U2的TXD端隔离开,P2.0端输出的唤醒信号WAKEJJP,也即发送使能信号,将阻止仲裁失权后的一个字节中未发完的后续位继续传递给CAN收发器U2,进一步地,异步串行通信口 UART的发送中断的中断服务程序也会由于仲裁失权而放弃后续字节的发送。
[0014]当从节点的P2.0端输出高电平时,CAN收发器U2由远程来唤醒,CAN收发器U2的TXD端始终隐性,这样,CAN收发器U2的RXD端每收到一个显性位,就产生一次仲裁信号Arbitrt1n的下降沿中断请求信号。
[0015]采用UART接口的带校验位的9BIT模式,每个字节有I个起始位,8个数据位、I个校验位和I个停止位,这个校验位在这里不再是用来描述奇偶特性,而是用来区分所传输的一帧是轮巡式信息帧还是事件触发警报信息帧,校验位为隐性,则为轮巡式信息帧,校验位为显性则为事件触发警报信息帧。因为每个字节都传输校验位,如果在一帧轮巡式信息没传输完时,插入事件触发警报信息帧,那么,接收方只要知道所收的信息中前后两字节的校验位不同,就能找到事件触发警报信息帧的起始字节,如此,就可实现当紧急的事件触发警报信息帧插入进来时,使轮巡式信息帧发送节点失去仲裁权。
[0016]如图3所示为字节收发位的示意图,在本发明中,校验位也被称为轮巡帧位,帧起始字节为命令编码字节或事件编码高字节7位。一个字节的传输顺序与异步串行通信口UART的传输顺序是不一样的,起始位先发送,轮巡帧位紧随其后,接着是八个数据位,最后为停止位,其中,八个数据位的发送顺序为高位先发送,低位后发送。一个字节的起始位始终为显性,停止位始终为隐性,数据位或显性或隐性,轮巡帧位为隐性时则为轮巡通信信息帧,为显性时则为事件触发警报信息帧。由此发送顺序可知,发送每一字节与接收每一字节,都要进行一次带轮巡帧位的倒序转换。
[0017]如图4所示为帧首字节位的示意图,访问位在命令或事件触发警报帧为隐性,在回复的应答帧为显性,应答帧的优先级别高于命令帧或事件触发警报帧。事件编码带优先级,编码小者优先级别高,在分配事件编码时,可根据其紧急状况给予分配。
[0018]因为CAN收发器U2的RXD端,跟本地TXD端与远方TXD端存在线与关系,数据流先流出的位先进行仲裁,根据这个原理,事件触发警报信息帧是带优先级别的,最高优先级的那个事件节点获得仲裁权,事件触发警报帧的优先级别高于轮巡式通信信息帧。
[0019]在本发明中,有一个收集各节点信息的装置,它的地位不同于其它节点,具有收集各节点信息的功能。它是默认的节点,在轮巡式通信信息帧中,它是源节点,在事件触发警报信息帧中,它是目的节点,在本发明中,只需设立被叫节点编码或事件节点编码就可以实现信息从源节点到目的节点的传递。当然,本发明并不排斥报文中带源节点地址编码和目的节点地址编码的各节点间自由发送那种方式,只是为了减少一个发送字节而省掉一个默认节点地址编码。
[0020]本发明具有两种通信协议,分别为轮巡式通信信息帧协议与事件触发警报信息帧协议,具体通信协议由具体的应用而定。如图5所示为轮巡式通信信息帧协议格式示意图,轮巡式通信信息帧协议的命令编码的范围:0到127,节点编码范围:0到255,数据标识范围:0到65535,数据包为O到249个字节,CRC校验一个字节。图6所示为事件触发警报信息帧协议格式示意图,报出事件编码以及事件节点的单一事件编码即可,事件编码只代表节点中的一个事件,事件编码越小,其优先级别越高,如果一个事件节点有多个事件警报,先报最高级别的事件编码,这就给程序提供了事件触发警报的方法,就是在处理事件触发主动警报时,在所有的警报标志区域中,以从小到大的顺序,先按字节做外循环,再按位,从数据位O到数据位7做内循环,一位一位地搜索,并作事件编码计数,如果搜索到一位有置位,则退出搜索,将事件编码计数的数值作为事件编码,并组织事件触发警报信息帧,并置有警报要发送位,准备发送,事件编码的范围O到32767。
[0021 ] 假如有两个以上节点的事件编码相同,那么节点编码小的优先。
[0022]信息帧的仲裁有效期分两种情况,对于事件触发警报信息帧而言,为一个完整帧的收发期间,而对于轮巡式信息帧而言,则为一个字节。
[0023]如图7所示为通信信道的仲裁与控制逻辑时序图,假设在轮巡通信中,有两个事件触发警报节点试图提请仲裁,假设的主控节点、事件节点I和事件节点2都侦听总线为空闲,那么,三个节点都转为发送,在发起始位的时刻,都发显性,接收的也都显性,所以,三方的仲裁申请信号Arbitrt1n都为高电平,没有提出申请;到发轮巡帧位的时刻,主控节点发隐性位,而收到的是显性位,TXD与RXD不同,则主控节点的仲裁申请信号Arbitrt1n为低电平,就提出了是权申请,主控节点的WAKEJJP控制信号输出高电平,从轮巡帧位开始的后续位就屏蔽发送了,阴影位为UART已发送,被WAKEJJP仲裁而没有发送到总线上,事件节点I和事件节点2的轮巡帧位都是显性,TXD与RXD —致,他们的仲裁申请信号Arbitrt1n为高电平,没有提出申请;直到发送到事件位X时,事件节点I为隐性,它接收到的则显性,TXD与RXD不同,其仲裁申请信号Arbitrt1n为低电平,就提出了是权申请,事件节点I的WAKEJJP控制信号输出高电平,从事件位X开始的后续位就屏蔽发送了,阴影位为UART已发送,被WAKEJJP仲裁而没有发送到总线上。事件节点2直到发送完一帧后,在没有提出仲裁申请信号Arbitrt1n信号的情况下,其WAKEJJP控制输出信号才主动转为高电平。
[0024]协议新增设状态寄存器,这个新增设的状态寄存器中的各位为:仲裁失权位、接收一帧位、警报位和有警报要发送位。
[0025]如图8所示为UART初始化程序的流程图,在UART初始化程序中,设置UART 口通信的波特率、将UART 口设置为允许接收中断、允许发送中断、收发数据位的9BIT模式,UART口的接收指针清O,接收字节数置不包括数据包长度的最小字节数6,发送字节数清O。
[0026]如图9所示为主程序启动UART发送函数的流程图,在主程序启动UART发送函数中,根据轮巡式信息帧或事件触发警报信息帧,组织带轮巡帧位的数据帧,UART的发送指针清0,计算发送信息帧的CRC,置发送字节个数,判断仲裁失权位,如果没有失权,则WAKEJJP输出低电平,唤醒U2,允许发送,再判断有事件触发警报信息帧要发送否,如果有,那么,事件触发警报信息帧首字节的轮巡帧位清为显性,并将事件触发警报信息帧首字节倒序送变换后,送UART发送缓存,否则,轮巡信息帧缓存首字节的轮巡帧位置为隐性,并将轮巡信息帧缓存首字节倒序变换后,送UART 口的发送缓存,启动发送后就退出;如果仲裁失权位判断已失去仲裁权,则直接退出,等待下次调用函数时再试图启动UART发送。
[0027]主程序启动UART发送函数的调用,是在有应答帧或者有事件触发警报信息帧时才给予调用。
[0028]如图10所示为主程序处理UART接收解析函数的流程图,在主程序处理UART接收解析函数中,判断接收一帧位,如果没有接收一帧,直接退出函数,否则,清除接
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1