110 likes | 255 Views
多机通信系统设计. 3 、 多机通信系统设计. 在多处理器通信模式下,多个从处理器可以从一个主处理器接收数据。首先要通过解码地址帧来确定所寻址的是哪一个处理器。如果寻址到某一个处理器,它将正常接收后续的数据,而其他的从处理器会忽略这些帧直到接收到另一个地址帧。. 如果接收器所接收的数据帧长度为 5 到 8 位,那么第一个停止位表示这一帧包含的是数据还是地址信息。 如果接收器所接收的数据帧长度为 9 位,那么由第 9 位( RXB8 )来确定是数据还是地址信息。 如果确定帧类型的位(第一个停止位或第 9 个数据位)为 1 ,那么这是地址帧,否则为数据帧。.
E N D
3、多机通信系统设计 在多处理器通信模式下,多个从处理器可以从一个主处理器接收数据。首先要通过解码地址帧来确定所寻址的是哪一个处理器。如果寻址到某一个处理器,它将正常接收后续的数据,而其他的从处理器会忽略这些帧直到接收到另一个地址帧。
如果接收器所接收的数据帧长度为5到8位,那么第一个停止位表示这一帧包含的是数据还是地址信息。如果接收器所接收的数据帧长度为5到8位,那么第一个停止位表示这一帧包含的是数据还是地址信息。 如果接收器所接收的数据帧长度为9位,那么由第9位(RXB8)来确定是数据还是地址信息。 如果确定帧类型的位(第一个停止位或第9个数据位)为1,那么这是地址帧,否则为数据帧。
3.1 USART相关寄存器 USART控制和状态寄存器A-UCSRA Bit0–MPCM:多处理器通信模式 设置此位将启动多处理器通信模式。MPCM置位后,USART接收器接收到的那些不包含地址信息的输入帧都将被忽略。发送器不受MPCM设置的影响。
对于一个作为主机的处理器来说,它可以使用9位数据帧格式(UCSZ=7)。如果传输的是一个地址帧(TXB8=1)就将第9位(TXB8)置1,如果是一个数据帧(TXB=0)就将它清零。在这种帧格式下,从处理器必须工作于9位数据帧格式。对于一个作为主机的处理器来说,它可以使用9位数据帧格式(UCSZ=7)。如果传输的是一个地址帧(TXB8=1)就将第9位(TXB8)置1,如果是一个数据帧(TXB=0)就将它清零。在这种帧格式下,从处理器必须工作于9位数据帧格式。 使用5至8比特的帧格式是可以的,但是不实际,因为接收器必须在使用n和n+1帧格式之间进行切换。 下面即为在多处理器通信模式下进行数据交换的步骤:
1.所有从处理器都工作在多处理器通信模式(UCSRA寄存器的MPCM置位)。1.所有从处理器都工作在多处理器通信模式(UCSRA寄存器的MPCM置位)。 2.主处理器发送地址帧后,所有从处理器都会接收并读取此帧。从处理器UCSRA寄存器的RXC正常置位。 3.每一个从处理器都会读取UDR寄存器的内容已确定自己是否被选中。如果选中,就清零UCSRA的MPCM位,否则它将等待下一个地址字节的到来,并保持MPCM为1。 4.被寻址的从处理器将接收所有的数据帧,直到收到一个新的地址帧。而那些保持MPCM位为1的从处理器将忽略这些数据。 5.被寻址的处理器接收到最后一个数据帧后,它将置位MPCM,并等待主处理器发送下一个地址帧。然后第2步之后的步骤重复进行。
3.2 软件设计 /**************************************************** *作 者:电子工程学院 *功 能:UsartRX中断服务函数(Slave) *入口参数:无 *返 回 值:无 *注意事项:1、中断向量号:12 ****************************************************/ #pragma interrupt_handler UsartRX_isr:12 void UsartRX_isr(void) {
if(Usart_RX_Cnt==0) { //如果地址匹配,就清零UCSRA的MPCM位 if(UDR==Scan_Slave_Address()) { Usart_RX_Cnt=1; //清零UCSRA的MPCM位 Usart_MPCM_Disable(); //回传地址 Usart_Send_9bit(1,Scan_Slave_Address()); } }
else if(Usart_RX_Cnt==1) { //如果命令匹配,返回数据给主机 if(UDR==Slave_Echo_CMD) { Usart_RX_Cnt=0; Usart_Send_9bit(1,Get_Slave_Data()); Usart_MPCM_Enable(); } } }