MB89P475的UART/SIO结构与应用
时,P21/SO1、P26/SO2为串行数据输出口;
SCKE:串行时钟输出允许位,置0时,P20/SCK1、P27/SCK2为通用I/O口或串行时钟输入口,置1时,P20/SCK1、P27/SCK2为串行时钟输出口;
RIE:接收中断允许位,置0时,接收中断禁止,置1时,接收中断允许;
TIE:发射中断允许位,置0时,发射中断禁止,置1时,发射中断允许。
(3)SSD1/2:状态与数据寄存器(地址:0028H/002DH,初始化值:00001---H),格式如下:
Bit7Bit6Bit5BIT4Bit3Bit2Bit1Bit0PREOVEFERRDRFTDRE------
其中,PRE:为校验错误标志,0为无校验错误,1为校验错误;
OVE:溢出错误标志,0为无溢出错误,1为溢出错误;
FER:帧错误标志,0为无帧错误,1为帧错误;
RDRF:接收数据寄存器满标志,0为寄存器空,1为接收数据满;
TDRE:发射数据寄存器空标志,0为发射数据满,1为寄存器空。
这里,SSD1/2是只读寄存器。若接收中断允许(RIE=1),那么任何错误标志置“1”都将产生接收中断。因此,在程序中将RERC(SMC12/22中的Bit7)置“1”,可将各错误标志清零。
(4)SRC1/2:波特率控制寄存器(地址:002AH/002FH,初始化值:xxxxxxxxH)
当SMC11/SMC21寄存器中的CLK2~CLK0设为“011”时,由于选择的是波特率发生器作为串行时钟(异步通信方式使用),因此,只有在UART/SIO停止工作时,写入SRC1/2的数据才有效。此时,波特率计算方法如下(CLK2~CLK0设为“011”):
波特率=1/(16nTint)
式中,n为写入SRC1/2的数值,Tint为指令周期,其值可通过对相关寄存器编程设定为4/fch、8/fch、16/fch、64/fch(其中fch为系统时钟振荡器频率)。
(5)SIDR1/2:输入数据寄存器(地址:0029H/002EH,初始化值:xxxxxxxxH)
该寄存器用于存放接收到的数据。当数据接收完成时,RSRF位(SSD1/2中的Bit4)被置“1”,此时若接收中断允许,将产生接收中断请求。读出接收数据后,RSRF位自动清“0”。
系统检测到接收中断请求后,应检查RSRF位是否为“1”,若为“0”,说明该中断是由于接收错误产生的,SIDR1/2并未接收到数据,此时应在相应的程序中作相应处理。
(6)SODR1/2:输出数据寄存器(地址:0029H/002EH,初始化值:xxxxxxxxH)
SODR1/2与SIDR1/2具有相同的地址。发射允许时,将发射数据写入该寄存器即可直接转送到发射寄存器,并通过发射移位寄存器发送到串行数据输出口(SO1/2)。
图5
发射数据写入SODR1/2寄存器时,发射数据标志位TDRE同时被清“0”,发射数据转送到发射移位寄存器后,TDRE被置“1”,意味着SODR1/2寄存器可以写入下一个发射数据,同 《MB89P475的UART/SIO结构与应用(第3页)》
本文链接地址:http://www.oyaya.net/fanwen/view/175857.html
SCKE:串行时钟输出允许位,置0时,P20/SCK1、P27/SCK2为通用I/O口或串行时钟输入口,置1时,P20/SCK1、P27/SCK2为串行时钟输出口;
RIE:接收中断允许位,置0时,接收中断禁止,置1时,接收中断允许;
TIE:发射中断允许位,置0时,发射中断禁止,置1时,发射中断允许。
(3)SSD1/2:状态与数据寄存器(地址:0028H/002DH,初始化值:00001---H),格式如下:
Bit7Bit6Bit5BIT4Bit3Bit2Bit1Bit0PREOVEFERRDRFTDRE------
其中,PRE:为校验错误标志,0为无校验错误,1为校验错误;
OVE:溢出错误标志,0为无溢出错误,1为溢出错误;
FER:帧错误标志,0为无帧错误,1为帧错误;
RDRF:接收数据寄存器满标志,0为寄存器空,1为接收数据满;
TDRE:发射数据寄存器空标志,0为发射数据满,1为寄存器空。
这里,SSD1/2是只读寄存器。若接收中断允许(RIE=1),那么任何错误标志置“1”都将产生接收中断。因此,在程序中将RERC(SMC12/22中的Bit7)置“1”,可将各错误标志清零。
(4)SRC1/2:波特率控制寄存器(地址:002AH/002FH,初始化值:xxxxxxxxH)
当SMC11/SMC21寄存器中的CLK2~CLK0设为“011”时,由于选择的是波特率发生器作为串行时钟(异步通信方式使用),因此,只有在UART/SIO停止工作时,写入SRC1/2的数据才有效。此时,波特率计算方法如下(CLK2~CLK0设为“011”):
波特率=1/(16nTint)
式中,n为写入SRC1/2的数值,Tint为指令周期,其值可通过对相关寄存器编程设定为4/fch、8/fch、16/fch、64/fch(其中fch为系统时钟振荡器频率)。
(5)SIDR1/2:输入数据寄存器(地址:0029H/002EH,初始化值:xxxxxxxxH)
该寄存器用于存放接收到的数据。当数据接收完成时,RSRF位(SSD1/2中的Bit4)被置“1”,此时若接收中断允许,将产生接收中断请求。读出接收数据后,RSRF位自动清“0”。
系统检测到接收中断请求后,应检查RSRF位是否为“1”,若为“0”,说明该中断是由于接收错误产生的,SIDR1/2并未接收到数据,此时应在相应的程序中作相应处理。
(6)SODR1/2:输出数据寄存器(地址:0029H/002EH,初始化值:xxxxxxxxH)
SODR1/2与SIDR1/2具有相同的地址。发射允许时,将发射数据写入该寄存器即可直接转送到发射寄存器,并通过发射移位寄存器发送到串行数据输出口(SO1/2)。
图5
发射数据写入SODR1/2寄存器时,发射数据标志位TDRE同时被清“0”,发射数据转送到发射移位寄存器后,TDRE被置“1”,意味着SODR1/2寄存器可以写入下一个发射数据,同 《MB89P475的UART/SIO结构与应用(第3页)》