UART接口寄存器S3C2410芯片内部有三个UART接口部件,每个UART的使用都必须初始化设置一些控制寄存器,下面主要介绍这些寄存器的格式。(1)UART线路控制寄存器(ULCONn)ULCONn寄存器共有3个:ULCON0、ULCON1、ULCON2。每个UART接口通道分别对应1个,均是可读/写的,地址分别为:0x50000000、0x50004000、0x50008000,复位后的初值均为0x00。ULCONn寄存器的具体格式如表9-1所示。表9-1ULCONn寄存器的格式符号位描述初始状态Reserved[7]保留0Infra-RedMode[6]确定是否采用红外模式0=正常操作模式1=红外传输模式0ParityMode[5:3]确定校验类型0xx=无校验100=奇校验101=偶校验000StopBit[2]确定停止位数0=1位停止位1=2位停止位0WordLength[1:0]确定数据位数00=5位01=6位10=7位11=8位00(2)UART控制寄存器(UCONn)UCONn寄存器共有3个:UCON0、UCON1、UCON2。每个UART接口通道分别对应1个,均是可读/写的,地址分别为:0x50000004、0x50004004、0x50008004,复位后的初值均为0x00。UCONn寄存器的具体格式如表9-2所示。表9-2UCONn寄存器的格式位描述初始状态[10]选择波特率所用的时钟0=PCLK1=UCLK0[9]确定发送中断请求信号的类型0=边沿触发方式1=电平触发方式0[8]确定接收中断请求信号的类型0=边沿触发方式1=电平触发方式0[7]确定接收超时使能0=不使能1=使能0[6]确定接收错误状态使能0=不使能1=使能0[5]确定是否采用回送模式0=正常操作模式1=回送模式0[4]确定通信中断信号0=正常操作模式1=发送通信中断信号0[3:2]确定将发送数据写入发送缓存区的模式00=不能写01=中断请求模式10=DMA0(UART0)或DMA3(UART2)11=DMA1(UART1)00[1:0]确定从接收缓存区读出数据的模式00=不能读01=中断请求模式10=DMA0(UART0)或DMA3(UART2)11=DMA1(UART1)00(3)UART发送/接收状态寄存器(UTRSTATn)UTRSTATn寄存器共有3个:UTRSTAT0、UTRSTAT1、UTRSTAT2。分别对应UART0、UART1、UART2,均是只读的,地址分别为:0x50000010、0x50004010、0x50008010,复位后的初值均为0x6。UTRSTATn寄存器的具体格式如表9-5所示。表9-5UTRSTATn寄存器的格式位描述初始状态[2]当传送缓冲区没有合法数据要传送,并且传送移位寄存器为空时,该位自动设置为“1”。该位为“0”时,非空。1[1]当传送缓冲区为空时,该位自动设置为“1”。该位为“0”时,传送缓冲区非空。1[0]当接受缓冲区接受到一个数据时,该位自动设置为“1”。该位为“0”时,为空。0(4)UART错误状态寄存器(UERSTATn)UERSTATn寄存器共有3个:UERSTAT0、UERSTAT1、UERSTAT2。分别对应UART0、UART1、UART2,均是只读的,地址分别为:0x50000014、0x50004014、0x50008014,复位后的初值均为0x0。UERSTATn寄存器的具体格式如表9-6所示。表9-6UERSTATn寄存器的格式位描述初始状态[3]保留0[2]当接受出现帧错误时,该位自动设置为“1”。该位为“0”时,没有帧错误。0[1]保留0[0]当接受出现超时运行错误时,该位自动设置为“1”。该位为“0”时,没有超时运行错误。0注:当对UERSTATn寄存器进行了读操作,该寄存器的所有位将清为“0”。(5)UART传送缓冲寄存器(UTXHn)UTXHn寄存器共有3个:UTXH0、UTXH1、UTXH2。分别对应UART0、UART1、UART2,均是只能写入的,地址分别为:0x50000020、0x50004020、0x50008020,复位后的初值不确定。UTXHn寄存器的具体格式如表9-9所示。表9-9UTXHn寄存器的格式位描述初始状态[7:0]8位将要发送的数据-(6)UART接收缓冲寄存器(URXHn)在UART块中包括URXH0,URXH1和URXH2这3个UART传输缓冲寄存器。URXHn有一个用于数据接收的8位的数据。URXHn寄存器共有3个:URXH0、URXH1、URXH2。分别对应UART0、UART1、UART2,均是只读的,地址分别为:0x50000024、0x50004024、0x50008024,复位后的初值不确定。URXHn寄存器的具体格式如表9-10所示。表9-10URXHn寄存器的格式位描述初始状态[7:0]8位接收到的数据-注意:如果发生超时运行错误,URXHn必须进行一次读操作。若没有进行读操作,则下一个被接收的数据将会也是超时运行的,即使UERSTATn寄存器中对应的超时运行错误状态位被清“0”了。初始化程序实例有了图9-13所示的接口电路,还需要编程设置UART0内部的寄存器,才能使UART0部件按照RS-232标准控制串行通信。初始化编程需要设置的内容主要有:根据RS-232数据格式要求,确定本次通信需采用的数据位数、奇偶校验方式、停止位,并且还需设置通信波特率以及是否开放中断等。下面是一个初始化UART0的函数。该函数虽然设计成通用的串口初始化函数,即对UART0、UART1、UART2均可以初始化,但例子中只给出了UART0初始化对应的代码,对于UART1、UART2的初始化代码未给出。它们与UART0初始化代码类似,只不过涉及的寄存器不同而已。函数中,com参数用来确定初始化的是UART0部件,还是UART1或UART2部件,其他参数是双方约定好的数据格式和波特率。/*******************************************************************功能:初始化串口(不使用FIFO,不产生接收错误中断)参数:com:选择com0/com1/com2(0/1/2)parity:选择奇偶校验方式(0:无校验,4:奇校验,5:偶校验)stop:选择停止位(0:1位停止位,1:2位停止位)data:选择数据位(0:5位,1:6位,2:7位,3:8位)baud:波特率********************************************************************/voidrs232_Init(INT8Ucom,INT32Uparity,INT32Ustop,INT32Udata,intbaud){if(com==0)//初始化UART0{rPCONH=(rPCONH&0xffffff00)|0xaa;//设置引脚功能rUFCON0=0x0;//FIFOdisablerUMCON0=0x0;rULCON0=(parity3)|(stop2)|(data);//设置线路控制寄存器rUCON0=0x245;//设置控制寄存器//设置波特率,小数采用四舍五入rUBRDIV0=((int)(PCLK/(baud×16)+0.5)-1);//开中断rINTMSK=rINTMSK&(~(BIT_GLOBAL|BIT_URXD0));//设置中断入口pISR_URXD0=(int)rxCharDone_0;}else{//UART1、UART2的初始化}}I2C总线专用寄存器S3C2410芯片内部的I2C总线控制器,在使用时必须初始化设置一些控制寄存器,下面主要介绍这些寄存器的格式。(1)I2C总线控制寄存器(IICCON)IICCON寄存器是可读/写的,地址分别为:0x54000000,复位后的初值为0x0X。即高4位为0,低4位不确定。IICCON寄存器的具体格式如表10-1所示。表10-1IICCON寄存器的格式符号位描述初始状态ACK[7]I2C总线应答信号使能位0:不使能,1:使能在Tx模式下,SDA信号在ACK周期内空闲在Rx模式下,SDA在ACK周期内为低电平0Tx_sele[6]I2C总线源时钟的预分频值选择位0:IICCLK=fPCLK/161:IICCLK=fPCLK/5120Tx/Rx[5]I2C总线Tx/Rx中断使能位0:不使能,1=使能0Interrup_P[4]I2C总线Tx/Rx中断未决标志位。这一位不能由用户写入1。但当此位读出为1时,SCL为低电平,数据传输终止。重新开始操作,该位应清零。0:1)无中断未决(读时)2)清除未决情况,重新开始操作(写时)1:1)中断未决(读时)2)不允许(写时)0CLK_V[3:0]I2C总线传输时钟的预分频值I2C总线传输时钟频率受这4位预分频值影响,由以下公式计算:Tx的时钟=IICCLK/(CLK_V+1)(2)I2C总线控制/状态寄存器(IICSTAT)IICSTAT寄存器是可读/写的,地址分别为:0x54000004,复位后的初值为0x0。IICSTAT寄存器的具体格式如表10-2所示。表10-2IICSTAT寄存器的格式符号位描述初始状态Mode_Sele[7:6]I2C总线模式选择位00:从属接收模式,01:从属传送模式10:主控接收模式,11:主控传送模式00Buse[5]I2C总线忙信号状态位0:1)不忙(读时)2)停止信号发生(写入)1:1)忙(读时)2)开始信号产生(写入)在此信号之后IICDS中的数据将自动传输0OUTPUT[4]I2C总线输出使能位0:不使能,1:使能0Arb_S[3]I2C总线仲裁规程状态标志位0:总线仲裁成功1:当串行输入/输出时总线仲裁失败0Addr_S[2]I2C总线从属地址状态标志位0:当检测到开始/终止状态时清除1:接收与IICADD中的地址值匹配的从属地址0Addr_zero[1]I2C总线地址0状态标志位0:当检测到开始/终止状态时清除1:接收的从属地址为00000000b0ACK_S[0]I2C总线最后接收位状态标志位0:最后接收位为0(ACK被接受)1:最后接收位为1(ACK不被接受)0(3)I2C总线地址寄存器(IICADD)IICADD寄存器是可读/写的,地址分别为:0x54000008,复位后的初值不确定。IICADD寄存器的具体格式如表10-3所示。表10-3IICADD寄存器的格式符号位描述初始状态Sla_Addr[7:0]I2C总线的7位从属地址当IICSTAT中的I2C总线输出使能位(IICSTAT[4])为0时,IICADD可写。但无论当前I2C总线输出使能位的设置,IICADD值都可读。XXXXXXXX(4)I2C总线传送/接收数据移位寄存器(IICDS)IICDS寄存器是可读/写的,地址分别为:0x5400000C,复位后的初值不确定。IICDS寄存器的具体格式如表10-4所示。表10-4IICDS寄存器的格式符号位描述初始状态Data[7:0]I2C总线的8位移位寄存器当IICSTAT中的I2C总线输出使能位(IICSTAT[4])XXXXXXXX为1时,IICDS可写。但无论当前I2C总线输出使能位的设置,IICDS值都可读。I2C总线的编程实例I2C总线的编程除了需要对I2C总线的专用寄存器进行初始化编程外,还需要按照I2C总线的时序要求编写传送程序和接收程序。(1)初始化编程在任何I2C总线的传送和接收操作之前,必须执行初始化程序。初始化程序的主要功能是:·配置S3C2410芯片相关的I/O引脚为I2C总线所需的功能引脚;·如果有必要,在IICADD寄存器中写入本芯片的从属地址;·设置IICCON寄存器,用来使能中断、设定SCL周期等;·设置IICSTAT以使能传输模式等。下面是一段完成I2C总线初始化的程序代码。/**************************