串行口是单片机的标准配置,通过它可以与计算机进行通信,也可以用它来下载程序,下面就来讨论一下LPC824的串口应用。LPC824具备有3个串口,称为通用异/同步收发器(USART),下图给出了它们的内部结构。
从上图中可以看到,UART位于APB设备区,它不仅仅具有TXD和RXD功能,还拥有完整9针串口的所有引脚,因此直接用LPC824来开发Modem控制器是很方便的。当然,一般情况下若只与PC机通信或多机通信,只需要用TXD和RXD两个引脚就可以了。
下表给出了USART接口用到的全部寄存器描述,3个USART的寄存器全部一样,其基址分别为0x40064000(USART0)、0x40068000(USART1)、0x4006C000(USART2)。
由于LPC824的USART接口功能很完善,所以涉及到的寄存器较多,它一共使用了12个寄存器来进行控制,应用上也较为复杂。下面给出了上述寄存器对应的结构体定义。
typedef struct {
__IO uint32_t CFG;
__IO uint32_t CTL;
__IO uint32_t STAT;
__IO uint32_t INTENSET;
__O uint32_t INTENCLR;
__I uint32_t RXDAT;
__I uint32_t RXDATSTAT;
__IO uint32_t TXDAT;
__IO uint32_t BRG;
__I uint32_t INTSTAT;
__IO uint32_t OSR;
__IO uint32_t ADDR;
} LPC_USART0_Type;
为了将3个USART的基址指针强制转换为上述结构体,还要加上下面的定义。
#define LPC_USART0_BASE 0x40064000UL
#define LPC_USART1_BASE 0x40068000UL
#define LPC_USART2_BASE 0x4006C000UL
#define LPC_USART0 ((LPC_USART0_Type *) LPC_USART0_BASE)
#define LPC_USART1 ((LPC_USART0_Type *) LPC_USART1_BASE)
#define LPC_USART2 ((LPC_USART0_Type *) LPC_USART2_BASE)
USART接口涉及到的寄存器较多,下面就来对它们进行具体分析。
先来看USART配置寄存器CFG,该寄存器使用的配置位较多,下表是它的全部位结构,其地址分别为0x40064000(USART0)、0x40068000(USART1)、0x4006C000(USART2)。
(1)第0位(ENABLE)为USART使能位,值为0时禁用USART接口,值为1时使能USART接口,默认为禁止。
(2)第1位为保留位,写入时只能写0。
(3)第2、3两位(DATALEN)为USART数据大小选择位,值从0x0到0x2分别对应选择7位、8位、9位数据长度,值0x3为保留,默认为7位数据长度。
(4)第4、5两位(PARITYSEL)为USART校验类型选择位,值为0x0时选择无校验,值0x1为保留,值为0x2时选择偶校验,值为0x3时选择奇校验,默认为无校验。
(5)第6位(STOPLEN)为停止位长度选择位,值为0时选择1位停止位,值为1时选择2位停止位,该设置只适用于异步通信,默认为1位停止位。
(6)第7、8两位为保留位,写入时只能写0。
(7)第9位(CTSEN)为流量控制使能选择位,值为0时无流量控制,值为1时使能硬件流量控制,默认为无流量控制。
(8)第10位为保留位,写入时只能写0。
(9)第11位(SYNCEN)为同步或异步选择位,值为0时选择异步模式,值为1时选择同步模式,默认为异步模式。
(10)第12位(CLKPOL)为时钟极性和采样边沿选择位,值为0时选择下降沿采样,值为1时选择上升沿采样,该设置只在同步模式下有效,默认为下降沿采样。
(11)第13位为保留位,写入时只能写0。
(12)第14位(SYNCMST)为同步模式下的主机选择位,值为0时USART作为从机运行,值为1时USART作为主机运行,默认为从机运行。
(13)第15位(LOOP)为数据环回模式选择位,值为0时是正常工作模式,值为1时是环回工作模式,默认为正常工作模式。环回模式提供了一个USART数据环回诊断检测机制,发送器(Un_TXD)发送的串行数据与接收器 (Un_RXD)的串行输入从内部互连。
(14)第16、17两位为保留位,写入时只能写0。
(15)第18位(OETA)为输出周转时间使能位,用于执行RS-485操作,值为0时解除置位,值为1时置位,默认为解除置位。
(16)第19位(AUTOADDR)为自动地址匹配使能位,值为0时禁止自动地址匹配功能,值为1时使能自动地址匹配功能,默认为禁止。
(17)第20位(OESEL)为输出使能选择位,值为0时RTS信号被用作标准流量控制功能,值为1时输出使能,接管RTS信号的目的在于提供输出使能信号,以控制RS-485收发器。
(18)第21位(OEPOL)为输出使能极性选择位,该位只在OESEL位置1的情况下生效,值为0时选择低电平,值为1时选择高电平,默认为低电平。
(19)第22位(RXPOL)为接收数据极性选择位,值为0时无影响,值为1时反相,默认为无影响。
(20)第23位(TXPOL)为发送数据极性选择位,值为0时无影响,值为1时反相,默认为无影响。
(21)第24到31位为保留位,写入时只能写0。
CFG寄存器包含USART各方面的通信和模式配置,这些配置一般在应用中一次配置完成。虽然该寄存器的配置项较多,但如果只使用标准的异步串行口,则只需要配置一下数据长度就可以了,最多再配置一下停止位及校验位,然后就可以使能USART了。
接下来看USART控制寄存器CTL,下表是它的全部位结构,其地址分别为0x40064004 (USART0)、0x40068004 (USART1)、0x4006C004 (USART2)。
(1)第0位为保留位,写入时只能写0。
(2)第1位(TXBRKEN)为中止使能位,值为0时正常工作,值为1时持续中止在此位置位之时即刻发送,并一直保留,直至此位被清除,默认为正常工作。
(3)第2位(ADDRDET)为地址检测模式使能位,值为0时禁用地址检测模式,USART显示所有接收到的数据,值为1时使能地址检测模式,USART接收器会忽略不具备数据有效位(一般是第9位)=1的接收数据,默认为禁用。
(4)第3到5位为保留位,写入时只能写0。
(5)第6位(TXDIS)为发送禁止位,值为0时无影响,值为1时禁用发送功能,默认为无影响。
(6)第7位为保留位,写入时只能写0。
(7)第8位(CC)为连续时钟生成选择位,该位只在同步模式下有效,值为0时为对字符计时,值为1时为连续时钟,默认为对字符计时。
(8)第9位(CLRCCONRX)为清除连续时钟位,值为0时无影响,值为1时自动清除CC位,接收到完整字符时,会自动清除CC位,同时也会清除此位,默认为无影响。
(9)第10到15位为保留位,写入时只能写0。
(10)第16位(AUTOBAUD)为自动波特率使能位,值为0时禁用自动波特率,值为1时使能自动波特率,默认为禁用。
(11)第17到31位为保留位,写入时只能写0。
CTL寄存器用于控制那些在USART操作层面很容易被改变的操作过程,如果只使用标准的异步串口,可以使用该寄存器的默认值。
接下来看USART状态寄存器STAT,下表是它的全部位结构,其地址分别为0x40064008 (USART0)、0x40068008 (USART1)、0x4006C008 (USART2) 。
(1)第0位(RXRDY)为接收器就绪标志位,该位为只读,值为0时表示接收器缓冲区中无可读取的数据,值为1时表示可以从接收器缓冲区中读取数据,对RXDAT或RXDATSTAT寄存器执行读取操作后将自动清除该标志位。
(2)第1位(RXIDLE)为接收器闲置标志位,该位为只读,值为0时表示接收器当前正在接收数据,值为1时表示接收器当前并未接收数据。
(3)第2位(TXRDY)为发送器就绪标志位,该位为只读,值为0时表示数据不能被写入发送缓冲区,值为1时表示数据可以被写入发送缓冲区,在数据被写入TXDAT寄存器时自动清除该标志位。
(4)第3位(TXIDLE)为发送器闲置标志位,该位为只读,值为0时表示发送器当前正在发送数据。值为1时表示发送器当前并未发送数据。
(5)第4位(CTS)反映CTS信号的当前状态,CTS输入引脚将采用此数值,除非已使能环回模式,该位为只读。
(6)第5位(DELTACTS)为上述CTS标志的检测状态发生变化时,该位置位,对该位写1时清除。
(7)第6位(TXDISSTAT)为发送器禁用中止标志位,该位为只读,值为0时表示未被禁用,值为1时表示USART发送器在被CTL寄存器的TXDIS禁用(TXDIS=1)之后完全处于闲置状态。
(8)第7位为保留位,写入时只能写0。
(9)第8位(OVERRUNINT)为溢出错误中止标志位,在接收到新字符且此接收器缓冲区正被使用时,该标志位置位,如果发生这种情况,则表明移位寄存器中新接收到的字符将会丢失,对该位写1时清除。
(10)第9位为保留位,写入时只能写0。
(11)第10位(RXBRK)为接收到的中止标志位,该位为只读,反映接收器中止检测逻辑的当前状态,当Un_RXD引脚在16位时间内保持低电平时,该标志位置位,如果发生这种情况,FRAMERRINT也会被置位,因为该字符的停止位也会丢失,当Un_RXD引脚变为高电平时,该位被清除。
(12)第11位(DELTARXBRK),当接收器中止检测状态发生变化时,该位置位,对该位写1时清除。
(13)第12位(START),当在接收器输入中检测到开始时,该位置位,其目的在于当检测到开始时,可以立即从深度睡眠或掉电模式中唤醒,对该位写1时清除。
(14)第13位(FRAMERRINT)为帧传输错误中断标志位,当字符被保存到指定位置但停止位缺失时,该标志置位,这表明可能波特率或配置与发送源不匹配,对该位写1时清除。
(15)第14位(PARITYERRINT)为奇偶校验错误中断标志位,在接收到的字符中检测到奇偶校验错误时,该标志置位,对该位写1时清除。
(16)第15位(RXNOISEINT)为接收噪声中断标志位,当接收数据位中包含一个不一致的采样时,该标志置位,这表示可能在接收数据时存在线路噪声、波特率或字符格式不匹配的情况,对该位写1时清除。
(17)第16位(ABERR)为自动波特率错误标志位,当波特率超时时即会发生波特率错误,该标志位置位,对该位写1时清除。
(18)第17到31位为保留位,写入时只能写0。
STAT寄存器主要提供整组USART状态标志,以便程序进行读取。在接收噪声、奇偶校验错误、帧错误及溢出的错误标记检测到时即置位相应的标志位,之后便一直保持置位,直到被STAT中的程序进行清除操作。
--待续--
相关文章