接下来看USART中断使能读取和置位寄存器INTENSET,下表是它的全部位结构,其地址分别为0x4006400C(USART0)、0x4006800C(USART1)、0x4006C00C(USART2)。
(1)第0位(RXRDYEN)为接收完毕中断使能位,置1时使能中断,当RXDAT寄存器中存在可读取的接收字符时会触发NVIC串口中断,默认值为禁止中断。
(2)第1位为保留位,写入时只能写0。
(3)第2位(TXRDYEN)为发送准备好中断使能位,置1时使能中断,当TXDAT寄存器可加载另一个字符时会触发NVIC串口中断,默认值为禁止中断。
(4)第3位(TXIDLEEN)为发送闲置中断使能位,置1时使能中断,当发送器进入闲置状态 (即TXIDLE=1)时会触发NVIC串口中断,默认值为禁止中断。
(5)第4位为保留位,写入时只能写0。
(6)第5位(DELTACTSEN)为CTS输入状态变化中断使能位,置1时使能中断,当CTS输入的状态发生变化时会触发NVIC串口中断,默认值为禁止中断。
(7)第6位(TXDISEN)为TXDISINT标志所示完成禁用中断使能位,置1时使能中断,当发送器按照STAT中的TXDISINT标志所示完成禁用时会触发NVIC串口中断,默认值为禁止中断。
(8)第7位为保留位,写入时只能写0。
(9)第8位(OVERRUNEN)为溢出中断使能位,置1时使能中断,当发生溢出错误时会触发NVIC串口中断,默认值为禁止中断。
(10)第9、10两位为保留位,写入时只能写0。
(11)第11位(DELTARXBRKEN)为接收中止条件检测状态变化中断使能位,置1时使能中断,当接收的中止条件的检测状态发生变化(中止条件被置位或解除置位)时会触发NVIC串口中断,默认值为禁止中断。
(12)第12位(STARTEN)为接收开始中断使能位,置1时使能中断,当检测到接收开始位时会触发NVIC串口中断,默认值为禁止中断。
(13)第13位(FRAMERREN)为帧传输错误中断使能位,置1时使能中断,当检测到帧传输错误时会触发NVIC串口中断,默认值为禁止中断。
(14)第14位(PARITYERREN)为奇偶校验错误中断使能位,置1时使能中断,当检测到奇偶校验错误时会触发NVIC串口中断,默认值为禁止中断。
(15)第15位(RXNOISEEN)为检测到噪声中断使能位,置1时使能中断,当检测到噪声时会触发NVIC串口中断,默认值为禁止中断。
(16)第16位(ABERREN)为波特率错误中断使能位,置1时使能中断,当发生波特率错误时会触发NVIC串口中断,默认值为禁止中断。
(17)第17到31位为保留位,写入时只能写0。
注意,对于INTENSET寄存器,在使能了相应的中断项目后,实际申请的是串口的NVIC中断源,所以在中断响应后,还需要去判断具体是哪个中断项目引发的中断(可通过查询后面讨论的INTSTAT寄存器)。如果要禁止某项中断,不能对INTENSET寄存器写0,而应该去配置USART中断使能清除寄存器INTENCLR,下表给出了该寄存器的全部位结构,其地址分别为0x40064010(USART0)、0x40068010(USART1)、0x4006C010(USART2)。
(1)第0位(RXRDYCLR)为接收完毕中断清除位,置1时清除中断,默认值为不清除。
(2)第1位为保留位,写入时只能写0。
(3)第2位(TXRDYCLR)为发送准备好中断清除位,置1时清除中断,默认值为不清除。
(4)第3位(TXIDLECLR)为发送闲置中断清除位,置1时清除中断,默认值为不清除。
(5)第4位为保留位,写入时只能写0。
(6)第5位(DELTACTSCLR)为CTS输入状态变化中断清除位,置1时清除中断,默认值为不清除。
(7)第6位(TXDISCLR)为TXDISINT标志所示完成禁用中断清除位,置1时清除中断,默认值为不清除。
(8)第7位为保留位,写入时只能写0。
(9)第8位(OVERRUNCLR)为溢出中断清除位,置1时清除中断,默认值为不清除。
(10)第9、10两位为保留位,写入时只能写0。
(11)第11位(DELTARXBRKCLR)为接收中止条件检测状态变化中断清除位,置1时清除中断,默认值为不清除。
(12)第12位(STARTCLR)为接收开始中断清除位,置1时清除中断,默认值为不清除。
(13)第13位(FRAMERRCLR)为帧传输错误中断清除位,置1时清除中断,默认值为不清除。
(14)第14位(PARITYERRCLR)为奇偶校验错误中断清除位,置1时清除中断,默认值为不清除。
(15)第15位(RXNOISECLR)为检测到噪声中断清除位,置1时清除中断,默认值为不清除。
(16)第16位(ABERRCLR)为波特率错误中断清除位,置1时清除中断,默认值为不清除。
(17)第17到31位为保留位,写入时只能写0。
INTENCLR寄存器的作用其实等同于向INTENSET寄存器中写0,但由于硬件设计的原因,不能向INTENSET寄存器写0,所以只有通过INTENCLR寄存器中对应的位写1来实现清零,因此两个寄存器的位结构是一一对应的。
接下来看USART接收器数据寄存器RXDAT,下表是它的全部位结构,其地址分别为0x40064014(USART0)、0x40068014(USART1)、0x4006C014(USART2)。
(1)第0到8位(RXDAT)为UART接收到的9位数据。
(2)第9到31位为保留位。
RXDAT寄存器中包含溢出前接收到的最后字符数据,读取此寄存器会改变RXDATSTAT寄存器中的状态标志。下面就给出USART接收器数据状态寄存器RXDATSTAT的全部位结构,其地址分别为0x40064018(USART0)、0x40068018(USART1)、0x4006C018(USART2)。
(1)第0到8位(RXDAT)为接收到的9位数据,该部分与RXDAT寄存器中的值是一样的。
(2)第9到12位为保留位。
(3)第13位(FRAMERR)为帧错误状态标志位,当值为1时,表明RXDAT中的字符被保存到指定位置但停止位缺失,这可能是由于波特率或配置与发送源不匹配造成的。
(4)第14位(PARITYERR)为奇偶校验错误状态标志位,当值为1时,表明在接收到的字符中检测到奇偶校验错误。
(5)第15位(RXNOISE)为接收的噪声标志位,当值为1时,表明接收到噪声。其原理为,取接收数据的三次采样,以确定每个接收数据位的值。如果一个采样不一致,则此标志会被当做噪声过滤器。当接收数据位中包含一个不一致的采样时,此标志置位。这可能表示在接收数据时存在线路噪声、波特率或字符格式不匹配,或同步丢失。
(6)第16到31位为保留位。
RXDATSTAT寄存器不仅包含有一个待读取的完整字符数据,同时还包含了与该字符数据相关联的状态标志。这样,只需执行一次16位读取操作,即可获取与接收字符相关的所有信息,非常方便。因此,可以使用RXDATSTAT寄存器来替代RXDAT寄存器。
接下来看USART发送器数据寄存器TXDAT,下表是它的全部位结构,其地址分别为0x4006401C(USART0)、0x4006801C(USART1)、0x4006C01C(USART2)。
(1)第0到8位(TXDAT)为UART将要发送的9位数据,一旦发送位移寄存器可用且达到发送数据的条件,会立即发送数据该数据。
(2)第9到31位为保留位。
接下来是USART波特率发生器寄存器BRG,下表是它的全部位结构,其地址分别为0x40064020(USART0)、0x40068020(USART1)、0x40068020(USART2)。
(1)第0到15位(BRGVAL)为除以USART输入时钟的数值,用于确定波特率(基于来自FRG的输入时钟)。
(2)第16到31位为保留位,写入时只能写0。
关于波特率的具体计算,会在后面作详细讨论。接下来看USART中断状态寄存器INTSTAT,下表是它的全部位结构,其地址分别为0x40064024(USART0)、0x40068024(USART1)、0x40068024(USART2)。
(1)第0位(RXRDY)为接收完毕中断标记位。
(2)第1位为保留位,写入时只能写0。
(3)第2位(TXRDY)为发送准备好中断标记位。
(4)第3位(TXIDLE)为发送闲置中断标记位。
(5)第4位为保留位,写入时只能写0。
(6)第5位(DELTACTS)为CTS输入状态变化中断标记位。
(7)第6位(TXDISINT)为TXDISINT标志所示完成禁用中断标记位。
(8)第7位为保留位,写入时只能写0。
(9)第8位(OVERRUNINT)为溢出中断标记位。
(10)第9、10两位为保留位,写入时只能写0。
(11)第11位(DELTARXBRK)为接收中止条件检测状态变化中断标记位。
(12)第12位(START)为接收开始中断标记位。
(13)第13位(FRAMERRINT)为帧传输错误中断标记位。
(14)第14位(PARITYERRINT)为奇偶校验错误中断标记位。
(15)第15位(RXNOISEINT)为检测到噪声中断标记位。
(16)第16位(ABERR)为波特率错误中断标记位。
(17)第17到31位为保留位,写入时只能写0。
在前面提到过,INTSTAT寄存器就是用来在串口NVIC中断响应后,判断具体是哪一个中断项目触发了中断的。
下面来看USART过采样选择寄存器OSR,下表是它的全部位结构,其地址分别为0x40064028(USART0)、0x40064028(USART1)、0x40068028(USART2)。
(1)第0到3位(OSRVAL)为过采样选择值,其中0到3的值不支持,从0x4开始支持,0x4表示使用5个外设时钟来发送和接收各数据位,以此类推。
(2)第4到31位为保留位。
OSR寄存器允许在异步模式中执行过采样选择。过采样值即是用于接收1个数据位的BRG时钟编号。默认值为行业标准16x过采样。当外设时钟速率不是预期最高波特率的16倍时,更改过采样有时候可以实现更好的波特率匹配。
最后来看USART地址寄存器ADDR,下表是它的全部位结构,其地址分别为0x4006402C(USART0)、0x4006802C(USART1)、0x4006C02C(USART2)。
(1)第0到7位(ADDRESS)为8位自动匹配的地址值,在已使能地址检测(CTL中的ADDRDET=1)和自动地址匹配(CFG中的AUTOADDR=1)时使用。
(2)第8到31位为保留位。
至此,所有串口用到的寄存器全部介绍完毕,后面将会以一个实例来具体说明串口的应用。
--待续--
相关文章