S3C2410中文芯片手册(2)

Overrun error, parity error, frame error 和 break condition 是接收错误状态,它们都能引发接收错误状态中断请求,如果接收错误状态中断使能位(receive-error-status-interrupt-enable)被设置成1在 UCONn 中。当接收错误状态中断请求(receive-error-status-interrupt-request)被检测到,导致请求的信号可以通过读取 UERSTSTn 的值来被识别。

如果在接收模式下控制寄存器(UCONn)中的值被设为1(Interrupt request or polling mode),在 FIFO 模式下,当接收器将接收缓冲器中的数据发送到接收 FIFO 中并且接收到的数据量达到 Rx FIFO 的触发等级,Rx 中断将会产生。
在 Non-FIFO 模式中,如果设置为 Interrupt request and polling 模式,当把接收缓冲器中的数据发送到接收保持寄存器将会引起 Rx 中断。

如果在发送模式下控制寄存器被设置为 Interrupt request or polling 模式,当发送器将发送 FIFO 中的数据发送到发送缓冲器并且发送 FIFO 中剩余的数据量达到 Tx FIFO 的触发等级, Tx 中断将会产生。
在 Non-FIFO 模式中,如果设置为 Interrupt request and polling 模式,当把发送保持寄存器中的数据发送到发送缓冲器时将会引起 Tx 中断。

如果控制寄存器被设为 DMAn request 模式,那么在上面提到的发送模式和接收模式中,DMAn 请求将会取代 Rx 或 Tx 中断。

选区_003.png

UART Error Status FIFO

除了 Rx FIFO 寄存器,串口还有错误状态队列(error status FIFO)。这个错误状态队列记录了 FIFO 寄存器中接收到的哪个数据是错误的。当带有错误的数据准备被读出时,错误中断将会产生。为了清除错误状态队列(error status FIFO),需要读取 URXHn 和 UERSTATn 寄存器。

For example

假设 UART Rx FIFO 连续地收到了 A,B,C,D 和 E 五个字符,并且当接收到 ‘B’ 时发生 frame error,接收到 ‘D’ 时发生 parity error。

实际上串口接收到错误将不会产生任何错误中断,因为收到的错误字符还没有被读出来。当错误字符被读出时发生错误中断。

Figure 11-3 shows the UART receiving the five characters including the two errors.

TimeSequence FlowError InterruptNote
#0   When no character is read out   -   -  
#1   A,B,C,D,and E is received   -   -  
#2   After A is read out   The frame error (in B) interrupt occurs.   The 'B' has to be read out  
#3   After B is read out   -   -  
#4   After C is read out   The parity error (in D) interrupt occurs.   The 'D' has to be read out  
#5   After D is read out   -   -  
#6   After E is read out   -   -  

选区_004.png

Baud-Rate Generation

每个串口的波特率发生器给发送器和接收器提供串行时钟。波特率发生器的时钟源可以选择 S3C2410S 的内部系统时钟或 UCLK。换句话说,分频因子是可以选择的通过设置 UCONn 中的时钟选项。波特率时钟是通过在串口波特率分频因子寄存器(UART baud-rate divisor register) UBRDIVn 中设置16位的分频因子来分频时钟源(PCLK or UCLK)。 UBRDIVn 可以通过下面的公式确定:

UBRDIVn = (int)(PCLK/(bps * 16)) - 1

分频因子的范围1~(2^16^-1)。

为了准确地操作串口,S3C2410X 还支持使用 UCLK 作为分频源。
如果 S3C2410X 使用外部串口设备或系统提供的额 UCLK,那么串口的串行时钟将和 UCLK 同步。因此用户可以更加准确的操作串口。UBRDIVn 可以通过下面公式确定:

UBRDIVn = (int)(UCLK/(bps * 16)) - 1

分频因子的范围1~(2^16^-1),并且 UCLK 应该比 PCLK 小。

For example:如果波特率是115200 bps 并且 PCLK 和 UCLK 是 40 MHz, UBRDIVn 如下确定:

UBRDIVn = (int)(40000000/(115200 * 16)) - 1 = (int)(21.7) - 1 = 21 - 1 = 20 UART baud-rate generator error tolerance

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5fdda73ec7e955135c2ba6a9042ba79f.html