任瑞涛,姜家宏
(1.海军701工厂研发部,北京100016;2.中国电子科技集团公司第45研究所研发部,河北三河065201)
在AVR系列单片机中,通过设置从机的UCSRA寄存器中标志位MPCM,可以使能USART接收器对接收的数据帧进行过滤的功能。在多处理器通信模式下,多个从处理器可以从一个主处理器接收数据。如果使能过滤功能,首先要通过解码地址帧来确定所寻址的是哪个处理器。如果寻址到某一个处理器,它将正常接收后续数据,其他的从处理器会忽略这些帧,直到接收到另一个地址帧,发送器则不受MPCM位设置的影响。这在多机通信中有效地方便了对从机MCU处理器程序的编写,缩短了MCU处理数据的时间。
在多机通信模式下,数据帧一般采用:1位起始位+9位数据位+校验位(可选)+1或2个停止位。其中第9位(RXB8)表征该帧是地址帧还是数据帧。当帧类型表征位为“1”时,表示该帧数据为一个地址帧;当帧类型表征位为“0”时,表示这个帧为一个数据帧。此外,也可以在编程时,用8位数据位+奇偶校验位的数据帧格式来代替9位数据位+无奇偶校验位的数据帧格式[1]。
对于一个作为主机的处理器,可以使用9位数据帧格式。如果传输的是一个地址帧就将第9位(TXB8)置1,如果是一个数据帧就将它清零。在这种帧格式下,从处理器必须工作于9位数据帧格式。在多处理器通信模式下进行数据交换的步骤:
(1)所有从处理器都工作在多处理器通信模式(MPCM=1)。
(2)通信开始是由主机先发送一个地址帧,所有从机都会接收并读取此帧。从处理器UCSRA寄存器的RXC正常置位,表示接收到地址帧。
(3)每一个从机都会读取UDR寄存器的内容来确定自己是否被寻址。如果被寻址,就将UCSRA的MPCM位清零,等待接收数据;否则,保持MPCM为“1”,等待下一个地址帧的接收:
1)作为1号从机的MCU处理过程为,收到地址帧后,判定读取UDR数据0X01为自己的地址,将MPCM位置“0”,接收之后所有主机下发的数据帧,直到下一个地址帧为止。
2)其他从机MCU的处理过程,收到地址帧后,判定读取UDR数据0X01不是自己的地址,将MPCM位置“1”,这样他们将忽略主机随后发送的数据帧,直到主机再次发送地址帧。
(4)当被寻址的从机MCU接收完最后一个数据帧后,将MPCM位置位,等待下一个地址帧的出现,然后从步骤(2)开始重复。
以AVR系列单片机中的ATmega32为例,使用编译器ICCAVR对初始化程序、发送程序和接收程序给出了具体方案和实现方法。
当主机发送数据帧或地址帧时,将第9位复制到TXB8,然后将数据放入缓冲器,发送数据。程序流程图如图1所示[2]。
图1 主机发送流程图
在多机通信中,设置发送器或接收器中的第9位或发送器中的第9位来确定是数据帧还是地址帧,这给程序员的编程带来便利。同时提高了系统的速度和稳定度,避免因为区分地址和数据程序陷于死循环。
图2 从机接收流程图
[1] 周兴华.AVR单片机C语言高级程序设计[M].北京:中国电力出版社,2008.
[2] 张军.AVR系列单片机应用系统典型实例[M].北京:中国电力出版社,2005.